diff --git a/Alignment/HIPAlignmentAlgorithm/python/common_cff_py.txt b/Alignment/HIPAlignmentAlgorithm/python/common_cff_py.txt index 8f547eef1d3ab..09abda64c3411 100644 --- a/Alignment/HIPAlignmentAlgorithm/python/common_cff_py.txt +++ b/Alignment/HIPAlignmentAlgorithm/python/common_cff_py.txt @@ -176,7 +176,7 @@ for sra in SelectorRigidAlignables: if not tmpstrsrafound: tmprigidalignables.append(sra) else: - print "{} is already in the non-rigid alignables list. Omitting it in the rigid structures to align.".format(tmpstrsra) + print("{} is already in the non-rigid alignables list. Omitting it in the rigid structures to align.".format(tmpstrsra)) SelectorRigidAlignables = tmprigidalignables process.AlignmentProducer.ParameterBuilder.SelectorBowed = cms.PSet( diff --git a/Alignment/HIPAlignmentAlgorithm/scripts/makeHippyCampaign.py b/Alignment/HIPAlignmentAlgorithm/scripts/makeHippyCampaign.py index 06324d036ca3a..a0893443359e3 100755 --- a/Alignment/HIPAlignmentAlgorithm/scripts/makeHippyCampaign.py +++ b/Alignment/HIPAlignmentAlgorithm/scripts/makeHippyCampaign.py @@ -11,8 +11,6 @@ import subprocess import sys -basedir = "/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN2/HipPy" - thisfile = os.path.abspath(__file__) def main(): @@ -20,13 +18,21 @@ def main(): parser.add_argument("foldername", help="folder name for the campaign. Example: CRUZET20xy") parser.add_argument("--cmssw", default=os.environ["CMSSW_VERSION"]) parser.add_argument("--scram-arch", default=os.environ["SCRAM_ARCH"]) - parser.add_argument("--subfolder", default="", help="subfolder within "+basedir+" to make 'foldername' in.") + parser.add_argument("--subfolder", default="", help="subfolder within basedir to make 'foldername' in.") parser.add_argument("--merge-topic", action="append", help="things to cms-merge-topic within the CMSSW release created", default=[]) parser.add_argument("--print-sys-path", action="store_true", help=argparse.SUPPRESS) #internal, don't use this + parser.add_argument('--basedir', default="/afs/cern.ch/cms/CAF/CMSALCA/ALCA_TRACKERALIGN2/HipPy") args = parser.parse_args() + basedir = args.basedir + if not os.path.exists(basedir): + raise FileExistsError("Base Directory does not exist!") + + if basedir[-1] == '/': + basedir = basedir[:-1] #No trailing slashed allowed + if args.print_sys_path: - print repr(sys.path) + print(repr(sys.path)) return folder = os.path.join(basedir, args.subfolder, args.foldername) @@ -100,7 +106,14 @@ def main(): shutil.copy(os.path.join(HIPAlignmentAlgorithm, "test", "hippysubmittertemplate.sh"), "submit_template.sh") os.chmod("submit_template.sh", os.stat("submit_template.sh").st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH) subprocess.check_call(["git", "add", "submit_template.sh"]) - + + if not os.path.exists("submit_script.sh"): + shutil.copy(os.path.join(HIPAlignmentAlgorithm, "test", "hippysubmitterscript.sh"), "submit_script.sh") + os.chmod("submit_script.sh", os.stat("submit_script.sh").st_mode | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH) + subprocess.check_call(["git", "add", "submit_script.sh"]) + + print("Dumped files into ", folder) + try: subprocess.check_output(["git", "diff", "--staged", "--quiet"]) except subprocess.CalledProcessError: @@ -128,7 +141,7 @@ def cd(newdir): def cmsenv(): output = subprocess.check_output(["scram", "ru", "-sh"]) - for line in output.split(";\n"): + for line in output.decode('utf8').split(";\n"): if not line.strip(): continue match1 = re.match(r'^export (\w*)="([^"]*)"$', line) match2 = re.match(r'^unset *((\w* *)*)$', line) diff --git a/Alignment/HIPAlignmentAlgorithm/test/hippysubmitterscript.sh b/Alignment/HIPAlignmentAlgorithm/test/hippysubmitterscript.sh new file mode 100644 index 0000000000000..97ef75d1e4b07 --- /dev/null +++ b/Alignment/HIPAlignmentAlgorithm/test/hippysubmitterscript.sh @@ -0,0 +1,15 @@ +#! /bin/bash + +hipName="$(grep -m 1 "alignmentname=" $1 | cut -d= -f2)" + +if [ -z "$hipName" ] +then + echo "Value for 'alignmentname' not found in template. Please check your submission template." +else + nohup ./$1 >> ../$hipName.log 2>&1 & + echo $hipName $! >> ../pid.nohup + echo "Please follow the log in '../$hipName.log'. To track progress live, use 'tail -f ../$hipName.log'." + echo "The nohup job PID is appended to '../pid.nohup' in case the submission should be killed." + echo "You can also use 'ps -ef | grep submit_' to find PIDs of currently running alignments." +fi + diff --git a/Alignment/HIPAlignmentAlgorithm/test/hippysubmittertemplate.sh b/Alignment/HIPAlignmentAlgorithm/test/hippysubmittertemplate.sh index 3468295a195a9..9c2bf4ef8c32b 100644 --- a/Alignment/HIPAlignmentAlgorithm/test/hippysubmittertemplate.sh +++ b/Alignment/HIPAlignmentAlgorithm/test/hippysubmittertemplate.sh @@ -6,7 +6,7 @@ set -euo pipefail voms-proxy-info | grep timeleft | grep -v -q 00:00:00 || (echo 'no proxy'; exit 1) -(echo $STY > /dev/null) || (echo "run this on a screen"; exit 1) +(echo $TMUX > /dev/null) || (echo "run this on a screen"; exit 1) #hpnumber= hptype=hp #or sm diff --git a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.h b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.h index 62f3d5f396cb4..ce701bf645098 100644 --- a/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.h +++ b/Alignment/MillePedeAlignmentAlgorithm/plugins/MillePedeAlignmentAlgorithm.h @@ -116,9 +116,6 @@ class MillePedeAlignmentAlgorithm : public AlignmentAlgorithmBase { /// called at end of luminosity block void endLuminosityBlock(const edm::EventSetup &) override; - /* virtual void beginLuminosityBlock(const edm::EventSetup &setup) {} */ - /* virtual void endLuminosityBlock(const edm::EventSetup &setup) {} */ - /// Called in order to pass parameters to alignables for a specific run /// range in case the algorithm supports run range dependent alignment. bool setParametersForRunRange(const RunRange &runrange) override; diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/test_payload_sanity.sh b/Alignment/MillePedeAlignmentAlgorithm/test/test_payload_sanity.sh index 55191e29e75cc..9ee58beaa1475 100755 --- a/Alignment/MillePedeAlignmentAlgorithm/test/test_payload_sanity.sh +++ b/Alignment/MillePedeAlignmentAlgorithm/test/test_payload_sanity.sh @@ -1,6 +1,7 @@ #!/bin/bash function die { echo $1: status $2; exit $2; } -INPUTFILE=${SCRAM_TEST_PATH}/alignments_MP.db -(cmsRun ${SCRAM_TEST_PATH}/AlignmentRcdChecker_cfg.py inputSqliteFile=${INPUTFILE}) || die 'failed running AlignmentRcdChecker' +echo -e "Content of the current directory is: "`ls .` +INPUTFILE=alignments_MP.db +(cmsRun ${SCRAM_TEST_PATH}/AlignmentRcdChecker_cfg.py inputSqliteFile=${INPUTFILE}) || die 'failed running AlignmentRcdChecker' $? rm $INPUTFILE diff --git a/Alignment/MillePedeAlignmentAlgorithm/test/test_pede.sh b/Alignment/MillePedeAlignmentAlgorithm/test/test_pede.sh index 137c4df7cfde6..339ce9792e472 100755 --- a/Alignment/MillePedeAlignmentAlgorithm/test/test_pede.sh +++ b/Alignment/MillePedeAlignmentAlgorithm/test/test_pede.sh @@ -4,7 +4,7 @@ function die { echo $1: status $2; exit $2; } LOCAL_TEST_DIR=${SCRAM_TEST_PATH} clean_up(){ - echo "cleaning the local test area" + echo -e "\nCleaning the local test area" rm -fr milleBinary00* rm -fr pedeSteer* rm -fr millepede.* @@ -13,7 +13,7 @@ clean_up(){ rm -fr *.dat rm -fr *.tar rm -fr *.gz - rm -fr *.db + rm -fr *.dump } if test -f "milleBinary*"; then @@ -39,10 +39,9 @@ if [ $STATUS -eq 0 ]; then echo -e "\n @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" echo -e " @ MillePede Exit Status: "`cat millepede.end` echo -e " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" - ## mv the output file to the local test directory for the subsequent payload sanity check - mv alignments_MP.db ${LOCAL_TEST_DIR} ## clean the house now... clean_up + echo -e "\nContent of the current directory is: "`ls .` else die "SKIPPING test, file ${TESTPACKAGE}.tar not found" 0 fi diff --git a/Alignment/OfflineValidation/README.md b/Alignment/OfflineValidation/README.md index 02dd633ff9ca4..d7c4554d9812d 100644 --- a/Alignment/OfflineValidation/README.md +++ b/Alignment/OfflineValidation/README.md @@ -114,5 +114,8 @@ For details read [`README_PV.md`](https://github.com/cms-sw/cmssw/blob/master/Al ## JetHT validation For details read [`README_JetHT.md`](https://github.com/cms-sw/cmssw/blob/master/Alignment/OfflineValidation/README_JetHT.md) +## MTS validation +For details read [`README_MTS.md`](https://github.com/cms-sw/cmssw/blob/master/Alignment/OfflineValidation/README_MTS.md) + ## General info about IOV/run arguments For details read [`README_IOV.md`](https://github.com/cms-sw/cmssw/blob/master/Alignment/OfflineValidation/README_IOV.md) diff --git a/Alignment/OfflineValidation/README_MTS.md b/Alignment/OfflineValidation/README_MTS.md new file mode 100644 index 0000000000000..e616e4d549147 --- /dev/null +++ b/Alignment/OfflineValidation/README_MTS.md @@ -0,0 +1,33 @@ +## MTS (Muon Track Splitting) validation + +### General info + +``` +validations: + MTS: + : + : + +``` + +MTS validation runs in 1 possible type of steps: + - single (validation analysis by MTS_cfg.py) +Step name is arbitrary string which will be used as a reference for consequent steps. +Merge and trend jobs are not yet implemented. + +### Single MTS jobs + +Single jobs can be specified per run (IoV as well). + +**Parameters below to be updated** +Variable | Default value | Explanation/Options +-------- | ------------- | -------------------- +IOV | None | List of IOVs/runs defined by integer value. IOV 1 is reserved for MC. +Alignments | None | List of alignments. Will create separate directory for each. +dataset | See defaultInputFiles_cff.py | Path to txt file containing list of datasets to be used. If file is missing at EOS or is corrupted - job will eventually fail (most common issue). +goodlumi | cms.untracked.VLuminosityBlockRange() | Path to json file containing lumi information about selected IoV - must contain list of runs under particular IoV with lumiblock info. Format: `IOV_Vali_{}.json` +maxevents | 1 | Maximum number of events before cmsRun terminates. +trackcollection | "generalTracks" | Track collection to be specified here, e.g. "ALCARECOTkAlMuonIsolated" or "ALCARECOTkAlMinBias" ... +tthrbuilder | "WithAngleAndTemplate" | Specify TTRH Builder +usePixelQualityFlag | True | Use pixel quality flag? +cosmicsZeroTesla | False | Is this validation for cosmics with zero magnetic field? diff --git a/Alignment/OfflineValidation/bin/BuildFile.xml b/Alignment/OfflineValidation/bin/BuildFile.xml index 2f5b984819312..6578fd9b70855 100644 --- a/Alignment/OfflineValidation/bin/BuildFile.xml +++ b/Alignment/OfflineValidation/bin/BuildFile.xml @@ -18,5 +18,6 @@ + diff --git a/Alignment/OfflineValidation/bin/MTSmerge.cc b/Alignment/OfflineValidation/bin/MTSmerge.cc new file mode 100644 index 0000000000000..c94e55a6d8e26 --- /dev/null +++ b/Alignment/OfflineValidation/bin/MTSmerge.cc @@ -0,0 +1,87 @@ +#include +#include +#include +#include +#include + +#include "exceptions.h" +#include "toolbox.h" +#include "Options.h" + +#include "boost/filesystem.hpp" +#include "boost/property_tree/ptree.hpp" +#include "boost/property_tree/json_parser.hpp" +#include "boost/optional.hpp" + +#include "TString.h" +#include "TASImage.h" + +#include "Alignment/OfflineValidation/macros/trackSplitPlot.h" +#include "Alignment/OfflineValidation/macros/trackSplitPlot.C" +#include "Alignment/OfflineValidation/interface/TkAlStyle.h" + +using namespace std; +using namespace AllInOneConfig; + +namespace pt = boost::property_tree; + +int merge(int argc, char* argv[]) { + // parse the command line + + Options options; + options.helper(argc, argv); + options.parser(argc, argv); + + //Read in AllInOne json config + pt::ptree main_tree; + pt::read_json(options.config, main_tree); + + pt::ptree alignments = main_tree.get_child("alignments"); + pt::ptree validation = main_tree.get_child("validation"); + pt::ptree global_style; + pt::ptree merge_style; + + int iov = validation.count("IOV") ? validation.get("IOV") : 1; + std::string rlabel = validation.count("customrighttitle") ? validation.get("customrighttitle") : ""; + rlabel = merge_style.count("Rlabel") ? merge_style.get("Rlabel") : rlabel; + std::string cmslabel = merge_style.count("CMSlabel") ? merge_style.get("CMSlabel") : "INTERNAL"; + if (TkAlStyle::toStatus(cmslabel) == CUSTOM) + TkAlStyle::set(CUSTOM, NONE, cmslabel, rlabel); + else + TkAlStyle::set(TkAlStyle::toStatus(cmslabel), NONE, "", rlabel); + + TString filesAndLabels; + for (const auto& childTree : alignments) { + // Print node name and its attributes + std::cout << "Node: " << childTree.first << std::endl; + for (const auto& attr : childTree.second) { + std::cout << " Attribute: " << attr.first << " = " << attr.second.data() << std::endl; + } + + //std::cout << childTree.second.get("file") << std::endl; + //std::cout << childTree.second.get("title") << std::endl; + //std::cout << childTree.second.get("color") << std::endl; + //std::cout << childTree.second.get("style") << std::endl; + + std::string toAdd = childTree.second.get("file") + + Form("/MTSValidation_%s_%d.root=", childTree.first.c_str(), iov) + + childTree.second.get("title") + + Form("|%i|%i,", childTree.second.get("color"), childTree.second.get("style")); + filesAndLabels += toAdd; + } + + std::cout << "filesAndLabels: " << filesAndLabels << std::endl; + + TkAlStyle::legendheader = ""; + TkAlStyle::legendoptions = "all"; + outliercut = -1.0; + //fillmatrix(); + subdetector = "PIXEL"; + makePlots(filesAndLabels, "./"); + + return EXIT_SUCCESS; +} + +#ifndef DOXYGEN_SHOULD_SKIP_THIS +int main(int argc, char* argv[]) { return exceptions(argc, argv); } +#endif diff --git a/Alignment/OfflineValidation/interface/TkAlStyle.h b/Alignment/OfflineValidation/interface/TkAlStyle.h index ca99704d473eb..fae28aea455f3 100644 --- a/Alignment/OfflineValidation/interface/TkAlStyle.h +++ b/Alignment/OfflineValidation/interface/TkAlStyle.h @@ -42,6 +42,9 @@ enum PublicationStatus { // Data era: determines labels of data-taking periods, e.g. CRUZET enum Era { NONE, CRUZET15, CRAFT15, COLL0T15 }; +// Alignment object +enum AlignObj { IDEALAlign, RUN1Align, CRUZETAlign, CRAFTAlign, Coll0TAlign }; + class TkAlStyle { public: // Adjusts the gStyle settings and store the PublicationStatus @@ -52,6 +55,13 @@ class TkAlStyle { static void set(const TString customTitle); static PublicationStatus status() { return publicationStatus_; } + static TString toTString(const PublicationStatus status); + static TString toTString(const Era era); + static TString toTString(const AlignObj obj); + + static int color(const AlignObj obj); + static int style(const AlignObj obj); + // Draws a title " 2015" on the current pad // dependending on the PublicationStatus // INTERNAL : no extra label (intended for AN-only plots with data) diff --git a/Alignment/OfflineValidation/macros/FitPVResiduals.C b/Alignment/OfflineValidation/macros/FitPVResiduals.C index 2dcf9a5037252..04fe43f26e13a 100644 --- a/Alignment/OfflineValidation/macros/FitPVResiduals.C +++ b/Alignment/OfflineValidation/macros/FitPVResiduals.C @@ -39,7 +39,7 @@ #include #include #include -//#include "Alignment/OfflineValidation/macros/TkAlStyle.cc" +//#include "Alignment/OfflineValidation/interface/TkAlStyle.h" #include "Alignment/OfflineValidation/macros/CMS_lumi.h" #define PLOTTING_MACRO // to remove message logger #include "Alignment/OfflineValidation/interface/PVValidationHelpers.h" diff --git a/Alignment/OfflineValidation/macros/momentumElectronBiasValidation.C b/Alignment/OfflineValidation/macros/momentumElectronBiasValidation.C index 52bfdab5b4eb7..ac77f589f8e11 100644 --- a/Alignment/OfflineValidation/macros/momentumElectronBiasValidation.C +++ b/Alignment/OfflineValidation/macros/momentumElectronBiasValidation.C @@ -131,7 +131,7 @@ void momentumElectronBiasValidation(TString variable, std::vector labels; // list of input labels if (!checkArguments( variable, path, alignmentWithLabel, outputType, radius, verbose, givenMin, givenMax, mode, files, labels)) - return; + exit(EXIT_FAILURE); else { std::cout << "-> Number of files: " << files.size() << std::endl; } diff --git a/Alignment/OfflineValidation/macros/trackSplitPlot.C b/Alignment/OfflineValidation/macros/trackSplitPlot.C index 1e48e0ee52a1e..39e030fe10a91 100644 --- a/Alignment/OfflineValidation/macros/trackSplitPlot.C +++ b/Alignment/OfflineValidation/macros/trackSplitPlot.C @@ -8,689 +8,660 @@ Table Of Contents 5. Place Legend ***********************************/ +using namespace std; #include "trackSplitPlot.h" -#include "Alignment/OfflineValidation/macros/TkAlStyle.cc" +#include "Alignment/OfflineValidation/interface/TkAlStyle.h" //=================== //0. Track Split Plot //=================== -TCanvas *trackSplitPlot(Int_t nFiles,TString *files,TString *names,TString xvar,TString yvar, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas, ostream& summaryfile) -{ - if (TkAlStyle::status() == NO_STATUS) - TkAlStyle::set(INTERNAL); - TString legendOptions = TkAlStyle::legendoptions; - legendOptions.ReplaceAll("all","meanerror,rmserror").ToLower(); - if (outliercut < 0) - outliercut = -1; - gStyle->SetMarkerSize(1.5); - setupcolors(); - stufftodelete->SetOwner(true); - cout << xvar << " " << yvar << endl; - if (xvar == "" && yvar == "") - return 0; - - PlotType type; - if (xvar == "") type = Histogram; - else if (yvar == "") type = OrgHistogram; - else if (resolution) type = Resolution; - else if (nFiles < 1) type = ScatterPlot; - else type = Profile; - if (nFiles < 1) nFiles = 1; - - const Int_t n = nFiles; - - vector p; - Int_t lengths[n]; - - stringstream sx,sy,srel,ssigma1,ssigma2,ssigmaorg; - - sx << xvar << "_org"; - TString xvariable = sx.str(); - TString xvariable2 = ""; - if (xvar == "runNumber") xvariable = "runNumber"; - if (xvar.BeginsWith("nHits")) - { - xvariable = xvar; - xvariable2 = xvar; - xvariable.Append("1_spl"); - xvariable2.Append("2_spl"); - } +TCanvas *trackSplitPlot(Int_t nFiles, + TString *files, + TString *names, + TString xvar, + TString yvar, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas, + ostream &summaryfile) { + if (TkAlStyle::status() == NO_STATUS) + TkAlStyle::set(INTERNAL); + TString legendOptions = TkAlStyle::legendoptions; + legendOptions.ReplaceAll("all", "meanerror,rmserror").ToLower(); + if (outliercut < 0) + outliercut = -1; + gStyle->SetMarkerSize(1.5); + setupcolors(); + stufftodelete->SetOwner(true); + cout << xvar << " " << yvar << endl; + if (xvar == "" && yvar == "") + return nullptr; + + PlotType type; + if (xvar == "") + type = Histogram; + else if (yvar == "") + type = OrgHistogram; + else if (resolution) + type = Resolution; + else if (nFiles < 1) + type = ScatterPlot; + else + type = Profile; + if (nFiles < 1) + nFiles = 1; + + const Int_t n = nFiles; + + vector p; + Int_t lengths[n]; + + stringstream sx, sy, srel, ssigma1, ssigma2, ssigmaorg; + + sx << xvar << "_org"; + TString xvariable = sx.str(); + TString xvariable2 = ""; + if (xvar == "runNumber") + xvariable = "runNumber"; + if (xvar.BeginsWith("nHits")) { + xvariable = xvar; + xvariable2 = xvar; + xvariable.Append("1_spl"); + xvariable2.Append("2_spl"); + } + + sy << "Delta_" << yvar; + TString yvariable = sy.str(); + + TString relvariable = "1"; + if (relative) { + srel << yvar << "_org"; + relvariable = srel.str(); + } + + TString sigma1variable = "", sigma2variable = ""; + if (pull) { + ssigma1 << yvar << "1Err_spl"; + ssigma2 << yvar << "2Err_spl"; + } + sigma1variable = ssigma1.str(); + sigma2variable = ssigma2.str(); + + TString sigmaorgvariable = ""; + if (pull && relative) + ssigmaorg << yvar << "Err_org"; + sigmaorgvariable = ssigmaorg.str(); + + Double_t xmin = -1, xmax = 1, ymin = -1, ymax = 1, xbins = -1, ybins; + if (type == Profile || type == ScatterPlot || type == OrgHistogram || type == Resolution) + axislimits(nFiles, files, xvar, 'x', relative, pull, xmin, xmax, xbins); + if (type == Profile || type == ScatterPlot || type == Histogram || type == Resolution) + axislimits(nFiles, files, yvar, 'y', relative, pull, ymin, ymax, ybins); + + std::vector meansrmss(n); + std::vector means(n); + std::vector rmss(n); + //a file is not "used" if it's MC data and the x variable is run number, or if the filename is blank + std::vector used(n); + + for (Int_t i = 0; i < n; i++) { + stringstream sid; + sid << "p" << i; + TString id = sid.str(); + + //for a profile or resolution, it fills a histogram, q[j], for each bin, then gets the mean and width from there. + vector q; - sy << "Delta_" << yvar; - TString yvariable = sy.str(); - - TString relvariable = "1"; - if (relative) - { - srel << yvar << "_org"; - relvariable = srel.str(); + if (type == ScatterPlot) + p.push_back(new TH2F(id, "", xbins, xmin, xmax, ybins, ymin, ymax)); + if (type == Histogram) + p.push_back(new TH1F(id, "", ybins, ymin, ymax)); + if (type == OrgHistogram) + p.push_back(new TH1F(id, "", xbins, xmin, xmax)); + if (type == Resolution || type == Profile) { + p.push_back(new TH1F(id, "", xbins, xmin, xmax)); + for (Int_t j = 0; j < xbins; j++) { + stringstream sid2; + sid2 << "q" << i << j; + TString id2 = sid2.str(); + q.push_back(new TH1F(id2, "", 1000, ymin * 10, ymax * 10)); + } } - TString sigma1variable = "",sigma2variable = ""; - if (pull) - { - ssigma1 << yvar << "1Err_spl"; - ssigma2 << yvar << "2Err_spl"; + p[i]->SetLineColor(colors[i]); + if (type == Resolution || type == Profile) { + p[i]->SetMarkerStyle(styles[i] / 100); + p[i]->SetMarkerColor(colors[i]); + p[i]->SetLineStyle(styles[i] % 100); + } else { + if (styles[i] >= 100) { + p[i]->SetMarkerStyle(styles[i] / 100); + p[i]->SetMarkerColor(colors[i]); + p[i]->Sumw2(); + } + p[i]->SetLineStyle(styles[i] % 100); } - sigma1variable = ssigma1.str(); - sigma2variable = ssigma2.str(); - - TString sigmaorgvariable = ""; - if (pull && relative) - ssigmaorg << yvar << "Err_org"; - sigmaorgvariable = ssigmaorg.str(); - - Double_t xmin = -1, xmax = 1, ymin = -1, ymax = 1, xbins = -1, ybins; - if (type == Profile || type == ScatterPlot || type == OrgHistogram || type == Resolution) - axislimits(nFiles,files,xvar,'x',relative,pull,xmin,xmax,xbins); - if (type == Profile || type == ScatterPlot || type == Histogram || type == Resolution) - axislimits(nFiles,files,yvar,'y',relative,pull,ymin,ymax,ybins); - - std::vector meansrmss(n); - std::vector means(n); - std::vector rmss(n); - std::vector used(n); //a file is not "used" if it's MC data and the x variable is run number, or if the filename is blank - - for (Int_t i = 0; i < n; i++) - { - stringstream sid; - sid << "p" << i; - TString id = sid.str(); + stufftodelete->Add(p[i]); + p[i]->SetBit(kCanDelete, true); + + used[i] = true; + //if it's MC data (run 1), the run number is meaningless + if ((xvar == "runNumber" && findMax(files[i], "runNumber", 'x') < 2) || files[i] == "") { + used[i] = false; + p[i]->SetLineColor(kWhite); + p[i]->SetMarkerColor(kWhite); + for (unsigned int j = 0; j < q.size(); j++) + delete q[j]; + continue; + } - //for a profile or resolution, it fills a histogram, q[j], for each bin, then gets the mean and width from there. - vector q; + TFile *f = TFile::Open(files[i]); + TTree *tree = (TTree *)f->Get("cosmicValidation/splitterTree"); + if (tree == nullptr) + tree = (TTree *)f->Get("splitterTree"); + + lengths[i] = tree->GetEntries(); + + Double_t x = 0, y = 0, rel = 1, sigma1 = 1; + Double_t sigma2 = 1; //if !pull, we want to divide by sqrt(2) because we want the error from 1 track + Double_t sigmaorg = 0; + + Int_t xint = 0, xint2 = 0; + Int_t runNumber = 0; + double pt1 = 0, maxpt1 = 0; + + if (!relative && !pull && (yvar == "dz" || yvar == "dxy")) + rel = 1e-4; //it's in cm but we want it in um, so divide by 1e-4 + if (!relative && !pull && (yvar == "phi" || yvar == "theta" || yvar == "qoverpt")) + rel = 1e-3; //make the axis labels manageable + + tree->SetBranchAddress("runNumber", &runNumber); + if (type == Profile || type == ScatterPlot || type == Resolution || type == OrgHistogram) { + if (xvar == "runNumber") + tree->SetBranchAddress(xvariable, &xint); + else if (xvar.BeginsWith("nHits")) { + tree->SetBranchAddress(xvariable, &xint); + tree->SetBranchAddress(xvariable2, &xint2); + } else + tree->SetBranchAddress(xvariable, &x); + } + if (type == Profile || type == ScatterPlot || type == Resolution || type == Histogram) { + int branchexists = tree->SetBranchAddress(yvariable, &y); + if (branchexists == -5) //i.e. it doesn't exist + { + yvariable.ReplaceAll("Delta_", "d"); + yvariable.Append("_spl"); + tree->SetBranchAddress(yvariable, &y); + } + } + if (relative && xvar != yvar) //if xvar == yvar, setting the branch here will undo setting it to x 2 lines earlier + tree->SetBranchAddress(relvariable, &rel); //setting the value of rel is then taken care of later: rel = x + if (pull) { + tree->SetBranchAddress(sigma1variable, &sigma1); + tree->SetBranchAddress(sigma2variable, &sigma2); + } + if (relative && pull) + tree->SetBranchAddress(sigmaorgvariable, &sigmaorg); + if (xvar == "pt" || yvar == "pt" || xvar == "qoverpt" || yvar == "qoverpt") { + tree->SetBranchAddress("pt1_spl", &pt1); + } else { + maxpt1 = 999; + } - if (type == ScatterPlot) - p.push_back(new TH2F(id,"",xbins,xmin,xmax,ybins,ymin,ymax)); + Int_t notincluded = 0; //this counts the number that aren't in the right run range. + //it's subtracted from lengths[i] in order to normalize the histograms + + for (Int_t j = 0; j < lengths[i]; j++) { + tree->GetEntry(j); + if (xvar == "runNumber" || xvar.BeginsWith("nHits")) + x = xint; + if (xvar == "runNumber") + runNumber = x; + if (yvar == "phi" && y >= pi) + y -= 2 * pi; + if (yvar == "phi" && y <= -pi) + y += 2 * pi; + if ((runNumber < minrun && runNumber > 1) || + (runNumber > maxrun && maxrun > 0)) //minrun and maxrun are global variables. + { + notincluded++; + continue; + } + if (relative && xvar == yvar) + rel = x; + Double_t error = 0; + if (relative && pull) + error = sqrt((sigma1 / rel) * (sigma1 / rel) + (sigma2 / rel) * (sigma2 / rel) + + (sigmaorg * y / (rel * rel)) * (sigmaorg * x / (rel * rel))); + else + error = sqrt(sigma1 * sigma1 + + sigma2 * sigma2); // = sqrt(2) if !pull; this divides by sqrt(2) to get the error in 1 track + y /= (rel * error); + + if (pt1 > maxpt1) + maxpt1 = pt1; + + if (ymin <= y && y < ymax && xmin <= x && x < xmax) { if (type == Histogram) - p.push_back(new TH1F(id,"",ybins,ymin,ymax)); - if (type == OrgHistogram) - p.push_back(new TH1F(id,"",xbins,xmin,xmax)); - if (type == Resolution || type == Profile) - { - p.push_back(new TH1F(id,"",xbins,xmin,xmax)); - for (Int_t j = 0; j < xbins; j++) - { - - stringstream sid2; - sid2 << "q" << i << j; - TString id2 = sid2.str(); - q.push_back(new TH1F(id2,"",1000,ymin*10,ymax*10)); - - } + p[i]->Fill(y); + if (type == ScatterPlot) + p[i]->Fill(x, y); + if (type == Resolution || type == Profile) { + int which = (p[i]->Fill(x, 0)) - 1; + //get which q[j] by filling p[i] with nothing. (TH1F::Fill returns the bin number) + //p[i]'s actual contents are set later. + if (which >= 0 && (unsigned)which < q.size()) + q[which]->Fill(y); } + if (type == OrgHistogram) + p[i]->Fill(x); + } + + if (xvar.BeginsWith("nHits")) { + x = xint2; + if (ymin <= y && y < ymax && xmin <= x && x < xmax) { + if (type == Histogram) + p[i]->Fill(y); + if (type == ScatterPlot) + p[i]->Fill(x, y); + if (type == Resolution || type == Profile) { + int which = (p[i]->Fill(x, 0)) - 1; + if (which >= 0) + q[which]->Fill(y); //get which q[j] by filling p[i] (with nothing), which returns the bin number + } + if (type == OrgHistogram) + p[i]->Fill(x); + } + } + + if (lengths[i] < 10 ? true + : (((j + 1) / (int)(pow(10, (int)(log10(lengths[i])) - 1))) * + (int)(pow(10, (int)(log10(lengths[i])) - 1)) == + j + 1 || + j + 1 == lengths[i])) + //print when j+1 is a multiple of 10^x, where 10^x has 1 less digit than lengths[i] + // and when it's finished + //For example, if lengths[i] = 123456, it will print this when j+1 = 10000, 20000, ..., 120000, 123456 + //So it will print between 10 and 100 times: 10 when lengths[i] = 10^x and 100 when lengths[i] = 10^x - 1 + { + cout << j + 1 << "/" << lengths[i] << ": "; + if (type == Profile || type == ScatterPlot || type == Resolution) + cout << x << ", " << y << endl; + if (type == OrgHistogram) + cout << x << endl; + if (type == Histogram) + cout << y << endl; + } + } + lengths[i] -= notincluded; + + if (maxpt1 < 6) { //0T + used[i] = false; + p[i]->SetLineColor(kWhite); + p[i]->SetMarkerColor(kWhite); + for (unsigned int j = 0; j < q.size(); j++) + delete q[j]; + continue; + } - p[i]->SetLineColor(colors[i]); - if (type == Resolution || type == Profile) - { - p[i]->SetMarkerStyle(styles[i] / 100); - p[i]->SetMarkerColor(colors[i]); - p[i]->SetLineStyle(styles[i] % 100); - } + meansrmss[i] = ""; + if (type == Histogram || type == OrgHistogram) { + stringstream meanrms; + meanrms.precision(3); + + double average = -1e99; + double rms = -1e99; + + TString var = (type == Histogram ? yvar : xvar); + char axis = (type == Histogram ? 'y' : 'x'); + TString varunits = ""; + if (!relative && !pull) + varunits = units(var, axis); + if (legendOptions.Contains("mean")) { + if (outliercut < 0) + average = p[i]->GetMean(); else - { - if (styles[i] >= 100) - { - p[i]->SetMarkerStyle(styles[i] / 100); - p[i]->SetMarkerColor(colors[i]); - p[i]->Sumw2(); - } - p[i]->SetLineStyle(styles[i] % 100); - } - - stufftodelete->Add(p[i]); - p[i]->SetBit(kCanDelete,true); - - used[i] = true; - if ((xvar == "runNumber" ? findMax(files[i],"runNumber",'x') < 2 : false) || files[i] == "") //if it's MC data (run 1), the run number is meaningless - { - used[i] = false; - p[i]->SetLineColor(kWhite); - p[i]->SetMarkerColor(kWhite); - for (unsigned int j = 0; j < q.size(); j++) - delete q[j]; - continue; - } - - TFile *f = TFile::Open(files[i]); - TTree *tree = (TTree*)f->Get("cosmicValidation/splitterTree"); - if (tree == 0) - tree = (TTree*)f->Get("splitterTree"); - - lengths[i] = tree->GetEntries(); + average = findAverage(files[i], var, axis, relative, pull); + cout << "Average = " << average; + meanrms << "#mu = " << average; + means[i] = average; + if (legendOptions.Contains("meanerror")) { + if (outliercut < 0) + rms = p[i]->GetRMS(); + else + rms = findRMS(files[i], var, axis, relative, pull); + meanrms << " #pm " << rms / TMath::Sqrt(lengths[i] * abs(outliercut)); + cout << " +/- " << rms / TMath::Sqrt(lengths[i] * abs(outliercut)); + } + if (varunits != "") { + meanrms << " " << varunits; + cout << " " << varunits; + } + cout << endl; + if (legendOptions.Contains("rms")) + meanrms << ", "; + } + if (legendOptions.Contains("rms")) { + if (rms < -1e98) { + if (outliercut < 0) + rms = p[i]->GetRMS(); + else + rms = findRMS(files[i], var, axis, relative, pull); + } + cout << "RMS = " << rms; + meanrms << "rms = " << rms; + rmss[i] = rms; + if (legendOptions.Contains("rmserror")) { + //https://root.cern.ch/root/html/src/TH1.cxx.html#7076 + meanrms << " #pm " << rms / TMath::Sqrt(2 * lengths[i] * abs(outliercut)); + cout << " +/- " << rms / TMath::Sqrt(2 * lengths[i] * abs(outliercut)); + } + if (varunits != "") { + meanrms << " " << varunits; + cout << " " << varunits; + } + cout << endl; + } + meansrmss[i] = meanrms.str(); + } - Double_t x = 0, y = 0, rel = 1, sigma1 = 1, sigma2 = 1, //if !pull, we want to divide by sqrt(2) because we want the error from 1 track - sigmaorg = 0; - Int_t xint = 0, xint2 = 0; - Int_t runNumber = 0; - double pt1 = 0, maxpt1 = 0; + if (type == Resolution) { + for (Int_t j = 0; j < xbins; j++) { + p[i]->SetBinContent(j + 1, q[j]->GetRMS()); + p[i]->SetBinError(j + 1, q[j]->GetRMSError()); + delete q[j]; + } + } - if (!relative && !pull && (yvar == "dz" || yvar == "dxy")) - rel = 1e-4; //it's in cm but we want it in um, so divide by 1e-4 - if (!relative && !pull && (yvar == "phi" || yvar == "theta" || yvar == "qoverpt")) - rel = 1e-3; //make the axis labels manageable + if (type == Profile) { + for (Int_t j = 0; j < xbins; j++) { + p[i]->SetBinContent(j + 1, q[j]->GetMean()); + p[i]->SetBinError(j + 1, q[j]->GetMeanError()); + delete q[j]; + } + } - tree->SetBranchAddress("runNumber",&runNumber); - if (type == Profile || type == ScatterPlot || type == Resolution || type == OrgHistogram) - { - if (xvar == "runNumber") - tree->SetBranchAddress(xvariable,&xint); - else if (xvar.BeginsWith("nHits")) - { - tree->SetBranchAddress(xvariable,&xint); - tree->SetBranchAddress(xvariable2,&xint2); - } - else - tree->SetBranchAddress(xvariable,&x); - } - if (type == Profile || type == ScatterPlot || type == Resolution || type == Histogram) - { - int branchexists = tree->SetBranchAddress(yvariable,&y); - if (branchexists == -5) //i.e. it doesn't exist - { - yvariable.ReplaceAll("Delta_","d"); - yvariable.Append("_spl"); - tree->SetBranchAddress(yvariable,&y); - } - } - if (relative && xvar != yvar) //if xvar == yvar, setting the branch here will undo setting it to x 2 lines earlier - tree->SetBranchAddress(relvariable,&rel); //setting the value of rel is then taken care of later: rel = x - if (pull) - { - tree->SetBranchAddress(sigma1variable,&sigma1); - tree->SetBranchAddress(sigma2variable,&sigma2); - } - if (relative && pull) - tree->SetBranchAddress(sigmaorgvariable,&sigmaorg); - if (xvar == "pt" || yvar == "pt" || xvar == "qoverpt" || yvar == "qoverpt") { - tree->SetBranchAddress("pt1_spl", &pt1); + setAxisLabels(p[i], type, xvar, yvar, relative, pull); + } + + if (type == Histogram && !pull && any_of(begin(used), end(used), identity)) { + if (legendOptions.Contains("mean")) { + summaryfile << " mu_Delta" << yvar; + if (relative) + summaryfile << "/" << yvar; + if (pull) + summaryfile << "_pull"; + if (!pull && !relative && plainunits(yvar, 'y') != "") + summaryfile << " (" << plainunits(yvar, 'y') << ")"; + summaryfile << "\t" + << "latexname=$\\mu_{" << latexlabel(yvar, 'y', relative, resolution, pull) << "}$"; + if (!pull && !relative && plainunits(yvar, 'y') != "") + summaryfile << " (" << latexunits(yvar, 'y') << ")"; + summaryfile << "\t" + << "format={:.3g}\t" + << "latexformat=${:.3g}$"; + for (int i = 0; i < n; i++) { + if (used[i]) { + summaryfile << "\t" << means[i]; } else { - maxpt1 = 999; - } - - Int_t notincluded = 0; //this counts the number that aren't in the right run range. - //it's subtracted from lengths[i] in order to normalize the histograms - - for (Int_t j = 0; jGetEntry(j); - if (xvar == "runNumber" || xvar.BeginsWith("nHits")) - x = xint; - if (xvar == "runNumber") - runNumber = x; - if (yvar == "phi" && y >= pi) - y -= 2*pi; - if (yvar == "phi" && y <= -pi) - y += 2*pi; - if ((runNumber < minrun && runNumber > 1) || (runNumber > maxrun && maxrun > 0)) //minrun and maxrun are global variables. - { - notincluded++; - continue; - } - if (relative && xvar == yvar) - rel = x; - Double_t error = 0; - if (relative && pull) - error = sqrt((sigma1/rel)*(sigma1/rel) + (sigma2/rel)*(sigma2/rel) + (sigmaorg*y/(rel*rel))*(sigmaorg*x/(rel*rel))); - else - error = sqrt(sigma1 * sigma1 + sigma2 * sigma2); // = sqrt(2) if !pull; this divides by sqrt(2) to get the error in 1 track - y /= (rel * error); - - if (pt1 > maxpt1) maxpt1 = pt1; - - if (ymin <= y && y < ymax && xmin <= x && x < xmax) - { - if (type == Histogram) - p[i]->Fill(y); - if (type == ScatterPlot) - p[i]->Fill(x,y); - if (type == Resolution || type == Profile) - { - int which = (p[i]->Fill(x,0)) - 1; - //get which q[j] by filling p[i] with nothing. (TH1F::Fill returns the bin number) - //p[i]'s actual contents are set later. - if (which >= 0 && (unsigned)which < q.size()) q[which]->Fill(y); - } - if (type == OrgHistogram) - p[i]->Fill(x); - } - - if (xvar.BeginsWith("nHits")) - { - x = xint2; - if (ymin <= y && y < ymax && xmin <= x && x < xmax) - { - if (type == Histogram) - p[i]->Fill(y); - if (type == ScatterPlot) - p[i]->Fill(x,y); - if (type == Resolution || type == Profile) - { - int which = (p[i]->Fill(x,0)) - 1; - if (which >= 0) q[which]->Fill(y); //get which q[j] by filling p[i] (with nothing), which returns the bin number - } - if (type == OrgHistogram) - p[i]->Fill(x); - } - } - - if (lengths[i] < 10 ? true : - (((j+1)/(int)(pow(10,(int)(log10(lengths[i]))-1)))*(int)(pow(10,(int)(log10(lengths[i]))-1)) == j + 1 || j + 1 == lengths[i])) - //print when j+1 is a multiple of 10^x, where 10^x has 1 less digit than lengths[i] - // and when it's finished - //For example, if lengths[i] = 123456, it will print this when j+1 = 10000, 20000, ..., 120000, 123456 - //So it will print between 10 and 100 times: 10 when lengths[i] = 10^x and 100 when lengths[i] = 10^x - 1 - { - cout << j + 1 << "/" << lengths[i] << ": "; - if (type == Profile || type == ScatterPlot || type == Resolution) - cout << x << ", " << y << endl; - if (type == OrgHistogram) - cout << x << endl; - if (type == Histogram) - cout << y << endl; - } - } - lengths[i] -= notincluded; - - if (maxpt1 < 6) { //0T - used[i] = false; - p[i]->SetLineColor(kWhite); - p[i]->SetMarkerColor(kWhite); - for (unsigned int j = 0; j < q.size(); j++) - delete q[j]; - continue; - } - - meansrmss[i] = ""; - if (type == Histogram || type == OrgHistogram) - { - stringstream meanrms; - meanrms.precision(3); - - double average = -1e99; - double rms = -1e99; - - TString var = (type == Histogram ? yvar : xvar); - char axis = (type == Histogram ? 'y' : 'x'); - TString varunits = ""; - if (!relative && !pull) - varunits = units(var, axis); - if (legendOptions.Contains("mean")) - { - if (outliercut < 0) - average = p[i]->GetMean(); - else - average = findAverage(files[i], var, axis, relative, pull); - cout << "Average = " << average; - meanrms << "#mu = " << average; - means[i] = average; - if (legendOptions.Contains("meanerror")) - { - if (outliercut < 0) - rms = p[i]->GetRMS(); - else - rms = findRMS(files[i], var, axis, relative, pull); - meanrms << " #pm " << rms/TMath::Sqrt(lengths[i]*abs(outliercut)); - cout << " +/- " << rms/TMath::Sqrt(lengths[i]*abs(outliercut)); - } - if (varunits != "") - { - meanrms << " " << varunits; - cout << " " << varunits; - } - cout << endl; - if (legendOptions.Contains("rms")) - meanrms << ", "; - } - if (legendOptions.Contains("rms")) - { - if (rms<-1e98) - { - if (outliercut < 0) - rms = p[i]->GetRMS(); - else - rms = findRMS(files[i], var, axis, relative, pull); - } - cout << "RMS = " << rms; - meanrms << "rms = " << rms; - rmss[i] = rms; - if (legendOptions.Contains("rmserror")) - { - //https://root.cern.ch/root/html/src/TH1.cxx.html#7076 - meanrms << " #pm " << rms/TMath::Sqrt(2*lengths[i]*abs(outliercut)); - cout << " +/- " << rms/TMath::Sqrt(2*lengths[i]*abs(outliercut)); - } - if (varunits != "") - { - meanrms << " " << varunits; - cout << " " << varunits; - } - cout << endl; - } - meansrmss[i] = meanrms.str(); - } - - if (type == Resolution) - { - for (Int_t j = 0; j < xbins; j++) - { - p[i]->SetBinContent(j+1,q[j]->GetRMS()); - p[i]->SetBinError (j+1,q[j]->GetRMSError()); - delete q[j]; - } + summaryfile << "\t" << nan(""); } - - if (type == Profile) - { - for (Int_t j = 0; j < xbins; j++) - { - p[i]->SetBinContent(j+1,q[j]->GetMean()); - p[i]->SetBinError (j+1,q[j]->GetMeanError()); - delete q[j]; - } - } - - setAxisLabels(p[i],type,xvar,yvar,relative,pull); + } + summaryfile << "\n"; } - - if (type == Histogram && !pull && any_of(begin(used), end(used), identity)) { - if (legendOptions.Contains("mean")) { - summaryfile << " mu_Delta" << yvar; - if (relative) summaryfile << "/" << yvar; - if (pull) summaryfile << "_pull"; - if (!pull && !relative && plainunits(yvar, 'y') != "") summaryfile << " (" << plainunits(yvar, 'y') << ")"; - summaryfile << "\t" - << "latexname=$\\mu_{" << latexlabel(yvar, 'y', relative, resolution, pull) << "}$"; - if (!pull && !relative && plainunits(yvar, 'y') != "") summaryfile << " (" << latexunits(yvar, 'y') << ")"; - summaryfile << "\t" - << "format={:.3g}\t" - << "latexformat=${:.3g}$"; - for (int i = 0; i < n; i++) { - if (used[i]) { - summaryfile << "\t" << means[i]; - } else { - summaryfile << "\t" << nan(""); - } - } - summaryfile << "\n"; - } - if (legendOptions.Contains("rms")) { - summaryfile << "sigma_Delta" << yvar; - if (relative) summaryfile << "/" << yvar; - if (pull) summaryfile << "_pull"; - if (!pull && !relative && plainunits(yvar, 'y') != "") summaryfile << " (" << plainunits(yvar, 'y') << ")"; - summaryfile << "\t" - << "latexname=$\\sigma_{" << latexlabel(yvar, 'y', relative, resolution, pull) << "}$"; - if (!pull && !relative && latexunits(yvar, 'y') != "") summaryfile << " (" << latexunits(yvar, 'y') << ")"; - summaryfile << "\t" - << "format={:.3g}\t" - << "latexformat=${:.3g}$"; - for (int i = 0; i < n; i++) { - if (used[i]) { - summaryfile << "\t" << rmss[i]; - } else { - summaryfile << "\t" << nan(""); - } - } - summaryfile << "\n"; + if (legendOptions.Contains("rms")) { + summaryfile << "sigma_Delta" << yvar; + if (relative) + summaryfile << "/" << yvar; + if (pull) + summaryfile << "_pull"; + if (!pull && !relative && plainunits(yvar, 'y') != "") + summaryfile << " (" << plainunits(yvar, 'y') << ")"; + summaryfile << "\t" + << "latexname=$\\sigma_{" << latexlabel(yvar, 'y', relative, resolution, pull) << "}$"; + if (!pull && !relative && latexunits(yvar, 'y') != "") + summaryfile << " (" << latexunits(yvar, 'y') << ")"; + summaryfile << "\t" + << "format={:.3g}\t" + << "latexformat=${:.3g}$"; + for (int i = 0; i < n; i++) { + if (used[i]) { + summaryfile << "\t" << rmss[i]; + } else { + summaryfile << "\t" << nan(""); } + } + summaryfile << "\n"; } + } - TH1 *firstp = 0; - for (int i = 0; i < n; i++) - { - if (used[i]) - { - firstp = p[i]; - break; - } + TH1 *firstp = nullptr; + for (int i = 0; i < n; i++) { + if (used[i]) { + firstp = p[i]; + break; } - if (firstp == 0) - { - stufftodelete->Clear(); - return 0; + } + if (firstp == nullptr) { + stufftodelete->Clear(); + return nullptr; + } + + TCanvas *c1 = TCanvas::MakeDefCanvas(); + + TH1 *maxp = firstp; + if (type == ScatterPlot) + firstp->Draw("COLZ"); + else if (type == Resolution || type == Profile) { + vector g; + TMultiGraph *list = new TMultiGraph(); + for (Int_t i = 0, ii = 0; i < n; i++, ii++) { + if (!used[i]) { + ii--; + continue; + } + g.push_back(new TGraphErrors(p[i])); + for (Int_t j = 0; j < g[ii]->GetN(); j++) { + if (g[ii]->GetY()[j] == 0 && g[ii]->GetEY()[j] == 0) { + g[ii]->RemovePoint(j); + j--; + } + } + list->Add(g[ii]); } - - TCanvas *c1 = TCanvas::MakeDefCanvas(); - - TH1 *maxp = firstp; - if (type == ScatterPlot) - firstp->Draw("COLZ"); - else if (type == Resolution || type == Profile) - { - vector g; - TMultiGraph *list = new TMultiGraph(); - for (Int_t i = 0, ii = 0; i < n; i++, ii++) - { - if (!used[i]) - { - ii--; - continue; - } - g.push_back(new TGraphErrors(p[i])); - for (Int_t j = 0; j < g[ii]->GetN(); j++) - { - if (g[ii]->GetY()[j] == 0 && g[ii]->GetEY()[j] == 0) - { - g[ii]->RemovePoint(j); - j--; - } - } - list->Add(g[ii]); - } - list->Draw("AP"); - Double_t yaxismax = list->GetYaxis()->GetXmax(); - Double_t yaxismin = list->GetYaxis()->GetXmin(); - delete list; //automatically deletes g[i] - if (yaxismin > 0) - { - yaxismax += yaxismin; - yaxismin = 0; - } - firstp->GetYaxis()->SetRangeUser(yaxismin,yaxismax); - if (xvar == "runNumber") - firstp->GetXaxis()->SetNdivisions(505); + list->Draw("AP"); + Double_t yaxismax = list->GetYaxis()->GetXmax(); + Double_t yaxismin = list->GetYaxis()->GetXmin(); + delete list; //automatically deletes g[i] + if (yaxismin > 0) { + yaxismax += yaxismin; + yaxismin = 0; } - else if (type == Histogram || type == OrgHistogram) - { - Bool_t allthesame = true; - for (Int_t i = 1; i < n && allthesame; i++) - { - if (lengths[i] != lengths[0]) - allthesame = false; - } - if (!allthesame && xvar != "runNumber") - for (Int_t i = 0; i < n; i++) - { - p[i]->Scale(1.0/lengths[i]); //This does NOT include events that are out of the run number range (minrun and maxrun). - //It DOES include events that are out of the histogram range. - } - maxp = (TH1F*)firstp->Clone("maxp"); - stufftodelete->Add(maxp); - maxp->SetBit(kCanDelete,true); - maxp->SetLineColor(kWhite); - for (Int_t i = 1; i <= maxp->GetNbinsX(); i++) - { - for (Int_t j = 0; j < n; j++) - { - if (!used[j]) - continue; - maxp->SetBinContent(i,TMath::Max(maxp->GetBinContent(i),p[j]->GetBinContent(i))); - } - } - maxp->SetMarkerStyle(0); - maxp->SetMinimum(0); - maxp->Draw(""); - if (xvar == "runNumber") - { - maxp->GetXaxis()->SetNdivisions(505); - maxp->Draw(""); - } + firstp->GetYaxis()->SetRangeUser(yaxismin, yaxismax); + if (xvar == "runNumber") + firstp->GetXaxis()->SetNdivisions(505); + } else if (type == Histogram || type == OrgHistogram) { + Bool_t allthesame = true; + for (Int_t i = 1; i < n && allthesame; i++) { + if (lengths[i] != lengths[0]) + allthesame = false; } - - int nEntries = 0; - for (int i = 0; i < n; i++) - if (used[i]) - nEntries++; - double width = 0.5; - if (type == Histogram || type == OrgHistogram) - width *= 2; - TLegend *legend = TkAlStyle::legend(nEntries, width); - legend->SetTextSize(0); - if (type == Histogram || type == OrgHistogram) - legend->SetNColumns(2); - stufftodelete->Add(legend); - legend->SetBit(kCanDelete,true); - - for (Int_t i = 0; i < n; i++) - { - if (!used[i]) - continue; - if (type == Resolution || type == Profile) - { - if (p[i] == firstp) - p[i]->Draw("P"); - else - p[i]->Draw("same P"); - legend->AddEntry(p[i],names[i],"pl"); - } - else if (type == Histogram || type == OrgHistogram) - { - if (styles[i] >= 100) - { - p[i]->Draw("same P0E"); - legend->AddEntry(p[i],names[i],"pl"); - } - else - { - p[i]->Draw("same hist"); - legend->AddEntry(p[i],names[i],"l"); - } - legend->AddEntry((TObject*)0,meansrmss[i],""); - } + if (!allthesame && xvar != "runNumber") + for (Int_t i = 0; i < n; i++) { + //This does NOT include events that are out of the run number range (minrun and maxrun). + //It DOES include events that are out of the histogram range. + p[i]->Scale(1.0 / lengths[i]); + } + maxp = (TH1F *)firstp->Clone("maxp"); + stufftodelete->Add(maxp); + maxp->SetBit(kCanDelete, true); + maxp->SetLineColor(kWhite); + for (Int_t i = 1; i <= maxp->GetNbinsX(); i++) { + for (Int_t j = 0; j < n; j++) { + if (!used[j]) + continue; + maxp->SetBinContent(i, TMath::Max(maxp->GetBinContent(i), p[j]->GetBinContent(i))); + } } - if (legend->GetListOfPrimitives()->At(0) == 0) - { - stufftodelete->Clear(); - deleteCanvas(c1); - return 0; + maxp->SetMarkerStyle(0); + maxp->SetMinimum(0); + maxp->Draw(""); + if (xvar == "runNumber") { + maxp->GetXaxis()->SetNdivisions(505); + maxp->Draw(""); } - - c1->Update(); - legend->Draw(); - - double legendfraction = legend->GetY2() - legend->GetY1(); //apparently GetY1 and GetY2 give NDC coordinates. This is not a mistake on my part - double padheight = gPad->GetUymax() - gPad->GetUymin(); - //legendfraction = legendheight / padheight = newlegendheight / newpadheight - //newpadheight = padheight + x - //newlegendheight = newpadheight - padheight = x so it doesn't cover anything - //==>legendfraction = x/(padheight+x) - /* ==> */ double x = padheight*legendfraction / (1-legendfraction) * 1.5; //1.5 to give extra room - maxp->GetYaxis()->SetRangeUser(gPad->GetUymin(), gPad->GetUymax() + x); - - TkAlStyle::drawStandardTitle(); - - c1->Update(); - - if (saveas != "") - saveplot(c1,saveas); - - return c1; + } + + int nEntries = 0; + for (int i = 0; i < n; i++) + if (used[i]) + nEntries++; + double width = 0.5; + if (type == Histogram || type == OrgHistogram) + width *= 2; + TLegend *legend = TkAlStyle::legend(nEntries, width); + legend->SetTextSize(0); + if (type == Histogram || type == OrgHistogram) + legend->SetNColumns(2); + stufftodelete->Add(legend); + legend->SetBit(kCanDelete, true); + + for (Int_t i = 0; i < n; i++) { + if (!used[i]) + continue; + if (type == Resolution || type == Profile) { + if (p[i] == firstp) + p[i]->Draw("P"); + else + p[i]->Draw("same P"); + legend->AddEntry(p[i], names[i], "pl"); + } else if (type == Histogram || type == OrgHistogram) { + if (styles[i] >= 100) { + p[i]->Draw("same P0E"); + legend->AddEntry(p[i], names[i], "pl"); + } else { + p[i]->Draw("same hist"); + legend->AddEntry(p[i], names[i], "l"); + } + legend->AddEntry((TObject *)nullptr, meansrmss[i], ""); + } + } + if (legend->GetListOfPrimitives()->At(0) == nullptr) { + stufftodelete->Clear(); + deleteCanvas(c1); + return nullptr; + } + + c1->Update(); + legend->Draw(); + + double legendfraction = + legend->GetY2() - + legend->GetY1(); //apparently GetY1 and GetY2 give NDC coordinates. This is not a mistake on my part + double padheight = gPad->GetUymax() - gPad->GetUymin(); + //legendfraction = legendheight / padheight = newlegendheight / newpadheight + //newpadheight = padheight + x + //newlegendheight = newpadheight - padheight = x so it doesn't cover anything + //==>legendfraction = x/(padheight+x) + /* ==> */ double x = padheight * legendfraction / (1 - legendfraction) * 1.5; //1.5 to give extra room + maxp->GetYaxis()->SetRangeUser(gPad->GetUymin(), gPad->GetUymax() + x); + + TkAlStyle::drawStandardTitle(); + + c1->Update(); + + if (saveas != "") + saveplot(c1, saveas); + + return c1; } - //make a 1D histogram of Delta_yvar -TCanvas *trackSplitPlot(Int_t nFiles,TString *files,TString *names,TString var, - Bool_t relative,Bool_t pull,TString saveas, ostream& summaryfile) -{ - return trackSplitPlot(nFiles,files,names,"",var,relative,false,pull,saveas,summaryfile); +TCanvas *trackSplitPlot(Int_t nFiles, + TString *files, + TString *names, + TString var, + Bool_t relative, + Bool_t pull, + TString saveas, + ostream &summaryfile) { + return trackSplitPlot(nFiles, files, names, "", var, relative, false, pull, saveas, summaryfile); } - - //For 1 file -TCanvas *trackSplitPlot(TString file,TString xvar,TString yvar,Bool_t profile, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas, ostream& summaryfile) -{ - Int_t nFiles = 0; - if (profile) //it interprets nFiles < 1 as 1 file, make a scatterplot - nFiles = 1; - TString *files = &file; - TString name = ""; - TString *names = &name; - return trackSplitPlot(nFiles,files,names,xvar,yvar,relative,resolution,pull,saveas,summaryfile); +TCanvas *trackSplitPlot(TString file, + TString xvar, + TString yvar, + Bool_t profile, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas, + ostream &summaryfile) { + Int_t nFiles = 0; + if (profile) //it interprets nFiles < 1 as 1 file, make a scatterplot + nFiles = 1; + TString *files = &file; + TString name = ""; + TString *names = &name; + return trackSplitPlot(nFiles, files, names, xvar, yvar, relative, resolution, pull, saveas, summaryfile); } //make a 1D histogram of Delta_yvar -TCanvas *trackSplitPlot(TString file,TString var, - Bool_t relative,Bool_t pull, - TString saveas, ostream& summaryfile) -{ - Int_t nFiles = 1; - TString *files = &file; - TString name = ""; - TString *names = &name; - return trackSplitPlot(nFiles,files,names,var,relative,pull,saveas,summaryfile); +TCanvas *trackSplitPlot(TString file, TString var, Bool_t relative, Bool_t pull, TString saveas, ostream &summaryfile) { + Int_t nFiles = 1; + TString *files = &file; + TString name = ""; + TString *names = &name; + return trackSplitPlot(nFiles, files, names, var, relative, pull, saveas, summaryfile); } -void saveplot(TCanvas *c1,TString saveas) -{ - if (saveas == "") - return; - TString saveas2 = saveas, - saveas3 = saveas; - saveas2.ReplaceAll(".pngepsroot",""); - saveas3.Remove(saveas3.Length()-11); - if (saveas2 == saveas3) - { - c1->SaveAs(saveas.ReplaceAll(".pngepsroot",".png")); - c1->SaveAs(saveas.ReplaceAll(".png",".eps")); - c1->SaveAs(saveas.ReplaceAll(".eps",".root")); - c1->SaveAs(saveas.ReplaceAll(".root",".pdf")); - } - else - { - c1->SaveAs(saveas); - } +void saveplot(TCanvas *c1, TString saveas) { + if (saveas == "") + return; + TString saveas2 = saveas, saveas3 = saveas; + saveas2.ReplaceAll(".pngepsroot", ""); + saveas3.Remove(saveas3.Length() - 11); + if (saveas2 == saveas3) { + c1->SaveAs(saveas.ReplaceAll(".pngepsroot", ".png")); + c1->SaveAs(saveas.ReplaceAll(".png", ".eps")); + c1->SaveAs(saveas.ReplaceAll(".eps", ".root")); + c1->SaveAs(saveas.ReplaceAll(".root", ".pdf")); + } else { + c1->SaveAs(saveas); + } } -void deleteCanvas(TObject *canvas) -{ - if (canvas == 0) return; - if (!canvas->InheritsFrom("TCanvas")) - { - delete canvas; - return; - } - TCanvas *c1 = (TCanvas*)canvas; - TList *list = c1->GetListOfPrimitives(); - list->SetOwner(true); - list->Clear(); - delete c1; +void deleteCanvas(TObject *canvas) { + if (canvas == nullptr) + return; + if (!canvas->InheritsFrom("TCanvas")) { + delete canvas; + return; + } + TCanvas *c1 = (TCanvas *)canvas; + delete c1; } -void setupcolors() -{ - if (colorsset) return; - colorsset = true; - colors.clear(); - styles.clear(); - Color_t array[15] = {1,2,3,4,6,7,8,9, - kYellow+3,kOrange+10,kPink-2,kTeal+9,kAzure-8,kViolet-6,kSpring-1}; - for (int i = 0; i < 15; i++) - { - colors.push_back(array[i]); - styles.push_back(1); //Set the default to 1 - //This is to be consistent with the other validation - } +void setupcolors() { + if (colorsset) + return; + colorsset = true; + colors.clear(); + styles.clear(); + Color_t array[15] = { + 1, 2, 3, 4, 6, 7, 8, 9, kYellow + 3, kOrange + 10, kPink - 2, kTeal + 9, kAzure - 8, kViolet - 6, kSpring - 1}; + for (int i = 0; i < 15; i++) { + colors.push_back(array[i]); + styles.push_back(1); //Set the default to 1 + //This is to be consistent with the other validation + } } //This makes a plot, of Delta_yvar vs. runNumber, zoomed in to between firstrun and lastrun. @@ -699,17 +670,23 @@ void setupcolors() //There might be bins with very few events => big error bars, //or just 1 event => no error bar -void runNumberZoomed(Int_t nFiles,TString *files,TString *names,TString yvar, - Bool_t relative,Bool_t resolution,Bool_t pull, - Int_t firstRun,Int_t lastRun,TString saveas) -{ - Int_t tempminrun = minrun; - Int_t tempmaxrun = maxrun; - minrun = firstRun; - maxrun = lastRun; - trackSplitPlot(nFiles,files,names,"runNumber",yvar,relative,resolution,pull,saveas); - minrun = tempminrun; - maxrun = tempmaxrun; +void runNumberZoomed(Int_t nFiles, + TString *files, + TString *names, + TString yvar, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + Int_t firstRun, + Int_t lastRun, + TString saveas) { + Int_t tempminrun = minrun; + Int_t tempmaxrun = maxrun; + minrun = firstRun; + maxrun = lastRun; + trackSplitPlot(nFiles, files, names, "runNumber", yvar, relative, resolution, pull, saveas); + minrun = tempminrun; + maxrun = tempmaxrun; } //========================== @@ -734,379 +711,526 @@ void runNumberZoomed(Int_t nFiles,TString *files,TString *names,TString yvar, //The best way to run misalignmentDependence is through makePlots. If you want to run misalignmentDependence directly, //the LAST function, all the way at the bottom of this file, is probably the most practical to use (for all three of these). - // The first function takes a canvas as its argument. This canvas needs to have been produced with trackSplitPlot using // the same values of xvar, yvar, relative, resolution, and pull or something strange could happen. void misalignmentDependence(TCanvas *c1old, - Int_t nFiles,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TF1 *function,Int_t parameter,TString parametername,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - if (c1old == 0) return; - c1old = (TCanvas*)c1old->Clone("c1old"); - if (misalignment == "" || yvar == "") return; - Bool_t drawfits = (parameter < 0); - if (parameter < 0) - parameter = -parameter - 1; //-1 --> 0, -2 --> 1, -3 --> 2, ... - TString yaxislabel = nPart(1,parametername); - TString parameterunits = nPart(2,parametername); - if (parameterunits != "") - yaxislabel.Append(" (").Append(parameterunits).Append(")"); - TList *list = c1old->GetListOfPrimitives(); - //const int n = list->GetEntries() - 2 - (xvar == ""); - const int n = nFiles; - - gStyle->SetOptStat(0); - gStyle->SetOptFit(0); - gStyle->SetFitFormat("5.4g"); - gStyle->SetFuncColor(2); - gStyle->SetFuncStyle(1); - gStyle->SetFuncWidth(1); - - TH1 **p = new TH1*[n]; - TF1 **f = new TF1*[n]; - bool used[n]; - for (Int_t i = 0; i < n; i++) - { - stringstream s0; - s0 << "p" << i; - TString pname = s0.str(); - p[i] = (TH1*)list->/*At(i+1+(xvar == ""))*/FindObject(pname); - used[i] = (p[i] != 0); - if (used[i]) - p[i]->SetDirectory(0); - if (xvar == "") - continue; - stringstream s; - s << function->GetName() << i; - TString newname = s.str(); - f[i] = (TF1*)function->Clone(newname); - stufftodelete->Add(f[i]); - } - - Double_t *result = new Double_t[nFiles]; - Double_t *error = new Double_t[nFiles]; + Int_t nFiles, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TF1 *function, + Int_t parameter, + TString parametername, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + if (c1old == nullptr) + return; + c1old = (TCanvas *)c1old->Clone("c1old"); + if (misalignment == "" || yvar == "") + return; + Bool_t drawfits = (parameter < 0); + if (parameter < 0) + parameter = -parameter - 1; //-1 --> 0, -2 --> 1, -3 --> 2, ... + TString yaxislabel = nPart(1, parametername); + TString parameterunits = nPart(2, parametername); + if (parameterunits != "") + yaxislabel.Append(" (").Append(parameterunits).Append(")"); + TList *list = c1old->GetListOfPrimitives(); + //const int n = list->GetEntries() - 2 - (xvar == ""); + const int n = nFiles; + + gStyle->SetOptStat(0); + gStyle->SetOptFit(0); + gStyle->SetFitFormat("5.4g"); + gStyle->SetFuncColor(2); + gStyle->SetFuncStyle(1); + gStyle->SetFuncWidth(1); + + TH1 **p = new TH1 *[n]; + TF1 **f = new TF1 *[n]; + bool used[n]; + for (Int_t i = 0; i < n; i++) { + stringstream s0; + s0 << "p" << i; + TString pname = s0.str(); + p[i] = (TH1 *)list->/*At(i+1+(xvar == ""))*/ FindObject(pname); + used[i] = (p[i] != nullptr); + if (used[i]) + p[i]->SetDirectory(nullptr); if (xvar == "") - { - yaxislabel = axislabel(yvar,'y',relative,resolution,pull); - for (Int_t i = 0; i < nFiles; i++) - { - if (!used[i]) continue; - if (!resolution) - { - result[i] = p[i]->GetMean(); - error[i] = p[i]->GetMeanError(); - } - else - { - result[i] = p[i]->GetRMS(); - error[i] = p[i]->GetRMSError(); - } - cout << result[i] << " +/- " << error[i] << endl; - } + continue; + stringstream s; + s << function->GetName() << i; + TString newname = s.str(); + f[i] = (TF1 *)function->Clone(newname); + stufftodelete->Add(f[i]); + } + + Double_t *result = new Double_t[nFiles]; + Double_t *error = new Double_t[nFiles]; + if (xvar == "") { + yaxislabel = axislabel(yvar, 'y', relative, resolution, pull); + for (Int_t i = 0; i < nFiles; i++) { + if (!used[i]) + continue; + if (!resolution) { + result[i] = p[i]->GetMean(); + error[i] = p[i]->GetMeanError(); + } else { + result[i] = p[i]->GetRMS(); + error[i] = p[i]->GetRMSError(); + } + cout << result[i] << " +/- " << error[i] << endl; } - else - { - for (int i = 0; i < n; i++) - { - if (!used[i]) continue; - f[i]->SetLineColor(colors[i]); - f[i]->SetLineStyle(styles[i]); - f[i]->SetLineWidth(1); - p[i]->SetMarkerColor(colors[i]); - p[i]->SetMarkerStyle(20+i); - p[i]->SetLineColor(colors[i]); - p[i]->SetLineStyle(styles[i]); - p[i]->Fit(f[i],"IM"); - error[i] = f[i]->GetParError (parameter); - //the fits sometimes don't work if the parameters are constrained. - //take care of the constraining here. - //for sine, make the amplitude positive and the phase between 0 and 2pi. - //unless the amplitude is the only parameter (eg sagitta theta theta) - if (function->GetName() == TString("sine") && function->GetNumberFreeParameters() >= 2) - { - if (f[i]->GetParameter(0) < 0) - { - f[i]->SetParameter(0,-f[i]->GetParameter(0)); - f[i]->SetParameter(2,f[i]->GetParameter(2)+pi); - } - while(f[i]->GetParameter(2) >= 2*pi) - f[i]->SetParameter(2,f[i]->GetParameter(2)-2*pi); - while(f[i]->GetParameter(2) < 0) - f[i]->SetParameter(2,f[i]->GetParameter(2)+2*pi); - } - result[i] = f[i]->GetParameter(parameter); - } + } else { + for (int i = 0; i < n; i++) { + if (!used[i]) + continue; + f[i]->SetLineColor(colors[i]); + f[i]->SetLineStyle(styles[i]); + f[i]->SetLineWidth(1); + p[i]->SetMarkerColor(colors[i]); + p[i]->SetMarkerStyle(20 + i); + p[i]->SetLineColor(colors[i]); + p[i]->SetLineStyle(styles[i]); + p[i]->Fit(f[i], "IM"); + error[i] = f[i]->GetParError(parameter); + //the fits sometimes don't work if the parameters are constrained. + //take care of the constraining here. + //for sine, make the amplitude positive and the phase between 0 and 2pi. + //unless the amplitude is the only parameter (eg sagitta theta theta) + if (function->GetName() == TString("sine") && function->GetNumberFreeParameters() >= 2) { + if (f[i]->GetParameter(0) < 0) { + f[i]->SetParameter(0, -f[i]->GetParameter(0)); + f[i]->SetParameter(2, f[i]->GetParameter(2) + pi); + } + while (f[i]->GetParameter(2) >= 2 * pi) + f[i]->SetParameter(2, f[i]->GetParameter(2) - 2 * pi); + while (f[i]->GetParameter(2) < 0) + f[i]->SetParameter(2, f[i]->GetParameter(2) + 2 * pi); + } + result[i] = f[i]->GetParameter(parameter); } + } + TCanvas *c1 = TCanvas::MakeDefCanvas(); - TCanvas *c1 = TCanvas::MakeDefCanvas(); - - if (drawfits && xvar != "" && yvar != "") - { - TString legendtitle = "["; - legendtitle.Append(functionname); - legendtitle.Append("]"); - TLegend *legend = new TLegend(.7,.7,.9,.9,legendtitle,"br"); - stufftodelete->Add(legend); - TString drawoption = ""; - for (int i = 0; i < n; i++) - { - if (!used[i]) continue; - p[i]->Draw(drawoption); - f[i]->Draw("same"); - drawoption = "same"; - - stringstream s; - s.precision(3); - s << nPart(1,parametername) << " = " << result[i] << " #pm " << error[i]; - if (parameterunits != "") s << " " << parameterunits; - TString str = s.str(); - legend->AddEntry(p[i],names[i],"pl"); - legend->AddEntry(f[i],str,"l"); - } - c1->Update(); - Double_t x1min = .98*gPad->GetUxmin() + .02*gPad->GetUxmax(); - Double_t x2max = .02*gPad->GetUxmin() + .98*gPad->GetUxmax(); - Double_t y1min = .98*gPad->GetUymin() + .02*gPad->GetUymax(); - Double_t y2max = .02*gPad->GetUymin() + .98*gPad->GetUymax(); - Double_t width = .4*(x2max-x1min); - Double_t height = (1./20)*legend->GetListOfPrimitives()->GetEntries()*(y2max-y1min); - width *= 2; - height /= 2; - legend->SetNColumns(2); - - Double_t newy2max = placeLegend(legend,width,height,x1min,y1min,x2max,y2max); - p[0]->GetYaxis()->SetRangeUser(gPad->GetUymin(),(newy2max-.02*gPad->GetUymin())/.98); - - legend->SetFillStyle(0); - legend->Draw(); + if (drawfits && xvar != "" && yvar != "") { + TString legendtitle = "["; + legendtitle.Append(functionname); + legendtitle.Append("]"); + TLegend *legend = new TLegend(.7, .7, .9, .9, legendtitle, "br"); + stufftodelete->Add(legend); + TString drawoption = ""; + for (int i = 0; i < n; i++) { + if (!used[i]) + continue; + p[i]->Draw(drawoption); + f[i]->Draw("same"); + drawoption = "same"; + + stringstream s; + s.precision(3); + s << nPart(1, parametername) << " = " << result[i] << " #pm " << error[i]; + if (parameterunits != "") + s << " " << parameterunits; + TString str = s.str(); + legend->AddEntry(p[i], names[i], "pl"); + legend->AddEntry(f[i], str, "l"); } - else - { - if (values == 0) return; - - Bool_t phasesmatter = false; - if (misalignment == "elliptical" || misalignment == "sagitta" || misalignment == "skew") - { - if (phases == 0) - { - cout << "This misalignment has a phase, but you didn't supply the phases!" << endl - << "Can't produce plots depending on the misalignment value." << endl; - return; - } - int firstnonzero = -1; - for (Int_t i = 0; i < nFiles; i++) - { - if (values[i] == 0) continue; //if the amplitude is 0 the phase is arbitrary - if (firstnonzero == -1) firstnonzero = i; - if (phases[i] != phases[firstnonzero]) - phasesmatter = true; - } - } - - if (!phasesmatter) - { - TGraphErrors *g = new TGraphErrors(nFiles,values,result,(Double_t*)0,error); - g->SetName(""); - stufftodelete->Add(g); - - TString xaxislabel = "#epsilon_{"; - xaxislabel.Append(misalignment); - xaxislabel.Append("}"); - g->GetXaxis()->SetTitle(xaxislabel); - if (xvar != "") - { - yaxislabel.Append(" ["); - yaxislabel.Append(functionname); - yaxislabel.Append("]"); - } - g->GetYaxis()->SetTitle(yaxislabel); - - g->SetMarkerColor(colors[0]); - g->SetMarkerStyle(20); - - g->Draw("AP"); - Double_t yaxismax = g->GetYaxis()->GetXmax(); - Double_t yaxismin = g->GetYaxis()->GetXmin(); - if (yaxismin > 0) - { - yaxismax += yaxismin; - yaxismin = 0; - } - g->GetYaxis()->SetRangeUser(yaxismin,yaxismax); - g->Draw("AP"); - } - else - { - double *xvalues = new double[nFiles]; - double *yvalues = new double[nFiles]; //these are not physically x and y (except in the case of skew) - for (int i = 0; i < nFiles; i++) - { - xvalues[i] = values[i] * cos(phases[i]); - yvalues[i] = values[i] * sin(phases[i]); - } - TGraph2DErrors *g = new TGraph2DErrors(nFiles,xvalues,yvalues,result,(Double_t*)0,(Double_t*)0,error); - g->SetName(""); - stufftodelete->Add(g); - delete[] xvalues; //A TGraph2DErrors has its own copy of xvalues and yvalues, so it's ok to delete these copies. - delete[] yvalues; - - TString xaxislabel = "#epsilon_{"; - xaxislabel.Append(misalignment); - xaxislabel.Append("}cos(#delta)"); - TString realyaxislabel = xaxislabel; - realyaxislabel.ReplaceAll("cos(#delta)","sin(#delta)"); - g->GetXaxis()->SetTitle(xaxislabel); - g->GetYaxis()->SetTitle(realyaxislabel); - TString zaxislabel = /*"fake"*/yaxislabel; //yaxislabel is defined earlier - if (xvar != "") - { - zaxislabel.Append(" ["); - zaxislabel.Append(functionname); - zaxislabel.Append("]"); - } - g->GetZaxis()->SetTitle(zaxislabel); - g->SetMarkerStyle(20); - g->Draw("pcolerr"); - } + c1->Update(); + Double_t x1min = .98 * gPad->GetUxmin() + .02 * gPad->GetUxmax(); + Double_t x2max = .02 * gPad->GetUxmin() + .98 * gPad->GetUxmax(); + Double_t y1min = .98 * gPad->GetUymin() + .02 * gPad->GetUymax(); + Double_t y2max = .02 * gPad->GetUymin() + .98 * gPad->GetUymax(); + Double_t width = .4 * (x2max - x1min); + Double_t height = (1. / 20) * legend->GetListOfPrimitives()->GetEntries() * (y2max - y1min); + width *= 2; + height /= 2; + legend->SetNColumns(2); + + Double_t newy2max = placeLegend(legend, width, height, x1min, y1min, x2max, y2max); + p[0]->GetYaxis()->SetRangeUser(gPad->GetUymin(), (newy2max - .02 * gPad->GetUymin()) / .98); + + legend->SetFillStyle(0); + legend->Draw(); + } else { + if (values == nullptr) + return; + + Bool_t phasesmatter = false; + if (misalignment == "elliptical" || misalignment == "sagitta" || misalignment == "skew") { + if (phases == nullptr) { + cout << "This misalignment has a phase, but you didn't supply the phases!" << endl + << "Can't produce plots depending on the misalignment value." << endl; + return; + } + int firstnonzero = -1; + for (Int_t i = 0; i < nFiles; i++) { + if (values[i] == 0) + continue; //if the amplitude is 0 the phase is arbitrary + if (firstnonzero == -1) + firstnonzero = i; + if (phases[i] != phases[firstnonzero]) + phasesmatter = true; + } } - if (saveas != "") - { - saveplot(c1,saveas); - delete[] p; - delete[] f; - delete[] result; - delete[] error; - delete c1old; + if (!phasesmatter) { + TGraphErrors *g = new TGraphErrors(nFiles, values, result, (Double_t *)nullptr, error); + g->SetName(""); + stufftodelete->Add(g); + + TString xaxislabel = "#epsilon_{"; + xaxislabel.Append(misalignment); + xaxislabel.Append("}"); + g->GetXaxis()->SetTitle(xaxislabel); + if (xvar != "") { + yaxislabel.Append(" ["); + yaxislabel.Append(functionname); + yaxislabel.Append("]"); + } + g->GetYaxis()->SetTitle(yaxislabel); + + g->SetMarkerColor(colors[0]); + g->SetMarkerStyle(20); + + g->Draw("AP"); + Double_t yaxismax = g->GetYaxis()->GetXmax(); + Double_t yaxismin = g->GetYaxis()->GetXmin(); + if (yaxismin > 0) { + yaxismax += yaxismin; + yaxismin = 0; + } + g->GetYaxis()->SetRangeUser(yaxismin, yaxismax); + g->Draw("AP"); + } else { + double *xvalues = new double[nFiles]; + double *yvalues = new double[nFiles]; //these are not physically x and y (except in the case of skew) + for (int i = 0; i < nFiles; i++) { + xvalues[i] = values[i] * cos(phases[i]); + yvalues[i] = values[i] * sin(phases[i]); + } + TGraph2DErrors *g = + new TGraph2DErrors(nFiles, xvalues, yvalues, result, (Double_t *)nullptr, (Double_t *)nullptr, error); + g->SetName(""); + stufftodelete->Add(g); + delete[] xvalues; //A TGraph2DErrors has its own copy of xvalues and yvalues, so it's ok to delete these copies. + delete[] yvalues; + + TString xaxislabel = "#epsilon_{"; + xaxislabel.Append(misalignment); + xaxislabel.Append("}cos(#delta)"); + TString realyaxislabel = xaxislabel; + realyaxislabel.ReplaceAll("cos(#delta)", "sin(#delta)"); + g->GetXaxis()->SetTitle(xaxislabel); + g->GetYaxis()->SetTitle(realyaxislabel); + TString zaxislabel = /*"fake"*/ yaxislabel; //yaxislabel is defined earlier + if (xvar != "") { + zaxislabel.Append(" ["); + zaxislabel.Append(functionname); + zaxislabel.Append("]"); + } + g->GetZaxis()->SetTitle(zaxislabel); + g->SetMarkerStyle(20); + g->Draw("pcolerr"); } + } + + if (saveas != "") { + saveplot(c1, saveas); + delete[] p; + delete[] f; + delete[] result; + delete[] error; + delete c1old; + } } - //This version allows you to show multiple parameters. It runs the previous version multiple times, once for each parameter. //saveas will be modified to indicate which parameter is being used each time. void misalignmentDependence(TCanvas *c1old, - Int_t nFiles,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TF1 *function,Int_t nParameters,Int_t *parameters,TString *parameternames,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - for (int i = 0; i < nParameters; i++) - { - TString saveasi = saveas; - TString insert = nPart(1,parameternames[i]); - insert.Prepend("."); - saveasi.Insert(saveasi.Last('.'),insert); //insert the parameter name before the file extension - misalignmentDependence(c1old, - nFiles,names,misalignment,values,phases,xvar,yvar, - function,parameters[i],parameternames[i],functionname, - relative,resolution,pull, - saveasi); - } + Int_t nFiles, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TF1 *function, + Int_t nParameters, + Int_t *parameters, + TString *parameternames, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + for (int i = 0; i < nParameters; i++) { + TString saveasi = saveas; + TString insert = nPart(1, parameternames[i]); + insert.Prepend("."); + saveasi.Insert(saveasi.Last('.'), insert); //insert the parameter name before the file extension + misalignmentDependence(c1old, + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + function, + parameters[i], + parameternames[i], + functionname, + relative, + resolution, + pull, + saveasi); + } } - //This version does not take a canvas as its argument. It runs trackSplitPlot to produce the canvas. -void misalignmentDependence(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TF1 *function,Int_t parameter,TString parametername,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - misalignmentDependence(trackSplitPlot(nFiles,files,names,xvar,yvar,relative,resolution,pull,""), - nFiles,names,misalignment,values,phases,xvar,yvar, - function,parameter,parametername,functionname, - relative,resolution,pull,saveas); +void misalignmentDependence(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TF1 *function, + Int_t parameter, + TString parametername, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + misalignmentDependence(trackSplitPlot(nFiles, files, names, xvar, yvar, relative, resolution, pull, ""), + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + function, + parameter, + parametername, + functionname, + relative, + resolution, + pull, + saveas); } -void misalignmentDependence(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TF1 *function,Int_t nParameters,Int_t *parameters,TString *parameternames,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - for (int i = 0; i < nParameters; i++) - { - TString saveasi = saveas; - TString insert = nPart(1,parameternames[i]); - insert.Prepend("."); - saveasi.Insert(saveasi.Last('.'),insert); //insert the parameter name before the file extension - misalignmentDependence(nFiles,files,names,misalignment,values,phases,xvar,yvar, - function,parameters[i],parameternames[i],functionname, - relative,resolution,pull, - saveasi); - } +void misalignmentDependence(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TF1 *function, + Int_t nParameters, + Int_t *parameters, + TString *parameternames, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + for (int i = 0; i < nParameters; i++) { + TString saveasi = saveas; + TString insert = nPart(1, parameternames[i]); + insert.Prepend("."); + saveasi.Insert(saveasi.Last('.'), insert); //insert the parameter name before the file extension + misalignmentDependence(nFiles, + files, + names, + misalignment, + values, + phases, + xvar, + yvar, + function, + parameters[i], + parameternames[i], + functionname, + relative, + resolution, + pull, + saveasi); + } } - // This version allows you to use a string for the function. It creates a TF1 using this string and uses this TF1 void misalignmentDependence(TCanvas *c1old, - Int_t nFiles,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TString function,Int_t parameter,TString parametername,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - TF1 *f = new TF1("func",function); - misalignmentDependence(c1old,nFiles,names,misalignment,values,phases,xvar,yvar,f,parameter,parametername,functionname,relative,resolution,pull,saveas); - delete f; + Int_t nFiles, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TString function, + Int_t parameter, + TString parametername, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + TF1 *f = new TF1("func", function); + misalignmentDependence(c1old, + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + f, + parameter, + parametername, + functionname, + relative, + resolution, + pull, + saveas); + delete f; } void misalignmentDependence(TCanvas *c1old, - Int_t nFiles,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TString function,Int_t nParameters,Int_t *parameters,TString *parameternames,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - for (int i = 0; i < nParameters; i++) - { - TString saveasi = saveas; - TString insert = nPart(1,parameternames[i]); - insert.Prepend("."); - saveasi.Insert(saveasi.Last('.'),insert); //insert the parameter name before the file extension - misalignmentDependence(c1old, - nFiles,names,misalignment,values,phases,xvar,yvar, - function,parameters[i],parameternames[i],functionname, - relative,resolution,pull, - saveasi); - } + Int_t nFiles, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TString function, + Int_t nParameters, + Int_t *parameters, + TString *parameternames, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + for (int i = 0; i < nParameters; i++) { + TString saveasi = saveas; + TString insert = nPart(1, parameternames[i]); + insert.Prepend("."); + saveasi.Insert(saveasi.Last('.'), insert); //insert the parameter name before the file extension + misalignmentDependence(c1old, + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + function, + parameters[i], + parameternames[i], + functionname, + relative, + resolution, + pull, + saveasi); + } } - -void misalignmentDependence(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TString function,Int_t parameter,TString parametername,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - TF1 *f = new TF1("func",function); - misalignmentDependence(nFiles,files,names,misalignment,values,phases,xvar,yvar,f,parameter,parametername,functionname,relative,resolution,pull,saveas); - delete f; +void misalignmentDependence(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TString function, + Int_t parameter, + TString parametername, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + TF1 *f = new TF1("func", function); + misalignmentDependence(nFiles, + files, + names, + misalignment, + values, + phases, + xvar, + yvar, + f, + parameter, + parametername, + functionname, + relative, + resolution, + pull, + saveas); + delete f; } -void misalignmentDependence(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, - TString function,Int_t nParameters,Int_t *parameters,TString *parameternames,TString functionname, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - for (int i = 0; i < nParameters; i++) - { - TString saveasi = saveas; - TString insert = nPart(1,parameternames[i]); - insert.Prepend("."); - saveasi.Insert(saveasi.Last('.'),insert); //insert the parameter name before the file extension - misalignmentDependence(nFiles,files,names,misalignment,values,phases,xvar,yvar, - function,parameters[i],parameternames[i],functionname, - relative,resolution,pull, - saveasi); - } +void misalignmentDependence(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, + TString function, + Int_t nParameters, + Int_t *parameters, + TString *parameternames, + TString functionname, + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + for (int i = 0; i < nParameters; i++) { + TString saveasi = saveas; + TString insert = nPart(1, parameternames[i]); + insert.Prepend("."); + saveasi.Insert(saveasi.Last('.'), insert); //insert the parameter name before the file extension + misalignmentDependence(nFiles, + files, + names, + misalignment, + values, + phases, + xvar, + yvar, + function, + parameters[i], + parameternames[i], + functionname, + relative, + resolution, + pull, + saveasi); + } } - - - //This version does not take a function as its argument. It automatically determines what function, parameter, //functionname, and parametername to use based on misalignment, xvar, yvar, relative, resolution, and pull. //However, you have to manually put into the function which plots to fit to what shapes. @@ -1119,112 +1243,126 @@ void misalignmentDependence(Int_t nFiles,TString *files,TString *names,TString m //This is the version called by makeThesePlots.C Bool_t misalignmentDependence(TCanvas *c1old, - Int_t nFiles,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, + Int_t nFiles, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, Bool_t drawfits, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - if (xvar == "") - { - if (c1old == 0 || misalignment == "" || values == 0) return false; - misalignmentDependence(c1old,nFiles,names,misalignment,values,phases,xvar,yvar,(TF1*)0,0,"","",relative,resolution,pull,saveas); - return true; + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + if (xvar == "") { + if (c1old == nullptr || misalignment == "" || values == nullptr) + return false; + misalignmentDependence(c1old, + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + (TF1 *)nullptr, + 0, + "", + "", + relative, + resolution, + pull, + saveas); + return true; + } + TF1 *f = nullptr; + TString functionname = ""; + + //if only one parameter is of interest + TString parametername = ""; + Int_t parameter = 9999; + + //if multiple parameters are of interest + Int_t nParameters = -1; + TString *parameternames = nullptr; + Int_t *parameters = nullptr; + + if (misalignment == "sagitta") { + if (xvar == "phi" && yvar == "phi" && !resolution && !pull) { + f = new TF1("sine", "-[0]*cos([1]*x+[2])"); + f->FixParameter(1, 1); + f->SetParameter(0, 6e-4); + nParameters = 2; + Int_t tempParameters[2] = {0, 2}; + TString tempParameterNames[2] = {"A;mrad", "B"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#Delta#phi=-Acos(#phi+B)"; } - TF1 *f = 0; - TString functionname = ""; - - //if only one parameter is of interest - TString parametername = ""; - Int_t parameter = 9999; - - //if multiple parameters are of interest - Int_t nParameters = -1; - TString *parameternames = 0; - Int_t *parameters = 0; - - if (misalignment == "sagitta") - { - if (xvar == "phi" && yvar == "phi" && !resolution && !pull) - { - f = new TF1("sine","-[0]*cos([1]*x+[2])"); - f->FixParameter(1,1); - f->SetParameter(0,6e-4); - nParameters = 2; - Int_t tempParameters[2] = {0,2}; - TString tempParameterNames[2] = {"A;mrad","B"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#Delta#phi=-Acos(#phi+B)"; - } - if (xvar == "theta" && yvar == "theta" && !resolution && pull) - { - f = new TF1("line","-[0]*(x+[1])"); - f->FixParameter(1,-pi/2); - parametername = "A"; - functionname = "#Delta#theta/#delta(#Delta#theta)=-A(#theta-#pi/2)"; - parameter = 0; - } - if (xvar == "theta" && yvar == "theta" && !resolution && !pull) - { - f = new TF1("sine","[0]*sin([1]*x+[2])"); - f->FixParameter(1,2); - f->FixParameter(2,0); - parametername = "A;mrad"; - functionname = "#Delta#theta=-Asin(2#theta)"; - parameter = 0; - } + if (xvar == "theta" && yvar == "theta" && !resolution && pull) { + f = new TF1("line", "-[0]*(x+[1])"); + f->FixParameter(1, -pi / 2); + parametername = "A"; + functionname = "#Delta#theta/#delta(#Delta#theta)=-A(#theta-#pi/2)"; + parameter = 0; } - if (misalignment == "elliptical") - { - if (xvar == "phi" && yvar == "dxy" && !resolution && !pull) - { - f = new TF1("sine","[0]*sin([1]*x-[2])"); - //f = new TF1("sine","[0]*sin([1]*x-[2]) + [3]"); - f->FixParameter(1,-2); - f->SetParameter(0,5e-4); - - nParameters = 2; - Int_t tempParameters[2] = {0,2}; - TString tempParameterNames[2] = {"A;#mum","B"}; - //nParameters = 3; - //Int_t tempParameters[3] = {0,2,3}; - //TString tempParameterNames[3] = {"A;#mum","B","C;#mum"}; - - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#Deltad_{xy}=-Asin(2#phi+B)"; - //functionname = "#Deltad_{xy}=-Asin(2#phi+B)+C"; - } - if (xvar == "phi" && yvar == "dxy" && !resolution && pull) - { - f = new TF1("sine","[0]*sin([1]*x-[2])"); - //f = new TF1("sine","[0]*sin([1]*x-[2]) + [3]"); + if (xvar == "theta" && yvar == "theta" && !resolution && !pull) { + f = new TF1("sine", "[0]*sin([1]*x+[2])"); + f->FixParameter(1, 2); + f->FixParameter(2, 0); + parametername = "A;mrad"; + functionname = "#Delta#theta=-Asin(2#theta)"; + parameter = 0; + } + } + if (misalignment == "elliptical") { + if (xvar == "phi" && yvar == "dxy" && !resolution && !pull) { + f = new TF1("sine", "[0]*sin([1]*x-[2])"); + //f = new TF1("sine","[0]*sin([1]*x-[2]) + [3]"); + f->FixParameter(1, -2); + f->SetParameter(0, 5e-4); + + nParameters = 2; + Int_t tempParameters[2] = {0, 2}; + TString tempParameterNames[2] = {"A;#mum", "B"}; + //nParameters = 3; + //Int_t tempParameters[3] = {0,2,3}; + //TString tempParameterNames[3] = {"A;#mum","B","C;#mum"}; + + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#Deltad_{xy}=-Asin(2#phi+B)"; + //functionname = "#Deltad_{xy}=-Asin(2#phi+B)+C"; + } + if (xvar == "phi" && yvar == "dxy" && !resolution && pull) { + f = new TF1("sine", "[0]*sin([1]*x-[2])"); + //f = new TF1("sine","[0]*sin([1]*x-[2]) + [3]"); - f->FixParameter(1,-2); + f->FixParameter(1, -2); - nParameters = 2; - Int_t tempParameters[2] = {0,2}; - TString tempParameterNames[2] = {"A","B"}; - //nParameters = 3; - //Int_t tempParameters[3] = {0,2,3}; - //TString tempParameterNames[3] = {"A","B","C"}; + nParameters = 2; + Int_t tempParameters[2] = {0, 2}; + TString tempParameterNames[2] = {"A", "B"}; + //nParameters = 3; + //Int_t tempParameters[3] = {0,2,3}; + //TString tempParameterNames[3] = {"A","B","C"}; - parameters = tempParameters; - parameternames = tempParameterNames; + parameters = tempParameters; + parameternames = tempParameterNames; - functionname = "#Deltad_{xy}/#delta(#Deltad_{xy})=-Asin(2#phi+B)"; - //functionname = "#Deltad_{xy}/#delta(#Deltad_{xy})=-Asin(2#phi+B)+C"; - } + functionname = "#Deltad_{xy}/#delta(#Deltad_{xy})=-Asin(2#phi+B)"; + //functionname = "#Deltad_{xy}/#delta(#Deltad_{xy})=-Asin(2#phi+B)+C"; + } - if (xvar == "theta" && yvar == "dz" && !resolution && !pull) - { - f = new TF1("line","-[0]*(x-[1])"); - f->FixParameter(1,pi/2); - parametername = "A;#mum"; - functionname = "#Deltad_{z}=-A(#theta-#pi/2)"; - parameter = 0; - } - /* + if (xvar == "theta" && yvar == "dz" && !resolution && !pull) { + f = new TF1("line", "-[0]*(x-[1])"); + f->FixParameter(1, pi / 2); + parametername = "A;#mum"; + functionname = "#Deltad_{z}=-A(#theta-#pi/2)"; + parameter = 0; + } + /* This fit doesn't work if (xvar == "theta" && yvar == "dz" && !resolution && pull) { @@ -1236,310 +1374,357 @@ Bool_t misalignmentDependence(TCanvas *c1old, parameter = 0; } */ - if (xvar == "dxy" && yvar == "phi" && !resolution && !pull) - { - f = new TF1("line","-[0]*(x-[1])"); - f->FixParameter(1,0); - parametername = "A;mrad/cm"; - functionname = "#Delta#phi=-A(d_{xy})"; - parameter = 0; - } - if (xvar == "dxy" && yvar == "phi" && !resolution && pull) - { - f = new TF1("line","-[0]*(x-[1])"); - f->FixParameter(1,0); - parametername = "A;cm^{-1}"; - functionname = "#Delta#phi/#delta(#Delta#phi)=-A(d_{xy})"; - parameter = 0; - } + if (xvar == "dxy" && yvar == "phi" && !resolution && !pull) { + f = new TF1("line", "-[0]*(x-[1])"); + f->FixParameter(1, 0); + parametername = "A;mrad/cm"; + functionname = "#Delta#phi=-A(d_{xy})"; + parameter = 0; } - if (misalignment == "skew") - { - if (xvar == "phi" && yvar == "theta" && resolution && !pull) - { - f = new TF1("sine","[0]*sin([1]*x+[2])+[3]"); - f->FixParameter(1,2); - nParameters = 3; - Int_t tempParameters[3] = {0,2,3}; - TString tempParameterNames[3] = {"A;mrad","B","C;mrad"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#sigma(#Delta#theta)=Asin(2#phi+B)+C"; - } - if (xvar == "phi" && yvar == "eta" && resolution && !pull) - { - f = new TF1("sine","[0]*sin([1]*x+[2])+[3]"); - f->FixParameter(1,2); - nParameters = 3; - Int_t tempParameters[3] = {0,2,3}; - TString tempParameterNames[3] = {"A;mrad","B","C;mrad"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#sigma(#Delta#eta)=Asin(2#phi+B)+C"; - } - if (xvar == "phi" && yvar == "theta" && resolution && pull) - { - f = new TF1("sine","[0]*sin([1]*x+[2])+[3]"); - f->FixParameter(1,2); - nParameters = 3; - Int_t tempParameters[3] = {0,2,3}; - TString tempParameterNames[3] = {"A","B","C"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#sigma(#Delta#theta/#delta(#Delta#theta))=Asin(2#phi+B)+C"; - } - if (xvar == "phi" && yvar == "eta" && resolution && pull) - { - f = new TF1("sine","[0]*sin([1]*x+[2])+[3]"); - f->FixParameter(1,2); - nParameters = 3; - Int_t tempParameters[3] = {0,2,3}; - TString tempParameterNames[3] = {"A","B","C"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#sigma(#Delta#eta/#delta(#Delta#eta))=Asin(2#phi+B)+C"; - } - if (xvar == "phi" && yvar == "dz" && !resolution && !pull) - { - f = new TF1("tanh","[0]*(tanh([1]*(x+[2])) )"); // - tanh(([3]-[1])*x+[2]) + 1)"); - //f = new TF1("tanh","[0]*(tanh([1]*(x+[2])) + tanh([1]*([3]-[2]-x)) - 1)"); - f->SetParameter(0,100); - f->SetParLimits(1,-20,20); - f->SetParLimits(2,0,pi); - f->FixParameter(3,pi); - nParameters = 3; - Int_t tempParameters[3] = {0,1,2}; - TString tempParameterNames[3] = {"A;#mum","B","C"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#Deltad_{z}=Atanh(B(#phi+C))"; - //functionname = "#Deltad_{z}=A(tanh(B(#phi+C)) + tanh(B(#pi-#phi-C)) - 1"; - } + if (xvar == "dxy" && yvar == "phi" && !resolution && pull) { + f = new TF1("line", "-[0]*(x-[1])"); + f->FixParameter(1, 0); + parametername = "A;cm^{-1}"; + functionname = "#Delta#phi/#delta(#Delta#phi)=-A(d_{xy})"; + parameter = 0; } - if (misalignment == "layerRot") - { - if (xvar == "qoverpt" && yvar == "qoverpt" && !relative && !resolution && !pull) - { - f = new TF1("sech","[0]/cosh([1]*(x+[2]))+[3]"); - //f = new TF1("gauss","[0]/exp(([1]*(x+[2]))^2)+[3]"); //sech works better than a gaussian - f->SetParameter(0,1); - f->SetParameter(1,1); - f->SetParLimits(1,0,10); - f->FixParameter(2,0); - f->FixParameter(3,0); - nParameters = 2; - Int_t tempParameters[2] = {0,1}; - TString tempParameterNames[2] = {"A;10^{-3}e/GeV","B;GeV/e"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#Delta(q/p_{T})=Asech(B(q/p_{T}))"; - } + } + if (misalignment == "skew") { + if (xvar == "phi" && yvar == "theta" && resolution && !pull) { + f = new TF1("sine", "[0]*sin([1]*x+[2])+[3]"); + f->FixParameter(1, 2); + nParameters = 3; + Int_t tempParameters[3] = {0, 2, 3}; + TString tempParameterNames[3] = {"A;mrad", "B", "C;mrad"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#sigma(#Delta#theta)=Asin(2#phi+B)+C"; } - if (misalignment == "telescope") - { - if (xvar == "theta" && yvar == "theta" && !relative && !resolution && !pull) - { - f = new TF1("gauss","[0]/exp(([1]*(x+[2]))^2)+[3]"); - f->SetParameter(0,1); - f->SetParameter(1,1); - f->SetParLimits(1,0,10); - f->FixParameter(2,-pi/2); - f->FixParameter(3,0); - nParameters = 2; - Int_t tempParameters[2] = {0,1}; - TString tempParameterNames[2] = {"A;mrad","B"}; - parameters = tempParameters; - parameternames = tempParameterNames; - functionname = "#Delta#theta=Aexp(-(B(#theta-#pi/2))^{2})"; - } + if (xvar == "phi" && yvar == "eta" && resolution && !pull) { + f = new TF1("sine", "[0]*sin([1]*x+[2])+[3]"); + f->FixParameter(1, 2); + nParameters = 3; + Int_t tempParameters[3] = {0, 2, 3}; + TString tempParameterNames[3] = {"A;mrad", "B", "C;mrad"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#sigma(#Delta#eta)=Asin(2#phi+B)+C"; } - if (functionname == "") return false; - if (drawfits) - { - parameter = -parameter-1; - for (int i = 0; i < nParameters; i++) - parameters[i] = -parameters[i]-1; + if (xvar == "phi" && yvar == "theta" && resolution && pull) { + f = new TF1("sine", "[0]*sin([1]*x+[2])+[3]"); + f->FixParameter(1, 2); + nParameters = 3; + Int_t tempParameters[3] = {0, 2, 3}; + TString tempParameterNames[3] = {"A", "B", "C"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#sigma(#Delta#theta/#delta(#Delta#theta))=Asin(2#phi+B)+C"; } - if (nParameters > 0) - misalignmentDependence(c1old,nFiles,names,misalignment,values,phases,xvar,yvar, - f,nParameters,parameters,parameternames,functionname,relative,resolution,pull,saveas); - else - misalignmentDependence(c1old,nFiles,names,misalignment,values,phases,xvar,yvar, - f,parameter,parametername,functionname,relative,resolution,pull,saveas); - delete f; - return true; - + if (xvar == "phi" && yvar == "eta" && resolution && pull) { + f = new TF1("sine", "[0]*sin([1]*x+[2])+[3]"); + f->FixParameter(1, 2); + nParameters = 3; + Int_t tempParameters[3] = {0, 2, 3}; + TString tempParameterNames[3] = {"A", "B", "C"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#sigma(#Delta#eta/#delta(#Delta#eta))=Asin(2#phi+B)+C"; + } + if (xvar == "phi" && yvar == "dz" && !resolution && !pull) { + f = new TF1("tanh", "[0]*(tanh([1]*(x+[2])) )"); // - tanh(([3]-[1])*x+[2]) + 1)"); + //f = new TF1("tanh","[0]*(tanh([1]*(x+[2])) + tanh([1]*([3]-[2]-x)) - 1)"); + f->SetParameter(0, 100); + f->SetParLimits(1, -20, 20); + f->SetParLimits(2, 0, pi); + f->FixParameter(3, pi); + nParameters = 3; + Int_t tempParameters[3] = {0, 1, 2}; + TString tempParameterNames[3] = {"A;#mum", "B", "C"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#Deltad_{z}=Atanh(B(#phi+C))"; + //functionname = "#Deltad_{z}=A(tanh(B(#phi+C)) + tanh(B(#pi-#phi-C)) - 1"; + } + } + if (misalignment == "layerRot") { + if (xvar == "qoverpt" && yvar == "qoverpt" && !relative && !resolution && !pull) { + f = new TF1("sech", "[0]/cosh([1]*(x+[2]))+[3]"); + //f = new TF1("gauss","[0]/exp(([1]*(x+[2]))^2)+[3]"); //sech works better than a gaussian + f->SetParameter(0, 1); + f->SetParameter(1, 1); + f->SetParLimits(1, 0, 10); + f->FixParameter(2, 0); + f->FixParameter(3, 0); + nParameters = 2; + Int_t tempParameters[2] = {0, 1}; + TString tempParameterNames[2] = {"A;10^{-3}e/GeV", "B;GeV/e"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#Delta(q/p_{T})=Asech(B(q/p_{T}))"; + } + } + if (misalignment == "telescope") { + if (xvar == "theta" && yvar == "theta" && !relative && !resolution && !pull) { + f = new TF1("gauss", "[0]/exp(([1]*(x+[2]))^2)+[3]"); + f->SetParameter(0, 1); + f->SetParameter(1, 1); + f->SetParLimits(1, 0, 10); + f->FixParameter(2, -pi / 2); + f->FixParameter(3, 0); + nParameters = 2; + Int_t tempParameters[2] = {0, 1}; + TString tempParameterNames[2] = {"A;mrad", "B"}; + parameters = tempParameters; + parameternames = tempParameterNames; + functionname = "#Delta#theta=Aexp(-(B(#theta-#pi/2))^{2})"; + } + } + if (functionname == "") + return false; + if (drawfits) { + parameter = -parameter - 1; + for (int i = 0; i < nParameters; i++) + parameters[i] = -parameters[i] - 1; + } + if (nParameters > 0) + misalignmentDependence(c1old, + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + f, + nParameters, + parameters, + parameternames, + functionname, + relative, + resolution, + pull, + saveas); + else + misalignmentDependence(c1old, + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + f, + parameter, + parametername, + functionname, + relative, + resolution, + pull, + saveas); + delete f; + return true; } - //This is the most practically useful version. It does not take a canvas, but produces it automatically and then determines what //function to fit it to. -Bool_t misalignmentDependence(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString xvar,TString yvar, +Bool_t misalignmentDependence(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString xvar, + TString yvar, Bool_t drawfits, - Bool_t relative,Bool_t resolution,Bool_t pull, - TString saveas) -{ - return misalignmentDependence(trackSplitPlot(nFiles,files,names,xvar,yvar,relative,resolution,pull,""), - nFiles,names,misalignment,values,phases,xvar,yvar, - drawfits,relative,resolution,pull,saveas); + Bool_t relative, + Bool_t resolution, + Bool_t pull, + TString saveas) { + return misalignmentDependence(trackSplitPlot(nFiles, files, names, xvar, yvar, relative, resolution, pull, ""), + nFiles, + names, + misalignment, + values, + phases, + xvar, + yvar, + drawfits, + relative, + resolution, + pull, + saveas); } -Bool_t hasFit(TString misalignment,TString xvar,TString yvar,Bool_t relative,Bool_t resolution,Bool_t pull) -{ - return misalignmentDependence((TCanvas*)0, - 0,(TString*)0,misalignment,(Double_t*)0,(Double_t*)0,xvar,yvar, - false, - relative,resolution,pull, - TString("")); +Bool_t hasFit(TString misalignment, TString xvar, TString yvar, Bool_t relative, Bool_t resolution, Bool_t pull) { + return misalignmentDependence((TCanvas *)nullptr, + 0, + (TString *)nullptr, + misalignment, + (Double_t *)nullptr, + (Double_t *)nullptr, + xvar, + yvar, + false, + relative, + resolution, + pull, + TString("")); } //============= //2. Make Plots //============= -void makePlots(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString directory, - Bool_t matrix[xsize][ysize]) -{ - stufftodelete->SetOwner(true); - - for (Int_t i = 0, totaltime = 0; i < nFiles; i++) - { - TFile *f = 0; - bool exists = false; - if (files[i] == "") exists = true; - - for (int j = 1; j <= 60*24 && !exists; j++, totaltime++) //wait up to 1 day for the validation to be finished - { - f = TFile::Open(files[i]); - if (f != 0) - exists = f->IsOpen(); - delete f; - if (exists) continue; - gSystem->Sleep(60000); - cout << "It's been "; - if (j >= 60) - cout << j/60 << " hour"; - if (j >= 120) - cout << "s"; - if (j % 60 != 0 && j >= 60) - cout << " and "; - if (j % 60 != 0) - cout << j%60 << " minute"; - if (j % 60 >= 2) - cout << "s"; - cout << endl; - } - if (!exists) return; - if (i == nFiles - 1 && totaltime > nFiles) - gSystem->Sleep(60000); - } - - TString directorytomake = directory; - gSystem->mkdir(directorytomake,true); - - ofstream summaryfile(directorytomake+"/TrackSplittingValidationSummary.txt"); - for (int i = 0; i < nFiles; i++) { - summaryfile << "\t" << TString(names[i]).ReplaceAll("#", "\\"); - } - summaryfile << "\tformat={}\tlatexformat={}\n"; - - if (misalignment != "") +void makePlots(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString directory, + Bool_t matrix[xsize][ysize]) { + stufftodelete->SetOwner(true); + + for (Int_t i = 0, totaltime = 0; i < nFiles; i++) { + TFile *f = nullptr; + bool exists = false; + if (files[i] == "") + exists = true; + + for (int j = 1; j <= 60 * 24 && !exists; j++, totaltime++) //wait up to 1 day for the validation to be finished { - directorytomake.Append("/fits"); - gSystem->mkdir(directorytomake); + f = TFile::Open(files[i]); + if (f != nullptr) + exists = f->IsOpen(); + delete f; + if (exists) + continue; + gSystem->Sleep(60000); + cout << "It's been "; + if (j >= 60) + cout << j / 60 << " hour"; + if (j >= 120) + cout << "s"; + if (j % 60 != 0 && j >= 60) + cout << " and "; + if (j % 60 != 0) + cout << j % 60 << " minute"; + if (j % 60 >= 2) + cout << "s"; + cout << endl; } + if (!exists) + return; + if (i == nFiles - 1 && totaltime > nFiles) + gSystem->Sleep(60000); + } + + TString directorytomake = directory; + gSystem->mkdir(directorytomake, true); + + ofstream summaryfile(directorytomake + "/TrackSplittingValidationSummary.txt"); + for (int i = 0; i < nFiles; i++) { + summaryfile << "\t" << TString(names[i]).ReplaceAll("#", "\\"); + } + summaryfile << "\tformat={}\tlatexformat={}\n"; + + if (misalignment != "") { + directorytomake.Append("/fits"); + gSystem->mkdir(directorytomake); + } + + for (Int_t x = 0; x < xsize; x++) { + for (Int_t y = 0; y < ysize; y++) { + for (Int_t pull = 0; pull == 0 || (pull == 1 && yvariables[y] != ""); pull++) { + if (false) + continue; //this line is to make it easier to do e.g. all plots involving Delta eta + //(replace false with yvariables[y] != "eta") + + if (!matrix[x][y]) + continue; + + if (xvariables[x] == "" && yvariables[y] == "") + continue; + + Int_t nPlots = + nFiles + 4; //scatterplot for each (if you uncomment it), profile, resolution, and fits for each. + vector s; + + TString slashstring = ""; + if (directory.Last('/') != directory.Length() - 1) + slashstring = "/"; + + vector plotnames; + for (Int_t i = 0; i < nFiles; i++) { + plotnames.push_back(names[i]); //this is plotnames[i] + plotnames[i].ReplaceAll(" ", ""); + } + + plotnames.push_back(""); //this is plotnames[nFiles], but gets changed + if (yvariables[y] == "") + plotnames[nFiles] = "orghist"; + else if (xvariables[x] == "") + plotnames[nFiles] = "hist"; + else + plotnames[nFiles] = "profile"; + + plotnames.push_back("resolution"); //this is plotnames[nFiles+1] + + plotnames.push_back(""); //this is plotnames[nFiles+2] + plotnames.push_back(""); //this is plotnames[nFiles+3] + if (plotnames[nFiles] == "profile") { + plotnames[nFiles + 2] = ".profile"; + plotnames[nFiles + 2].Prepend(misalignment); + plotnames[nFiles + 3] = ".resolution"; + plotnames[nFiles + 3].Prepend(misalignment); + plotnames[nFiles + 2].Prepend("fits/"); + plotnames[nFiles + 3].Prepend("fits/"); + } else { + plotnames[nFiles + 2] = "profile."; + plotnames[nFiles + 2].Append(misalignment); + plotnames[nFiles + 3] = "resolution."; + plotnames[nFiles + 3].Append(misalignment); + } - for (Int_t x = 0; x < xsize; x++) - { - for (Int_t y = 0; y < ysize; y++) - { - for (Int_t pull = 0; pull == 0 || (pull == 1 && yvariables[y] != ""); pull++) - { - if (false) continue; //this line is to make it easier to do e.g. all plots involving Delta eta - //(replace false with yvariables[y] != "eta") - - if (!matrix[x][y]) continue; - - if (xvariables[x] == "" && yvariables[y] == "") continue; - - Int_t nPlots = nFiles+4; //scatterplot for each (if you uncomment it), profile, resolution, and fits for each. - vector s; - - TString slashstring = ""; - if (directory.Last('/') != directory.Length() - 1) slashstring = "/"; - - vector plotnames; - for (Int_t i = 0; i < nFiles; i++) - { - plotnames.push_back(names[i]); //this is plotnames[i] - plotnames[i].ReplaceAll(" ",""); - } - - plotnames.push_back(""); //this is plotnames[nFiles], but gets changed - if (yvariables[y] == "") - plotnames[nFiles] = "orghist"; - else if (xvariables[x] == "") - plotnames[nFiles] = "hist"; - else - plotnames[nFiles] = "profile"; - - plotnames.push_back("resolution"); //this is plotnames[nFiles+1] - - plotnames.push_back(""); //this is plotnames[nFiles+2] - plotnames.push_back(""); //this is plotnames[nFiles+3] - if (plotnames[nFiles] == "profile") - { - plotnames[nFiles+2] = ".profile"; - plotnames[nFiles+2].Prepend(misalignment); - plotnames[nFiles+3] = ".resolution"; - plotnames[nFiles+3].Prepend(misalignment); - plotnames[nFiles+2].Prepend("fits/"); - plotnames[nFiles+3].Prepend("fits/"); - } - else - { - plotnames[nFiles+2] = "profile."; - plotnames[nFiles+2].Append(misalignment); - plotnames[nFiles+3] = "resolution."; - plotnames[nFiles+3].Append(misalignment); - } - - TString pullstring = ""; - if (pull) pullstring = "pull."; - - TString xvarstring = xvariables[x]; - if (xvariables[x] != "runNumber" && !xvariables[x].BeginsWith("nHits") && xvariables[x] != "") xvarstring.Append("_org"); - if (xvariables[x] != "" && yvariables[y] != "") xvarstring.Append("."); - - TString yvarstring = yvariables[y]; - if (yvariables[y] != "") yvarstring.Prepend("Delta_"); - - TString relativestring = ""; - if (relativearray[y]) relativestring = ".relative"; - - for (Int_t i = 0; i < nPlots; i++) - { - stringstream ss; - ss << directory << slashstring << plotnames[i] << "." << pullstring - << xvarstring << yvarstring << relativestring << ".pngepsroot"; - s.push_back(ss.str()); - if (misalignment != "") - { - TString wrongway = misalignment; - TString rightway = misalignment; - wrongway.Append (".pull"); - rightway.Prepend("pull."); - s[i].ReplaceAll(wrongway,rightway); - } - } - - Int_t i; - for (i = 0; i < nFiles; i++) - { - if (xvariables[x] == "" || yvariables[y] == "") continue; - //uncomment this section to make scatterplots - /* + TString pullstring = ""; + if (pull) + pullstring = "pull."; + + TString xvarstring = xvariables[x]; + if (xvariables[x] != "runNumber" && !xvariables[x].BeginsWith("nHits") && xvariables[x] != "") + xvarstring.Append("_org"); + if (xvariables[x] != "" && yvariables[y] != "") + xvarstring.Append("."); + + TString yvarstring = yvariables[y]; + if (yvariables[y] != "") + yvarstring.Prepend("Delta_"); + + TString relativestring = ""; + if (relativearray[y]) + relativestring = ".relative"; + + for (Int_t i = 0; i < nPlots; i++) { + stringstream ss; + ss << directory << slashstring << plotnames[i] << "." << pullstring << xvarstring << yvarstring + << relativestring << ".pngepsroot"; + s.push_back(ss.str()); + if (misalignment != "") { + TString wrongway = misalignment; + TString rightway = misalignment; + wrongway.Append(".pull"); + rightway.Prepend("pull."); + s[i].ReplaceAll(wrongway, rightway); + } + } + + Int_t i; + for (i = 0; i < nFiles; i++) { + if (xvariables[x] == "" || yvariables[y] == "") + continue; + //uncomment this section to make scatterplots + /* trackSplitPlot(files[i],xvariables[x],yvariables[y],false,relativearray[y],false,(bool)pull,s[i]); stufftodelete->Clear(); for ( ; gROOT->GetListOfCanvases()->GetEntries() > 0; ) @@ -1547,110 +1732,179 @@ void makePlots(Int_t nFiles,TString *files,TString *names,TString misalignment,D for ( ; gROOT->GetListOfFiles()->GetEntries() > 0; ) delete (TFile*)gROOT->GetListOfFiles()->Last(); */ - } - - if (xvariables[x] != "" && yvariables[y] != "") - { - //make profile - TCanvas *c1 = trackSplitPlot(nFiles,files,names,xvariables[x],yvariables[y],relativearray[y],false,(bool)pull,s[i],summaryfile); - if (misalignmentDependence(c1,nFiles,names,misalignment,values,phases,xvariables[x],yvariables[y], - true,relativearray[y],false,(bool)pull,s[i+2])) - { - s[i+2].ReplaceAll(".png",".parameter.png"); - misalignmentDependence(c1,nFiles,names,misalignment,values,phases,xvariables[x],yvariables[y], - false,relativearray[y],false,(bool)pull,s[i+2]); - } - stufftodelete->Clear(); - for ( ; gROOT->GetListOfCanvases()->GetEntries() > 0; ) - deleteCanvas( gROOT->GetListOfCanvases()->Last()); - for ( ; gROOT->GetListOfFiles()->GetEntries() > 0; ) - delete (TFile*)gROOT->GetListOfFiles()->Last(); - - //make resolution plot - TCanvas *c2 = trackSplitPlot(nFiles,files,names,xvariables[x],yvariables[y],relativearray[y],true ,(bool)pull,s[i+1],summaryfile); - if (misalignmentDependence(c2,nFiles,names,misalignment,values,phases,xvariables[x],yvariables[y], - true,relativearray[y],true,(bool)pull,s[i+3])) - { - s[i+3].ReplaceAll(".png",".parameter.png"); - misalignmentDependence(c2,nFiles,names,misalignment,values,phases,xvariables[x],yvariables[y], - false,relativearray[y],true,(bool)pull,s[i+3]); - } - stufftodelete->Clear(); - for ( ; gROOT->GetListOfCanvases()->GetEntries() > 0; ) - deleteCanvas( gROOT->GetListOfCanvases()->Last()); - for ( ; gROOT->GetListOfFiles()->GetEntries() > 0; ) - delete (TFile*)gROOT->GetListOfFiles()->Last(); - } - else - { - //make histogram - TCanvas *c1 = trackSplitPlot(nFiles,files,names,xvariables[x],yvariables[y],relativearray[y],false,(bool)pull,s[i],summaryfile); - if (misalignmentDependence(c1,nFiles,names,misalignment,values,phases,xvariables[x],yvariables[y], - true,relativearray[y],false,(bool)pull,s[i+2])) - { - misalignmentDependence(c1,nFiles,names,misalignment,values,phases,xvariables[x],yvariables[y], - true,relativearray[y],true,(bool)pull,s[i+3]); - } - stufftodelete->Clear(); - for ( ; gROOT->GetListOfCanvases()->GetEntries() > 0; ) - deleteCanvas( gROOT->GetListOfCanvases()->Last()); - for ( ; gROOT->GetListOfFiles()->GetEntries() > 0; ) - delete (TFile*)gROOT->GetListOfFiles()->Last(); - } - } - cout << y + ysize * x + 1 << "/" << xsize*ysize << endl; } + + if (xvariables[x] != "" && yvariables[y] != "") { + //make profile + TCanvas *c1 = trackSplitPlot( + nFiles, files, names, xvariables[x], yvariables[y], relativearray[y], false, (bool)pull, s[i], summaryfile); + if (misalignmentDependence(c1, + nFiles, + names, + misalignment, + values, + phases, + xvariables[x], + yvariables[y], + true, + relativearray[y], + false, + (bool)pull, + s[i + 2])) { + s[i + 2].ReplaceAll(".png", ".parameter.png"); + misalignmentDependence(c1, + nFiles, + names, + misalignment, + values, + phases, + xvariables[x], + yvariables[y], + false, + relativearray[y], + false, + (bool)pull, + s[i + 2]); + } + stufftodelete->Clear(); + for (; gROOT->GetListOfCanvases()->GetEntries() > 0;) + deleteCanvas(gROOT->GetListOfCanvases()->Last()); + for (; gROOT->GetListOfFiles()->GetEntries() > 0;) + delete (TFile *)gROOT->GetListOfFiles()->Last(); + + //make resolution plot + TCanvas *c2 = trackSplitPlot(nFiles, + files, + names, + xvariables[x], + yvariables[y], + relativearray[y], + true, + (bool)pull, + s[i + 1], + summaryfile); + if (misalignmentDependence(c2, + nFiles, + names, + misalignment, + values, + phases, + xvariables[x], + yvariables[y], + true, + relativearray[y], + true, + (bool)pull, + s[i + 3])) { + s[i + 3].ReplaceAll(".png", ".parameter.png"); + misalignmentDependence(c2, + nFiles, + names, + misalignment, + values, + phases, + xvariables[x], + yvariables[y], + false, + relativearray[y], + true, + (bool)pull, + s[i + 3]); + } + stufftodelete->Clear(); + for (; gROOT->GetListOfCanvases()->GetEntries() > 0;) + deleteCanvas(gROOT->GetListOfCanvases()->Last()); + for (; gROOT->GetListOfFiles()->GetEntries() > 0;) + delete (TFile *)gROOT->GetListOfFiles()->Last(); + } else { + //make histogram + TCanvas *c1 = trackSplitPlot( + nFiles, files, names, xvariables[x], yvariables[y], relativearray[y], false, (bool)pull, s[i], summaryfile); + if (misalignmentDependence(c1, + nFiles, + names, + misalignment, + values, + phases, + xvariables[x], + yvariables[y], + true, + relativearray[y], + false, + (bool)pull, + s[i + 2])) { + misalignmentDependence(c1, + nFiles, + names, + misalignment, + values, + phases, + xvariables[x], + yvariables[y], + true, + relativearray[y], + true, + (bool)pull, + s[i + 3]); + } + stufftodelete->Clear(); + for (; gROOT->GetListOfCanvases()->GetEntries() > 0;) + deleteCanvas(gROOT->GetListOfCanvases()->Last()); + for (; gROOT->GetListOfFiles()->GetEntries() > 0;) + delete (TFile *)gROOT->GetListOfFiles()->Last(); + } + } + cout << y + ysize * x + 1 << "/" << xsize * ysize << endl; } + } } -void makePlots(Int_t nFiles,TString *files,TString *names,TString directory, Bool_t matrix[xsize][ysize]) -{ - makePlots(nFiles,files,names,"",(Double_t*)0,(Double_t*)0,directory, - matrix); +void makePlots(Int_t nFiles, TString *files, TString *names, TString directory, Bool_t matrix[xsize][ysize]) { + makePlots(nFiles, files, names, "", (Double_t *)nullptr, (Double_t *)nullptr, directory, matrix); } -void makePlots(TString file,TString misalignment,Double_t *values,Double_t *phases,TString directory,Bool_t matrix[xsize][ysize]) -{ - setupcolors(); - file.Remove(TString::kTrailing, ','); - int n = file.CountChar(',') + 1; - TString *files = new TString[n]; - TString *names = new TString[n]; - vector tempcolors = colors; - vector tempstyles = styles; - for (int i = 0; i < n; i++) - { - TString thisfile = nPart(i+1,file,","); - int numberofpipes = thisfile.CountChar('|'); - if (numberofpipes >= 0 && nPart(numberofpipes+1,thisfile,"|").IsDigit()) - { - if (numberofpipes >= 1 && nPart(numberofpipes,thisfile,"|").IsDigit()) - { - colors[i] = nPart(numberofpipes,thisfile,"|").Atoi(); - styles[i] = nPart(numberofpipes+1,thisfile,"|").Atoi(); - thisfile.Remove(thisfile.Length() - nPart(numberofpipes,thisfile,"|").Length() - nPart(numberofpipes+1,thisfile,"|").Length() - 2); - } - else - { - colors[i] = nPart(numberofpipes + 1,thisfile,"|").Atoi(); - thisfile.Remove(thisfile.Length() - nPart(numberofpipes+1,thisfile,"|").Length() - 2); - } - } - files[i] = nPart(1,thisfile,"=",true); - names[i] = nPart(2,thisfile,"=",false); +void makePlots(TString file, + TString misalignment, + Double_t *values, + Double_t *phases, + TString directory, + Bool_t matrix[xsize][ysize]) { + setupcolors(); + file.Remove(TString::kTrailing, ','); + unsigned int n = file.CountChar(',') + 1; + TString *files = new TString[n]; + TString *names = new TString[n]; + vector tempcolors = colors; + vector tempstyles = styles; + for (unsigned int i = 0; i < n; i++) { + TString thisfile = nPart(i + 1, file, ","); + int numberofpipes = thisfile.CountChar('|'); + if (numberofpipes >= 0 && nPart(numberofpipes + 1, thisfile, "|").IsDigit()) { + if (numberofpipes >= 1 && nPart(numberofpipes, thisfile, "|").IsDigit()) { + colors[i] = nPart(numberofpipes, thisfile, "|").Atoi(); + styles[i] = nPart(numberofpipes + 1, thisfile, "|").Atoi(); + thisfile.Remove(thisfile.Length() - nPart(numberofpipes, thisfile, "|").Length() - + nPart(numberofpipes + 1, thisfile, "|").Length() - 2); + } else { + colors[i] = nPart(numberofpipes + 1, thisfile, "|").Atoi(); + thisfile.Remove(thisfile.Length() - nPart(numberofpipes + 1, thisfile, "|").Length() - 2); + } } - if (n == 1 && names[0] == "") - names[0] = "scatterplot"; //With 1 file there's no legend, so this is only used in the filename of the scatterplots, if made - makePlots(n,files,names,misalignment,values,phases,directory,matrix); - delete[] files; - delete[] names; - colors = tempcolors; - styles = tempstyles; + files[i] = nPart(1, thisfile, "=", true); + names[i] = nPart(2, thisfile, "=", false); + } + if (n == 1 && names[0] == "") + names[0] = + "scatterplot"; //With 1 file there's no legend, so this is only used in the filename of the scatterplots, if made + makePlots(n, files, names, misalignment, values, phases, directory, matrix); + delete[] files; + delete[] names; + colors = tempcolors; + styles = tempstyles; } -void makePlots(TString file,TString directory,Bool_t matrix[xsize][ysize]) -{ - makePlots(file,"",(Double_t*)0,(Double_t*)0,directory,matrix); +void makePlots(TString file, TString directory, Bool_t matrix[xsize][ysize]) { + makePlots(file, "", (Double_t *)nullptr, (Double_t *)nullptr, directory, matrix); } //*************************************************************************** @@ -1663,795 +1917,731 @@ void makePlots(TString file,TString directory,Bool_t matrix[xsize][ysize]) // (including Delta_pt/pt_org) //*************************************************************************** -void makePlots(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString directory, - TString xvar,TString yvar) -{ - Bool_t matrix[xsize][ysize]; - for (int x = 0; x < xsize; x++) - for (int y = 0; y < ysize; y++) - { - bool xmatch = (xvar == "all" || xvar == xvariables[x]); - bool ymatch = (yvar == "all" || yvar == yvariables[y]); - if (yvar == "pt" && yvariables[y] == "pt" && relativearray[y] == true) - ymatch = false; - if (yvar == "ptrel" && yvariables[y] == "pt" && relativearray[y] == true) - ymatch = true; - matrix[x][y] = (xmatch && ymatch); - } - makePlots(nFiles,files,names,misalignment,values,phases,directory,matrix); +void makePlots(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString directory, + TString xvar, + TString yvar) { + Bool_t matrix[xsize][ysize]; + for (int x = 0; x < xsize; x++) + for (int y = 0; y < ysize; y++) { + bool xmatch = (xvar == "all" || xvar == xvariables[x]); + bool ymatch = (yvar == "all" || yvar == yvariables[y]); + if (yvar == "pt" && yvariables[y] == "pt" && relativearray[y] == true) + ymatch = false; + if (yvar == "ptrel" && yvariables[y] == "pt" && relativearray[y] == true) + ymatch = true; + matrix[x][y] = (xmatch && ymatch); + } + makePlots(nFiles, files, names, misalignment, values, phases, directory, matrix); } -void makePlots(Int_t nFiles,TString *files,TString *names,TString directory, - TString xvar,TString yvar) -{ - makePlots(nFiles,files,names,"",(Double_t*)0,(Double_t*)0,directory, - xvar,yvar); +void makePlots(Int_t nFiles, TString *files, TString *names, TString directory, TString xvar, TString yvar) { + makePlots(nFiles, files, names, "", (Double_t *)nullptr, (Double_t *)nullptr, directory, xvar, yvar); } -void makePlots(TString file,TString misalignment,Double_t *values,Double_t *phases,TString directory, - TString xvar,TString yvar) -{ - setupcolors(); - file.Remove(TString::kTrailing, ','); - int n = file.CountChar(',') + 1; - TString *files = new TString[n]; - TString *names = new TString[n]; - vector tempcolors = colors; - vector tempstyles = styles; - for (int i = 0; i < n; i++) - { - TString thisfile = nPart(i+1,file,","); - int numberofpipes = thisfile.CountChar('|'); - if (numberofpipes >= 0 && nPart(numberofpipes+1,thisfile,"|").IsDigit()) - { - if (numberofpipes >= 1 && nPart(numberofpipes,thisfile,"|").IsDigit()) - { - colors[i] = nPart(numberofpipes,thisfile,"|").Atoi(); - styles[i] = nPart(numberofpipes+1,thisfile,"|").Atoi(); - thisfile.Remove(thisfile.Length() - nPart(numberofpipes,thisfile,"|").Length() - nPart(numberofpipes+1,thisfile,"|").Length() - 2); - } - else - { - colors[i] = nPart(numberofpipes + 1,thisfile,"|").Atoi(); - thisfile.Remove(thisfile.Length() - nPart(numberofpipes+1,thisfile,"|").Length() - 2); - } - } - files[i] = nPart(1,thisfile,"=",true); - names[i] = nPart(2,thisfile,"=",false); +void makePlots(TString file, + TString misalignment, + Double_t *values, + Double_t *phases, + TString directory, + TString xvar, + TString yvar) { + setupcolors(); + file.Remove(TString::kTrailing, ','); + unsigned int n = file.CountChar(',') + 1; + TString *files = new TString[n]; + TString *names = new TString[n]; + vector tempcolors = colors; + vector tempstyles = styles; + for (unsigned int i = 0; i < n; i++) { + TString thisfile = nPart(i + 1, file, ","); + int numberofpipes = thisfile.CountChar('|'); + if (numberofpipes >= 0 && nPart(numberofpipes + 1, thisfile, "|").IsDigit()) { + if (numberofpipes >= 1 && nPart(numberofpipes, thisfile, "|").IsDigit()) { + colors[i] = nPart(numberofpipes, thisfile, "|").Atoi(); + styles[i] = nPart(numberofpipes + 1, thisfile, "|").Atoi(); + thisfile.Remove(thisfile.Length() - nPart(numberofpipes, thisfile, "|").Length() - + nPart(numberofpipes + 1, thisfile, "|").Length() - 2); + } else { + colors[i] = nPart(numberofpipes + 1, thisfile, "|").Atoi(); + thisfile.Remove(thisfile.Length() - nPart(numberofpipes + 1, thisfile, "|").Length() - 2); + } } - if (n == 1 && names[0] == "") - names[0] = "scatterplot"; //With 1 file there's no legend, so this is only used in the filename of the scatterplots, if made - makePlots(n,files,names,misalignment,values,phases,directory,xvar,yvar); - delete[] files; - delete[] names; - colors = tempcolors; - styles = tempstyles; + files[i] = nPart(1, thisfile, "=", true); + names[i] = nPart(2, thisfile, "=", false); + } + if (n == 1 && names[0] == "") + names[0] = + "scatterplot"; //With 1 file there's no legend, so this is only used in the filename of the scatterplots, if made + makePlots(n, files, names, misalignment, values, phases, directory, xvar, yvar); + delete[] files; + delete[] names; + colors = tempcolors; + styles = tempstyles; } -void makePlots(TString file,TString directory,TString xvar,TString yvar) -{ - makePlots(file,"",(Double_t*)0,(Double_t*)0,directory,xvar,yvar); +void makePlots(TString file, TString directory, TString xvar, TString yvar) { + makePlots(file, "", (Double_t *)nullptr, (Double_t *)nullptr, directory, xvar, yvar); } //*************************** //functions to make all plots //*************************** -void makePlots(Int_t nFiles,TString *files,TString *names,TString misalignment,Double_t *values,Double_t *phases,TString directory) -{ - makePlots(nFiles,files,names,misalignment,values,phases,directory,"all","all"); +void makePlots(Int_t nFiles, + TString *files, + TString *names, + TString misalignment, + Double_t *values, + Double_t *phases, + TString directory) { + makePlots(nFiles, files, names, misalignment, values, phases, directory, "all", "all"); } -void makePlots(Int_t nFiles,TString *files,TString *names,TString directory) -{ - makePlots(nFiles,files,names,"",(Double_t*)0,(Double_t*)0,directory); +void makePlots(Int_t nFiles, TString *files, TString *names, TString directory) { + makePlots(nFiles, files, names, "", (Double_t *)nullptr, (Double_t *)nullptr, directory); } -void makePlots(TString file,TString misalignment,Double_t *values,Double_t *phases,TString directory) -{ - setupcolors(); - file.Remove(TString::kTrailing, ','); - int n = file.CountChar(',') + 1; - TString *files = new TString[n]; - TString *names = new TString[n]; - vector tempcolors = colors; - vector tempstyles = styles; - for (int i = 0; i < n; i++) - { - TString thisfile = nPart(i+1,file,","); - int numberofpipes = thisfile.CountChar('|'); - if (numberofpipes >= 0 && nPart(numberofpipes+1,thisfile,"|").IsDigit()) - { - if (numberofpipes >= 1 && nPart(numberofpipes,thisfile,"|").IsDigit()) - { - colors[i] = nPart(numberofpipes,thisfile,"|").Atoi(); - styles[i] = nPart(numberofpipes+1,thisfile,"|").Atoi(); - thisfile.Remove(thisfile.Length() - nPart(numberofpipes,thisfile,"|").Length() - nPart(numberofpipes+1,thisfile,"|").Length() - 2); - } - else - { - colors[i] = nPart(numberofpipes + 1,thisfile,"|").Atoi(); - thisfile.Remove(thisfile.Length() - nPart(numberofpipes+1,thisfile,"|").Length() - 2); - } - } - files[i] = nPart(1,thisfile,"=",true); - names[i] = nPart(2,thisfile,"=",false); +void makePlots(TString file, TString misalignment, Double_t *values, Double_t *phases, TString directory) { + setupcolors(); + file.Remove(TString::kTrailing, ','); + unsigned int n = file.CountChar(',') + 1; + TString *files = new TString[n]; + TString *names = new TString[n]; + vector tempcolors = colors; + vector tempstyles = styles; + for (unsigned int i = 0; i < n; i++) { + TString thisfile = nPart(i + 1, file, ","); + int numberofpipes = thisfile.CountChar('|'); + if (numberofpipes >= 0 && nPart(numberofpipes + 1, thisfile, "|").IsDigit()) { + if (numberofpipes >= 1 && nPart(numberofpipes, thisfile, "|").IsDigit()) { + colors[i] = nPart(numberofpipes, thisfile, "|").Atoi(); + styles[i] = nPart(numberofpipes + 1, thisfile, "|").Atoi(); + thisfile.Remove(thisfile.Length() - nPart(numberofpipes, thisfile, "|").Length() - + nPart(numberofpipes + 1, thisfile, "|").Length() - 2); + } else { + colors[i] = nPart(numberofpipes + 1, thisfile, "|").Atoi(); + thisfile.Remove(thisfile.Length() - nPart(numberofpipes + 1, thisfile, "|").Length() - 2); + } } - if (n == 1 && names[0] == "") - names[0] = "scatterplot"; //With 1 file there's no legend, so this is only used in the filename of the scatterplots, if made - makePlots(n,files,names,misalignment,values,phases,directory); - delete[] files; - delete[] names; - colors = tempcolors; - styles = tempstyles; + files[i] = nPart(1, thisfile, "=", true); + names[i] = nPart(2, thisfile, "=", false); + } + if (n == 1 && names[0] == "") + names[0] = + "scatterplot"; //With 1 file there's no legend, so this is only used in the filename of the scatterplots, if made + makePlots(n, files, names, misalignment, values, phases, directory); + delete[] files; + delete[] names; + colors = tempcolors; + styles = tempstyles; } -void makePlots(TString file,TString directory) -{ - makePlots(file,"",(Double_t*)0,(Double_t*)0,directory); +void makePlots(TString file, TString directory) { + makePlots(file, "", (Double_t *)nullptr, (Double_t *)nullptr, directory); } //============= //3. Axis Label //============= -TString fancyname(TString variable) -{ - if (variable == "pt") - return "p_{T}"; - else if (variable == "phi") - return "#phi"; - else if (variable == "eta") - return "#eta"; - else if (variable == "theta") - return "#theta"; - else if (variable == "qoverpt") - return "q/p_{T}"; - else if (variable == "runNumber") - return "run number"; - else if (variable == "dxy" || variable == "dz") - return variable.ReplaceAll("d","d_{").Append("}"); - else - return variable; +TString fancyname(TString variable) { + if (variable == "pt") + return "p_{T}"; + else if (variable == "phi") + return "#phi"; + else if (variable == "eta") + return "#eta"; + else if (variable == "theta") + return "#theta"; + else if (variable == "qoverpt") + return "q/p_{T}"; + else if (variable == "runNumber") + return "run number"; + else if (variable == "dxy" || variable == "dz") + return variable.ReplaceAll("d", "d_{").Append("}"); + else + return variable; } //this gives the units, to be put in the axis label -TString units(TString variable,Char_t axis) -{ - if (variable == "pt") - return "GeV"; - if (variable == "dxy" || variable == "dz") - { - if (axis == 'y') - return "#mum"; //in the tree, it's listed in centimeters, but in trackSplitPlot the value is divided by 1e4 - if (axis == 'x') - return "cm"; - } - if (variable == "qoverpt") - { - if (axis == 'y') - return "#times10^{-3}e/GeV"; //e/TeV is not particularly intuitive - if (axis == 'x') - return "e/GeV"; - } - if (axis == 'y' && (variable == "phi" || variable == "theta")) - return "mrad"; - return ""; +TString units(TString variable, Char_t axis) { + if (variable == "pt") + return "GeV"; + if (variable == "dxy" || variable == "dz") { + if (axis == 'y') + return "#mum"; //in the tree, it's listed in centimeters, but in trackSplitPlot the value is divided by 1e4 + if (axis == 'x') + return "cm"; + } + if (variable == "qoverpt") { + if (axis == 'y') + return "#times10^{-3}e/GeV"; //e/TeV is not particularly intuitive + if (axis == 'x') + return "e/GeV"; + } + if (axis == 'y' && (variable == "phi" || variable == "theta")) + return "mrad"; + return ""; } TString plainunits(TString variable, char axis) { - TString result = units(variable, axis); - result.ReplaceAll("#mu", "u"); - result.ReplaceAll("#times10^{-3}", "* 1e-3 "); - return result; + TString result = units(variable, axis); + result.ReplaceAll("#mu", "u"); + result.ReplaceAll("#times10^{-3}", "* 1e-3 "); + return result; } TString latexunits(TString variable, char axis) { - TString result = units(variable, axis); - result.ReplaceAll("#", "\\").ReplaceAll("{", "{{").ReplaceAll("}", "}}") - .ReplaceAll("\\mum", "$\\mu$m") - .ReplaceAll("\\times10^{{-3}}", "$\\times10^{{-3}}$"); - return result; + TString result = units(variable, axis); + result.ReplaceAll("#", "\\") + .ReplaceAll("{", "{{") + .ReplaceAll("}", "}}") + .ReplaceAll("\\mum", "$\\mu$m") + .ReplaceAll("\\times10^{{-3}}", "$\\times10^{{-3}}$"); + return result; } //this gives the full axis label, including units. It can handle any combination of relative, resolution, and pull. -TString axislabel(TString variable, Char_t axis, Bool_t relative, Bool_t resolution, Bool_t pull) -{ - if (axis == 'X' || axis == 'Y') - { - double min, max, bins; - axislimits(0,0,variable,tolower(axis),relative,pull,min,max,bins); +TString axislabel(TString variable, Char_t axis, Bool_t relative, Bool_t resolution, Bool_t pull) { + if (axis == 'X' || axis == 'Y') { + double min, max, bins; + axislimits(0, nullptr, variable, tolower(axis), relative, pull, min, max, bins); - if (variable.BeginsWith("nHits")) - return "fraction of tracks"; - if (variable == "runNumber") - return "number of tracks"; - - stringstream s; - s << "fraction of tracks / " << (max-min)/bins; - if (!pull && !relative) - { - TString varunits = units(variable, tolower(axis)); - if (varunits != "") - s << " " << varunits; - } - TString result = s.str(); - result.ReplaceAll(" #times","#times"); - return result; - } + if (variable.BeginsWith("nHits")) + return "fraction of tracks"; + if (variable == "runNumber") + return "number of tracks"; stringstream s; - if (resolution && axis == 'y') - s << "#sigma("; - if (axis == 'y') - s << "#Delta"; - s << fancyname(variable); - if (relative && axis == 'y') - { - s << " / "; - if (!pull) - s << "("; - s << fancyname(variable); - } - if (axis == 'y') - { - if (pull) - { - s << " / #delta(#Delta" << fancyname(variable); - if (relative) - s << " / " << fancyname(variable); - s << ")"; - } - else - { - if (!relative) - s << " / "; - s << "#sqrt{2}"; - if (relative) - s << ")"; - } + s << "fraction of tracks / " << (max - min) / bins; + if (!pull && !relative) { + TString varunits = units(variable, tolower(axis)); + if (varunits != "") + s << " " << varunits; } - if (resolution && axis == 'y') - s << ")"; - if (((!relative && !pull) || axis == 'x') && units(variable,axis) != "") - s << " (" << units(variable,axis) << ")"; TString result = s.str(); - result.ReplaceAll("#Deltaq/p_{T}","#Delta(q/p_{T})"); + result.ReplaceAll(" #times", "#times"); return result; + } + + stringstream s; + if (resolution && axis == 'y') + s << "#sigma("; + if (axis == 'y') + s << "#Delta"; + s << fancyname(variable); + if (relative && axis == 'y') { + s << " / "; + if (!pull) + s << "("; + s << fancyname(variable); + } + if (axis == 'y') { + if (pull) { + s << " / #delta(#Delta" << fancyname(variable); + if (relative) + s << " / " << fancyname(variable); + s << ")"; + } else { + if (!relative) + s << " / "; + s << "#sqrt{2}"; + if (relative) + s << ")"; + } + } + if (resolution && axis == 'y') + s << ")"; + if (((!relative && !pull) || axis == 'x') && units(variable, axis) != "") + s << " (" << units(variable, axis) << ")"; + TString result = s.str(); + result.ReplaceAll("#Deltaq/p_{T}", "#Delta(q/p_{T})"); + return result; } TString latexlabel(TString variable, Char_t axis, Bool_t relative, Bool_t resolution, Bool_t pull) { - TString result = axislabel(variable, axis, relative, resolution, pull); - result.ReplaceAll(" ("+units(variable, axis)+")", ""); - result.ReplaceAll("#", "\\").ReplaceAll("\\Delta", "\\Delta "); - return result; + TString result = axislabel(variable, axis, relative, resolution, pull); + result.ReplaceAll(" (" + units(variable, axis) + ")", ""); + result.ReplaceAll("#", "\\").ReplaceAll("\\Delta", "\\Delta "); + return result; } -void setAxisLabels(TH1 *p, PlotType type,TString xvar,TString yvar,Bool_t relative,Bool_t pull) -{ - if (type == Histogram) - p->SetXTitle(axislabel(yvar,'y',relative,false,pull)); - if (type == ScatterPlot || type == Profile || type == Resolution || type == OrgHistogram) - p->SetXTitle(axislabel(xvar,'x')); - - if (type == Histogram) - p->SetYTitle(axislabel(yvar,'Y',relative,false,pull)); - if (type == OrgHistogram) - p->SetYTitle(axislabel(xvar,'X',relative,false,pull)); - if (type == ScatterPlot || type == Profile) - p->SetYTitle(axislabel(yvar,'y',relative,false,pull)); - if (type == Resolution) - p->SetYTitle(axislabel(yvar,'y',relative,true,pull)); +void setAxisLabels(TH1 *p, PlotType type, TString xvar, TString yvar, Bool_t relative, Bool_t pull) { + if (type == Histogram) + p->SetXTitle(axislabel(yvar, 'y', relative, false, pull)); + if (type == ScatterPlot || type == Profile || type == Resolution || type == OrgHistogram) + p->SetXTitle(axislabel(xvar, 'x')); + + if (type == Histogram) + p->SetYTitle(axislabel(yvar, 'Y', relative, false, pull)); + if (type == OrgHistogram) + p->SetYTitle(axislabel(xvar, 'X', relative, false, pull)); + if (type == ScatterPlot || type == Profile) + p->SetYTitle(axislabel(yvar, 'y', relative, false, pull)); + if (type == Resolution) + p->SetYTitle(axislabel(yvar, 'y', relative, true, pull)); } -void setAxisLabels(TMultiGraph *p, PlotType type,TString xvar,TString yvar,Bool_t relative,Bool_t pull) -{ - if (type == Histogram) - p->GetXaxis()->SetTitle(axislabel(yvar,'y',relative,false,pull)); - if (type == ScatterPlot || type == Profile || type == Resolution || type == OrgHistogram) - p->GetXaxis()->SetTitle(axislabel(xvar,'x')); - - if (type == Histogram) - p->GetYaxis()->SetTitle(axislabel(yvar,'Y',relative,false,pull)); - if (type == OrgHistogram) - p->GetYaxis()->SetTitle(axislabel(xvar,'X',relative,false,pull)); - if (type == ScatterPlot || type == Profile) - p->GetYaxis()->SetTitle(axislabel(yvar,'y',relative,false,pull)); - if (type == Resolution) - p->GetYaxis()->SetTitle(axislabel(yvar,'y',relative,true,pull)); +void setAxisLabels(TMultiGraph *p, PlotType type, TString xvar, TString yvar, Bool_t relative, Bool_t pull) { + if (type == Histogram) + p->GetXaxis()->SetTitle(axislabel(yvar, 'y', relative, false, pull)); + if (type == ScatterPlot || type == Profile || type == Resolution || type == OrgHistogram) + p->GetXaxis()->SetTitle(axislabel(xvar, 'x')); + + if (type == Histogram) + p->GetYaxis()->SetTitle(axislabel(yvar, 'Y', relative, false, pull)); + if (type == OrgHistogram) + p->GetYaxis()->SetTitle(axislabel(xvar, 'X', relative, false, pull)); + if (type == ScatterPlot || type == Profile) + p->GetYaxis()->SetTitle(axislabel(yvar, 'y', relative, false, pull)); + if (type == Resolution) + p->GetYaxis()->SetTitle(axislabel(yvar, 'y', relative, true, pull)); } - -TString nPart(Int_t part,TString string,TString delimit,Bool_t removerest) -{ - if (part <= 0) return ""; - for (int i = 1; i < part; i++) //part-1 times - { - if (string.Index(delimit) < 0) return ""; - string.Replace(0,string.Index(delimit)+1,"",0); - } - if (string.Index(delimit) >= 0 && removerest) - string.Remove(string.Index(delimit)); - return string; +TString nPart(Int_t part, TString string, TString delimit, Bool_t removerest) { + if (part <= 0) + return ""; + for (int i = 1; i < part; i++) //part-1 times + { + if (string.Index(delimit) < 0) + return ""; + string.Replace(0, string.Index(delimit) + 1, "", 0); + } + if (string.Index(delimit) >= 0 && removerest) + string.Remove(string.Index(delimit)); + return string; } //============== //4. Axis Limits //============== +Double_t findStatistic( + Statistic what, Int_t nFiles, TString *files, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + Double_t x = 0, //if axis == 'x', var_org goes in x; if axis == 'y', Delta_var goes in x + rel = 1, //if relative, var_org goes in rel. x is divided by rel, so you get Delta_var/var_org + sigma1 = 1, //if pull, the error for split track 1 goes in sigma1 and the error for split track 2 goes in sigma2. + sigma2 = 1, //x is divided by sqrt(sigma1^2+sigma2^2). If !pull && axis == 'y', this divides by sqrt(2) + sigmaorg = 0; // because we want the error in one track. sigmaorg is used when relative && pull + Int_t xint = 0, + xint2 = 0; //xint is used for run number and nHits. xint2 is used for nHits because each event has 2 values. + + Int_t runNumber = 0; //this is used to make sure the run number is between minrun and maxrun + + if (axis == 'x') { + sigma1 = 1 / sqrt(2); //if axis == 'x' don't divide by sqrt(2) + sigma2 = 1 / sqrt(2); + } + + Double_t totallength = 0; + vector xvect; + Double_t result = 0; + if (what == Minimum) + result = 1e100; + if (what == Maximum) + result = -1e100; + + stringstream sx, srel, ssigma1, ssigma2, ssigmaorg; + + if (axis == 'y') + sx << "Delta_"; + sx << var; + if (axis == 'x' && var != "runNumber" && !var.BeginsWith("nHits")) + sx << "_org"; + if (axis == 'x' && var.BeginsWith("nHits")) + sx << "1_spl"; + TString variable = sx.str(), variable2 = variable; + variable2.ReplaceAll("1_spl", "2_spl"); + + TString relvariable = "1"; + if (relative) { + srel << var << "_org"; + relvariable = srel.str(); + } + + if (pull) { + ssigma1 << var << "1Err_spl"; + ssigma2 << var << "2Err_spl"; + } + TString sigma1variable = ssigma1.str(); + TString sigma2variable = ssigma2.str(); + + if (pull && relative) + ssigmaorg << var << "Err_org"; + TString sigmaorgvariable = ssigmaorg.str(); + + if (!relative && !pull && (variable == "Delta_dxy" || variable == "Delta_dz")) + rel = 1e-4; //it's in cm but we want um + if (!relative && !pull && (variable == "Delta_phi" || variable == "Delta_theta" || variable == "Delta_qoverpt")) + rel = 1e-3; //make the axis labels manageable + + for (Int_t j = 0; j < nFiles; j++) { + if (((var == "runNumber" && what != Maximum) ? findMax(files[j], "runNumber", 'x') < 2 : false) || + files[j] == "") //if it's MC data (run 1), the run number is meaningless + continue; + TFile *f = TFile::Open(files[j]); + TTree *tree = (TTree *)f->Get("cosmicValidation/splitterTree"); + if (tree == nullptr) + tree = (TTree *)f->Get("splitterTree"); + Int_t length = tree->GetEntries(); + + tree->SetBranchAddress("runNumber", &runNumber); + if (var == "runNumber") + tree->SetBranchAddress(variable, &xint); + else if (var.BeginsWith("nHits")) { + tree->SetBranchAddress(variable, &xint); + tree->SetBranchAddress(variable2, &xint2); + } else + tree->SetBranchAddress(variable, &x); -Double_t findStatistic(Statistic what,Int_t nFiles,TString *files,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - Double_t x = 0, //if axis == 'x', var_org goes in x; if axis == 'y', Delta_var goes in x - rel = 1, //if relative, var_org goes in rel. x is divided by rel, so you get Delta_var/var_org - sigma1 = 1, //if pull, the error for split track 1 goes in sigma1 and the error for split track 2 goes in sigma2. - sigma2 = 1, //x is divided by sqrt(sigma1^2+sigma2^2). If !pull && axis == 'y', this divides by sqrt(2) - sigmaorg = 0; // because we want the error in one track. sigmaorg is used when relative && pull - Int_t xint = 0, xint2 = 0; //xint is used for run number and nHits. xint2 is used for nHits because each event has 2 values. - - Int_t runNumber = 0; //this is used to make sure the run number is between minrun and maxrun - - if (axis == 'x') - { - sigma1 = 1/sqrt(2); //if axis == 'x' don't divide by sqrt(2) - sigma2 = 1/sqrt(2); - } - - Double_t totallength = 0; - vector xvect; - Double_t result = 0; - if (what == Minimum) result = 1e100; - if (what == Maximum) result = -1e100; - - stringstream sx,srel,ssigma1,ssigma2,ssigmaorg; - - if (axis == 'y') - sx << "Delta_"; - sx << var; - if (axis == 'x' && var != "runNumber" && !var.BeginsWith("nHits")) - sx << "_org"; - if (axis == 'x' && var.BeginsWith("nHits")) - sx << "1_spl"; - TString variable = sx.str(), - variable2 = variable; - variable2.ReplaceAll("1_spl","2_spl"); - - TString relvariable = "1"; if (relative) - { - srel << var << "_org"; - relvariable = srel.str(); + tree->SetBranchAddress(relvariable, &rel); + if (pull) { + tree->SetBranchAddress(sigma1variable, &sigma1); + tree->SetBranchAddress(sigma2variable, &sigma2); } - - if (pull) - { - ssigma1 << var << "1Err_spl"; - ssigma2 << var << "2Err_spl"; - } - TString sigma1variable = ssigma1.str(); - TString sigma2variable = ssigma2.str(); - - if (pull && relative) - ssigmaorg << var << "Err_org"; - TString sigmaorgvariable = ssigmaorg.str(); - - if (!relative && !pull && (variable == "Delta_dxy" || variable == "Delta_dz")) - rel = 1e-4; //it's in cm but we want um - if (!relative && !pull && (variable == "Delta_phi" || variable == "Delta_theta" || variable == "Delta_qoverpt")) - rel = 1e-3; //make the axis labels manageable - - for (Int_t j = 0; j < nFiles; j++) - { - if (((var == "runNumber" && what != Maximum) ? findMax(files[j],"runNumber",'x') < 2 : false) || files[j] == "") //if it's MC data (run 1), the run number is meaningless - continue; - TFile *f = TFile::Open(files[j]); - TTree *tree = (TTree*)f->Get("cosmicValidation/splitterTree"); - if (tree == 0) - tree = (TTree*)f->Get("splitterTree"); - Int_t length = tree->GetEntries(); - - tree->SetBranchAddress("runNumber",&runNumber); - if (var == "runNumber") - tree->SetBranchAddress(variable,&xint); - else if (var.BeginsWith("nHits")) - { - tree->SetBranchAddress(variable,&xint); - tree->SetBranchAddress(variable2,&xint2); - } - else - tree->SetBranchAddress(variable,&x); - - if (relative) - tree->SetBranchAddress(relvariable,&rel); - if (pull) - { - tree->SetBranchAddress(sigma1variable,&sigma1); - tree->SetBranchAddress(sigma2variable,&sigma2); - } - if (relative && pull) - tree->SetBranchAddress(sigmaorgvariable,&sigmaorg); - - for (Int_t i = 0; iGetEntry(i); - if (var == "runNumber" || var.BeginsWith("nHits")) - x = xint; - if (var == "runNumber") - runNumber = x; - if (var == "phi" && x >= pi) - x -= 2*pi; - if (var == "phi" && x <= -pi) - x += 2*pi; - if ((runNumber < minrun && runNumber > 1) || (runNumber > maxrun && maxrun > 0)) continue; - - totallength++; - - Double_t error; - if (relative && pull) - error = sqrt((sigma1/rel)*(sigma1/rel) + (sigma2/rel)*(sigma2/rel) + (sigmaorg*x/(rel*rel))*(sigmaorg*x/(rel*rel))); - else - error = sqrt(sigma1 * sigma1 + sigma2 * sigma2); // = 1 if axis == 'x' && !pull - // = sqrt(2) if axis == 'y' && !pull, so that you get the error in 1 track - // when you divide by it - x /= (rel * error); - if (!std::isfinite(x)) //e.g. in data with no pixels, the error occasionally comes out to be NaN - continue; //Filling a histogram with NaN is irrelevant, but here it would cause the whole result to be NaN - - if (what == Minimum && x < result) - result = x; - if (what == Maximum && x > result) - result = x; - xvect.push_back(x); - if (var.BeginsWith("nHits")) - { - x = xint2; - if (what == Minimum && x < result) - result = x; - if (what == Maximum && x > result) - result = x; - xvect.push_back(x); - } - } - delete f; //automatically closes the file + if (relative && pull) + tree->SetBranchAddress(sigmaorgvariable, &sigmaorg); + + for (Int_t i = 0; i < length; i++) { + tree->GetEntry(i); + if (var == "runNumber" || var.BeginsWith("nHits")) + x = xint; + if (var == "runNumber") + runNumber = x; + if (var == "phi" && x >= pi) + x -= 2 * pi; + if (var == "phi" && x <= -pi) + x += 2 * pi; + if ((runNumber < minrun && runNumber > 1) || (runNumber > maxrun && maxrun > 0)) + continue; + + totallength++; + + Double_t error; + if (relative && pull) + error = sqrt((sigma1 / rel) * (sigma1 / rel) + (sigma2 / rel) * (sigma2 / rel) + + (sigmaorg * x / (rel * rel)) * (sigmaorg * x / (rel * rel))); + else + error = sqrt(sigma1 * sigma1 + sigma2 * sigma2); // = 1 if axis == 'x' && !pull + // = sqrt(2) if axis == 'y' && !pull, so that you get the error in 1 track + // when you divide by it + x /= (rel * error); + if (!std::isfinite(x)) //e.g. in data with no pixels, the error occasionally comes out to be NaN + continue; //Filling a histogram with NaN is irrelevant, but here it would cause the whole result to be NaN + + if (what == Minimum && x < result) + result = x; + if (what == Maximum && x > result) + result = x; + xvect.push_back(x); + if (var.BeginsWith("nHits")) { + x = xint2; + if (what == Minimum && x < result) + result = x; + if (what == Maximum && x > result) + result = x; + xvect.push_back(x); + } } + delete f; //automatically closes the file + } - if (what == Minimum || what == Maximum) - return result; - - sort(xvect.begin(), xvect.end()); - - for (unsigned int i = (unsigned int)(xvect.size()*(1-outliercut)/2); i <= (unsigned int)(xvect.size()*(1+outliercut)/2 + .999); i++, totallength++) - result += xvect[i]; - - result /= totallength; - - if (what == RMS) - { - double average = result; - result = 0; - for (unsigned int i = (unsigned int)(xvect.size()*(1-outliercut)/2); i <= (unsigned int)(xvect.size()*(1+outliercut)/2 + .999); i++) - result += (x - average) * (x - average); - result = sqrt(result / (totallength - 1)); - } + if (what == Minimum || what == Maximum) return result; -} -Double_t findAverage(Int_t nFiles,TString *files,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(Average,nFiles,files,var,axis,relative,pull); + sort(xvect.begin(), xvect.end()); + + for (unsigned int i = (unsigned int)(xvect.size() * (1 - outliercut) / 2); + i <= (unsigned int)(xvect.size() * (1 + outliercut) / 2 + .999); + i++, totallength++) + result += xvect[i]; + + result /= totallength; + + if (what == RMS) { + double average = result; + result = 0; + for (unsigned int i = (unsigned int)(xvect.size() * (1 - outliercut) / 2); + i <= (unsigned int)(xvect.size() * (1 + outliercut) / 2 + .999); + i++) + result += (x - average) * (x - average); + result = sqrt(result / (totallength - 1)); + } + return result; } -Double_t findMin(Int_t nFiles,TString *files,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(Minimum,nFiles,files,var,axis,relative,pull); +Double_t findAverage(Int_t nFiles, TString *files, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(Average, nFiles, files, var, axis, relative, pull); } -Double_t findMax(Int_t nFiles,TString *files,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(Maximum,nFiles,files,var,axis,relative,pull); +Double_t findMin(Int_t nFiles, TString *files, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(Minimum, nFiles, files, var, axis, relative, pull); } -Double_t findRMS(Int_t nFiles,TString *files,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(RMS,nFiles,files,var,axis,relative,pull); +Double_t findMax(Int_t nFiles, TString *files, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(Maximum, nFiles, files, var, axis, relative, pull); } +Double_t findRMS(Int_t nFiles, TString *files, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(RMS, nFiles, files, var, axis, relative, pull); +} //These functions are for 1 file -Double_t findStatistic(Statistic what,TString file,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(what,1,&file,var,axis,relative,pull); +Double_t findStatistic(Statistic what, TString file, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(what, 1, &file, var, axis, relative, pull); } -Double_t findAverage(TString file,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(Average,file,var,axis,relative,pull); +Double_t findAverage(TString file, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(Average, file, var, axis, relative, pull); } -Double_t findMin(TString file,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(Minimum,file,var,axis,relative,pull); +Double_t findMin(TString file, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(Minimum, file, var, axis, relative, pull); } -Double_t findMax(TString file,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(Maximum,file,var,axis,relative,pull); +Double_t findMax(TString file, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(Maximum, file, var, axis, relative, pull); } -Double_t findRMS(TString file,TString var,Char_t axis,Bool_t relative,Bool_t pull) -{ - return findStatistic(RMS,file,var,axis,relative,pull); +Double_t findRMS(TString file, TString var, Char_t axis, Bool_t relative, Bool_t pull) { + return findStatistic(RMS, file, var, axis, relative, pull); } - - - //This puts the axis limits that should be used for trackSplitPlot in min and max. //Default axis limits are defined for pt, qoverpt, dxy, dz, theta, eta, and phi. //For run number and nHits, the minimum and maximum are used. //For any other variable, average +/- 5*rms are used. //To use this instead of the default values, just comment out the part that says [else] if (var == "?") {min = ?; max = ?;} -void axislimits(Int_t nFiles,TString *files,TString var,Char_t axis,Bool_t relative,Bool_t pull,Double_t &min,Double_t &max,Double_t &bins) -{ - bool pixel = subdetector.Contains("PIX"); - if (axis == 'x') - { - if (var == "pt") - { - min = 5; - max = 100; - bins = 38; - } - else if (var == "qoverpt") - { - min = -.35; - max = .35; - bins = 35; - } - else if (var == "dxy") - { - min = -100; - max = 100; - if (pixel) - { - min = -10; - max = 10; - } - bins = 20; - } - else if (var == "dz") - { - min = -250; - max = 250; - if (pixel) - { - min = -25; - max = 25; - } - bins = 25; - } - else if (var == "theta") - { - min = .5; - max = 2.5; - bins = 40; - } - else if (var == "eta") - { - min = -1.2; - max = 1.2; - bins = 40; - } - else if (var == "phi") - { - min = -3; - max = 0; - bins = 30; - } - else if (var == "runNumber" || var.BeginsWith("nHits")) - { - min = findMin(nFiles,files,var,'x') - .5; - max = findMax(nFiles,files,var,'x') + .5; - bins = max-min; - } - else - { - cout << "No x axis limits for " << var << ". Using average +/- 5*rms" << endl; - Double_t average = findAverage(nFiles,files,var,'x'); - Double_t rms = findRMS (nFiles,files,var,'x'); - max = TMath::Min(average + 5 * rms,findMax(nFiles,files,var,'x')); - min = TMath::Max(average - 5 * rms,findMin(nFiles,files,var,'x')); - bins = 50; - } +void axislimits(Int_t nFiles, + TString *files, + TString var, + Char_t axis, + Bool_t relative, + Bool_t pull, + Double_t &min, + Double_t &max, + Double_t &bins) { + bool pixel = subdetector.Contains("PIX"); + if (axis == 'x') { + if (var == "pt") { + min = 5; + max = 100; + bins = 38; + } else if (var == "qoverpt") { + min = -.35; + max = .35; + bins = 35; + } else if (var == "dxy") { + min = -100; + max = 100; + if (pixel) { + min = -10; + max = 10; + } + bins = 20; + } else if (var == "dz") { + min = -250; + max = 250; + if (pixel) { + min = -25; + max = 25; + } + bins = 25; + } else if (var == "theta") { + min = .5; + max = 2.5; + bins = 40; + } else if (var == "eta") { + min = -1.2; + max = 1.2; + bins = 40; + } else if (var == "phi") { + min = -3; + max = 0; + bins = 30; + } else if (var == "runNumber" || var.BeginsWith("nHits")) { + min = findMin(nFiles, files, var, 'x') - .5; + max = findMax(nFiles, files, var, 'x') + .5; + bins = max - min; + } else { + cout << "No x axis limits for " << var << ". Using average +/- 5*rms" << endl; + Double_t average = findAverage(nFiles, files, var, 'x'); + Double_t rms = findRMS(nFiles, files, var, 'x'); + max = TMath::Min(average + 5 * rms, findMax(nFiles, files, var, 'x')); + min = TMath::Max(average - 5 * rms, findMin(nFiles, files, var, 'x')); + bins = 50; } - if (axis == 'y') - { - if (pull) - { - min = -5; - max = 5; - bins = 40; - } - else if (var == "pt" && relative) - { - min = -.06; - max = .06; - bins = 30; - } - else if (var == "pt" && !relative) - { - min = -.8; - max = .8; - bins = 40; - } - else if (var == "qoverpt") - { - min = -2.5; - max = 2.5; - bins = 50; - } - else if (var == "dxy") - { - min = -1250; - max = 1250; - if (pixel) - { - min = -125; - max = 125; - } - bins = 50; - } - else if (var == "dz") - { - min = -2000; - max = 2000; - if (pixel) - { - min = -200; - max = 200; - } - bins = 40; - } - else if (var == "theta") - { - min = -10; - max = 10; - if (pixel) - { - min = -5; - max = 5; - } - bins = 50; - } - else if (var == "eta") - { - min = -.007; - max = .007; - if (pixel) - { - min = -.003; - max = .003; - } - bins = 30; - } - else if (var == "phi") - { - min = -2; - max = 2; - bins = 40; - } - else - { - cout << "No y axis limits for " << var << ". Using average +/- 5 * rms." << endl; - Double_t average = 0 /*findAverage(nFiles,files,var,'y',relative,pull)*/; - Double_t rms = findRMS (nFiles,files,var,'y',relative,pull); - min = TMath::Max(TMath::Max(-TMath::Abs(average) - 5*rms, - findMin(nFiles,files,var,'y',relative,pull)), - -findMax(nFiles,files,var,'y',relative,pull)); - max = -min; - bins = 50; - } + } + if (axis == 'y') { + if (pull) { + min = -5; + max = 5; + bins = 40; + } else if (var == "pt" && relative) { + min = -.06; + max = .06; + bins = 30; + } else if (var == "pt" && !relative) { + min = -.8; + max = .8; + bins = 40; + } else if (var == "qoverpt") { + min = -2.5; + max = 2.5; + bins = 50; + } else if (var == "dxy") { + min = -1250; + max = 1250; + if (pixel) { + min = -125; + max = 125; + } + bins = 50; + } else if (var == "dz") { + min = -2000; + max = 2000; + if (pixel) { + min = -200; + max = 200; + } + bins = 40; + } else if (var == "theta") { + min = -10; + max = 10; + if (pixel) { + min = -5; + max = 5; + } + bins = 50; + } else if (var == "eta") { + min = -.007; + max = .007; + if (pixel) { + min = -.003; + max = .003; + } + bins = 30; + } else if (var == "phi") { + min = -2; + max = 2; + bins = 40; + } else { + cout << "No y axis limits for " << var << ". Using average +/- 5 * rms." << endl; + Double_t average = 0 /*findAverage(nFiles,files,var,'y',relative,pull)*/; + Double_t rms = findRMS(nFiles, files, var, 'y', relative, pull); + min = TMath::Max(TMath::Max(-TMath::Abs(average) - 5 * rms, findMin(nFiles, files, var, 'y', relative, pull)), + -findMax(nFiles, files, var, 'y', relative, pull)); + max = -min; + bins = 50; } + } } //=============== //5. Place Legend //=============== -Double_t placeLegend(TLegend *l, Double_t width, Double_t height, Double_t x1min, Double_t y1min, Double_t x2max, Double_t y2max) -{ - for (int i = legendGrid; i >= 0; i--) - { - for (int j = legendGrid; j >= 0; j--) - { - Double_t x1 = x1min * (1-(double)i/legendGrid) + (x2max - width) * (double)i/legendGrid - margin*width; - Double_t y1 = y1min * (1-(double)j/legendGrid) + (y2max - height) * (double)j/legendGrid - margin*height; - Double_t x2 = x1 + (1+2*margin) * width; - Double_t y2 = y1 + (1+2*margin) * height; - if (fitsHere(l,x1,y1,x2,y2)) - { - x1 += margin*width; - y1 += margin*height; - x2 -= margin*width; - y2 -= margin*height; - l->SetX1(x1); - l->SetY1(y1); - l->SetX2(x2); - l->SetY2(y2); - return y2max; - } - } +Double_t placeLegend( + TLegend *l, Double_t width, Double_t height, Double_t x1min, Double_t y1min, Double_t x2max, Double_t y2max) { + for (int i = legendGrid; i >= 0; i--) { + for (int j = legendGrid; j >= 0; j--) { + Double_t x1 = x1min * (1 - (double)i / legendGrid) + (x2max - width) * (double)i / legendGrid - margin * width; + Double_t y1 = y1min * (1 - (double)j / legendGrid) + (y2max - height) * (double)j / legendGrid - margin * height; + Double_t x2 = x1 + (1 + 2 * margin) * width; + Double_t y2 = y1 + (1 + 2 * margin) * height; + if (fitsHere(l, x1, y1, x2, y2)) { + x1 += margin * width; + y1 += margin * height; + x2 -= margin * width; + y2 -= margin * height; + l->SetX1(x1); + l->SetY1(y1); + l->SetX2(x2); + l->SetY2(y2); + return y2max; + } } - Double_t newy2max = y2max + increaseby * (y2max-y1min); - Double_t newheight = height * (newy2max - y1min) / (y2max - y1min); - return placeLegend(l,width,newheight,x1min,y1min,x2max,newy2max); + } + Double_t newy2max = y2max + increaseby * (y2max - y1min); + Double_t newheight = height * (newy2max - y1min) / (y2max - y1min); + return placeLegend(l, width, newheight, x1min, y1min, x2max, newy2max); } -Bool_t fitsHere(TLegend *l,Double_t x1, Double_t y1, Double_t x2, Double_t y2) -{ - Bool_t fits = true; - TList *list = l->GetListOfPrimitives(); - for (Int_t k = 0; list->At(k) != 0 && fits; k++) +Bool_t fitsHere(TLegend *l, Double_t x1, Double_t y1, Double_t x2, Double_t y2) { + Bool_t fits = true; + TList *list = l->GetListOfPrimitives(); + for (Int_t k = 0; list->At(k) != nullptr && fits; k++) { + TObject *obj = ((TLegendEntry *)(list->At(k)))->GetObject(); + if (obj == nullptr) + continue; + TClass *cl = obj->IsA(); + + //Histogram, drawn as a histogram + if (cl->InheritsFrom("TH1") && !cl->InheritsFrom("TH2") && !cl->InheritsFrom("TH3") && cl != TProfile::Class() && + ((TH1 *)obj)->GetMarkerColor() == kWhite) { + Int_t where = 0; + TH1 *h = (TH1 *)obj; + for (Int_t i = 1; i <= h->GetNbinsX() && fits; i++) { + if (h->GetBinLowEdge(i) + h->GetBinWidth(i) < x1) + continue; //to the left of the legend + if (h->GetBinLowEdge(i) > x2) + continue; //to the right of the legend + if (h->GetBinContent(i) > y1 && h->GetBinContent(i) < y2) + fits = false; //inside the legend + if (h->GetBinContent(i) < y1) { + if (where == 0) + where = -1; //below the legend + if (where == 1) + fits = false; //a previous bin was above it so there's a vertical line through it + } + if (h->GetBinContent(i) > y2) { + if (where == 0) + where = 1; //above the legend + if (where == -1) + fits = false; //a previous bin was below it so there's a vertical line through it + } + } + continue; + } + //Histogram, drawn with Draw("P") + else if (cl->InheritsFrom("TH1") && !cl->InheritsFrom("TH2") && !cl->InheritsFrom("TH3") && cl != TProfile::Class()) + //Probably TProfile would be the same but I haven't tested it { - TObject *obj = ((TLegendEntry*)(list->At(k)))->GetObject(); - if (obj == 0) continue; - TClass *cl = obj->IsA(); - - //Histogram, drawn as a histogram - if (cl->InheritsFrom("TH1") && !cl->InheritsFrom("TH2") && !cl->InheritsFrom("TH3") - && cl != TProfile::Class() && ((TH1*)obj)->GetMarkerColor() == kWhite) - { - Int_t where = 0; - TH1 *h = (TH1*)obj; - for (Int_t i = 1; i <= h->GetNbinsX() && fits; i++) - { - if (h->GetBinLowEdge(i) + h->GetBinWidth(i) < x1) continue; //to the left of the legend - if (h->GetBinLowEdge(i) > x2) continue; //to the right of the legend - if (h->GetBinContent(i) > y1 && h->GetBinContent(i) < y2) fits = false; //inside the legend - if (h->GetBinContent(i) < y1) - { - if (where == 0) where = -1; //below the legend - if (where == 1) fits = false; //a previous bin was above it so there's a vertical line through it - } - if (h->GetBinContent(i) > y2) - { - if (where == 0) where = 1; //above the legend - if (where == -1) fits = false; //a previous bin was below it so there's a vertical line through it - } - } - continue; - } - //Histogram, drawn with Draw("P") - else if (cl->InheritsFrom("TH1") && !cl->InheritsFrom("TH2") && !cl->InheritsFrom("TH3") - && cl != TProfile::Class()) - //Probably TProfile would be the same but I haven't tested it - { - TH1 *h = (TH1*)obj; - for (Int_t i = 1; i <= h->GetNbinsX() && fits; i++) - { - if (h->GetBinLowEdge(i) + h->GetBinWidth(i)/2 < x1) continue; - if (h->GetBinLowEdge(i) > x2) continue; - if (h->GetBinContent(i) > y1 && h->GetBinContent(i) < y2) fits = false; - if (h->GetBinContent(i) + h->GetBinError(i) > y2 && h->GetBinContent(i) - h->GetBinError(i) < y2) fits = false; - if (h->GetBinContent(i) + h->GetBinError(i) > y1 && h->GetBinContent(i) - h->GetBinError(i) < y1) fits = false; - } - } - else if (cl->InheritsFrom("TF1") && !cl->InheritsFrom("TF2")) - { - TF1 *f = (TF1*)obj; - Double_t max = f->GetMaximum(x1,x2); - Double_t min = f->GetMinimum(x1,x2); - if (min < y2 && max > y1) fits = false; - } - // else if (cl->InheritsFrom(...... add more objects here - else - { - cout << "Don't know how to place the legend around objects of type " << obj->ClassName() << "." << endl - << "Add this class into fitsHere() if you want it to work properly." << endl - << "The legend will still be placed around any other objects." << endl; - } + TH1 *h = (TH1 *)obj; + for (Int_t i = 1; i <= h->GetNbinsX() && fits; i++) { + if (h->GetBinLowEdge(i) + h->GetBinWidth(i) / 2 < x1) + continue; + if (h->GetBinLowEdge(i) > x2) + continue; + if (h->GetBinContent(i) > y1 && h->GetBinContent(i) < y2) + fits = false; + if (h->GetBinContent(i) + h->GetBinError(i) > y2 && h->GetBinContent(i) - h->GetBinError(i) < y2) + fits = false; + if (h->GetBinContent(i) + h->GetBinError(i) > y1 && h->GetBinContent(i) - h->GetBinError(i) < y1) + fits = false; + } + } else if (cl->InheritsFrom("TF1") && !cl->InheritsFrom("TF2")) { + TF1 *f = (TF1 *)obj; + Double_t max = f->GetMaximum(x1, x2); + Double_t min = f->GetMinimum(x1, x2); + if (min < y2 && max > y1) + fits = false; + } + // else if (cl->InheritsFrom(...... add more objects here + else { + cout << "Don't know how to place the legend around objects of type " << obj->ClassName() << "." << endl + << "Add this class into fitsHere() if you want it to work properly." << endl + << "The legend will still be placed around any other objects." << endl; } - return fits; + } + return fits; } diff --git a/Alignment/OfflineValidation/macros/trackSplitPlot.h b/Alignment/OfflineValidation/macros/trackSplitPlot.h index f861dcfd3b8b7..0f2d5d4b17972 100644 --- a/Alignment/OfflineValidation/macros/trackSplitPlot.h +++ b/Alignment/OfflineValidation/macros/trackSplitPlot.h @@ -34,8 +34,8 @@ enum PlotType { ScatterPlot, Profile, Histogram, OrgHistogram, Resolution }; enum Statistic { Minimum, Maximum, Average, RMS }; const Double_t pi = TMath::Pi(); -vector colors; -vector styles; +std::vector colors; +std::vector styles; bool colorsset = false; Int_t minrun = -1; Int_t maxrun = -1; @@ -67,7 +67,7 @@ Table Of Contents #include "trackSplitPlot.h" -ofstream devnull("/dev/null"); +std::ofstream devnull("/dev/null"); template T identity(T t) { return t; @@ -86,7 +86,7 @@ TCanvas *trackSplitPlot(Int_t nFiles, Bool_t resolution = false, Bool_t pull = false, TString saveas = "", - ostream &summaryfile = devnull); + std::ostream &summaryfile = devnull); TCanvas *trackSplitPlot(Int_t nFiles, TString *files, TString *names, @@ -94,7 +94,7 @@ TCanvas *trackSplitPlot(Int_t nFiles, Bool_t relative = false, Bool_t pull = false, TString saveas = "", - ostream &summaryfile = devnull); + std::ostream &summaryfile = devnull); TCanvas *trackSplitPlot(TString file, TString xvar, TString yvar, @@ -103,13 +103,13 @@ TCanvas *trackSplitPlot(TString file, Bool_t resolution = false, Bool_t pull = false, TString saveas = "", - ostream &summaryfile = devnull); + std::ostream &summaryfile = devnull); TCanvas *trackSplitPlot(TString file, TString var, Bool_t relative = false, Bool_t pull = false, TString saveas = "", - ostream &summaryfile = devnull); + std::ostream &summaryfile = devnull); void placeholder(TString saveas = "", Bool_t wide = false); void saveplot(TCanvas *c1, TString saveas); void deleteCanvas(TObject *canvas); diff --git a/Alignment/OfflineValidation/plugins/ShortenedTrackValidation.cc b/Alignment/OfflineValidation/plugins/ShortenedTrackValidation.cc new file mode 100644 index 0000000000000..d606dd6f2704d --- /dev/null +++ b/Alignment/OfflineValidation/plugins/ShortenedTrackValidation.cc @@ -0,0 +1,600 @@ +// -*- C++ -*- +// +// Package: Alignment/OfflineValidation +// Class: ShortenedTrackValidation +// +/* + *\class ShortenedTrackValidation ShortenedTrackValidation.cc Alignment/OfflineValidation/plugins/ShortenedTrackValidation.cc + + Description: This module is meant to monitor the track pT resolution using the amputated tracks method, by comparing the performance using different alignments. + + Implementation: The implemenation takes advantage of the existing implementation in the DQM/TrackingMonitorSource. + +*/ +// +// Original Author: Marco Musich +// Created: Fri, 05 Jan 2023 11:41:00 GMT +// +// + +// ROOT includes files +#include "TMath.h" +#include "TFile.h" +#include "TH1D.h" +#include "TH1I.h" +#include "TH2D.h" +#include "TProfile.h" +#include "TLorentzVector.h" + +// standard includes +#include + +// user includes +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/SiStripDetId/interface/SiStripDetId.h" +#include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h" +#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h" +#include "DataFormats/TrackerRecHit2D/interface/SiTrackerMultiRecHit.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/transform.h" // for edm::vector_transform + +#define CREATE_HIST_1D(varname, nbins, first, last, fs) fs.make(#varname, #varname, nbins, first, last) + +#define CREATE_HIST_2D(varname, nbins, first, last, fs) \ + fs.make(#varname, #varname, nbins, first, last, nbins, first, last) + +const int kBPIX = PixelSubdetector::PixelBarrel; +const int kFPIX = PixelSubdetector::PixelEndcap; + +class ShortenedTrackValidation : public edm::one::EDAnalyzer { + class trackingMon { + public: + trackingMon() {} + ~trackingMon() = default; + + void book(const TFileDirectory &fs) { + h_chi2ndof = CREATE_HIST_1D(h_chi2ndof, 100, 0.0, 10.0, fs); + h_trkQuality = CREATE_HIST_1D(h_trkQuality, 6, -1, 5, fs); + h_trkAlgo = CREATE_HIST_1D(h_trkAlgo, reco::TrackBase::algoSize, 0.0, double(reco::TrackBase::algoSize), fs); + h_trkOriAlgo = + CREATE_HIST_1D(h_trkOriAlgo, reco::TrackBase::algoSize, 0.0, double(reco::TrackBase::algoSize), fs); + h_P = CREATE_HIST_1D(h_P, 100, 0.0, 200.0, fs); + h_Pt = CREATE_HIST_1D(h_Pt, 100, 0.0, 100.0, fs); + h_nHit = CREATE_HIST_1D(h_nHit, 50, -0.5, 49.5, fs); + h_nHit2D = CREATE_HIST_1D(h_nHit2D, 20, -0.5, 19.5, fs); + h_Charge = CREATE_HIST_1D(h_Charge, 3, -1.5, 1.5, fs); + h_QoverP = CREATE_HIST_1D(h_QoverP, 100, -1.0, 1.0, fs); + h_QoverPZoom = CREATE_HIST_1D(h_QoverPZoom, 100, -0.1, 0.1, fs); + h_Eta = CREATE_HIST_1D(h_Eta, 100, -3., 3., fs); + h_Phi = CREATE_HIST_1D(h_Phi, 100, -M_PI, M_PI, fs); + h_vx = CREATE_HIST_1D(h_vx, 100, -0.5, 0.5, fs); + h_vy = CREATE_HIST_1D(h_vy, 100, -0.5, 0.5, fs); + h_vz = CREATE_HIST_1D(h_vz, 100, -20.0, 20.0, fs); + h_d0 = CREATE_HIST_1D(h_d0, 100, -0.5, 0.5, fs); + h_dz = CREATE_HIST_1D(h_dz, 100, -20.0, 20.0, fs); + h_dxy = CREATE_HIST_1D(h_dxy, 100, -0.5, 0.5, fs); + h_nhpxb = CREATE_HIST_1D(h_nhpxb, 10, -0.5, 9.5, fs); + h_nhpxe = CREATE_HIST_1D(h_nhpxe, 10, -0.5, 9.5, fs); + h_nhTIB = CREATE_HIST_1D(h_nhTIB, 20, -0.5, 19.5, fs); + h_nhTID = CREATE_HIST_1D(h_nhTID, 20, -0.5, 19.5, fs); + h_nhTOB = CREATE_HIST_1D(h_nhTOB, 20, -0.5, 19.5, fs); + h_nhTEC = CREATE_HIST_1D(h_nhTEC, 20, -0.5, 19.5, fs); + h_dxyBS = CREATE_HIST_1D(h_dxyBS, 100, -0.05, 0.05, fs); + h_d0BS = CREATE_HIST_1D(h_d0BS, 100, -0.05, 0.05, fs); + h_dzBS = CREATE_HIST_1D(h_dzBS, 100, -20.0, 20., fs); + h_dxyPV = CREATE_HIST_1D(h_dxyPV, 100, -0.05, 0.05, fs); + h_d0PV = CREATE_HIST_1D(h_d0PV, 100, -0.05, 0.05, fs); + h_dzPV = CREATE_HIST_1D(h_dzPV, 100, -0.05, 0.05, fs); + + edm::LogInfo("trackingMonitoring") << "done booking"; + } + + //____________________________________________________________ + int trackQual(const reco::Track &track) { + int myquality = -99; + if (track.quality(reco::TrackBase::undefQuality)) + myquality = -1; + if (track.quality(reco::TrackBase::loose)) + myquality = 0; + if (track.quality(reco::TrackBase::tight)) + myquality = 1; + if (track.quality(reco::TrackBase::highPurity)) + myquality = 2; + if (track.quality(reco::TrackBase::goodIterative)) + myquality = 3; + + return myquality; + } + + //____________________________________________________________ + static bool isHit2D(const TrackingRecHit &hit) { + if (hit.dimension() < 2) { + return false; // some (muon...) stuff really has RecHit1D + } else { + const DetId detId(hit.geographicalId()); + if (detId.det() == DetId::Tracker) { + if (detId.subdetId() == kBPIX || detId.subdetId() == kFPIX) { + return true; // pixel is always 2D + } else { // should be SiStrip now + if (dynamic_cast(&hit)) + return false; // normal hit + else if (dynamic_cast(&hit)) + return true; // matched is 2D + else if (dynamic_cast(&hit)) + return false; // crazy hit... + else { + edm::LogError("UnknownType") << "@SUB=CalibrationTrackSelector::isHit2D" + << "Tracker hit not in pixel and neither SiStripRecHit2D nor " + << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D."; + return false; + } + } + } else { // not tracker?? + edm::LogWarning("DetectorMismatch") << "@SUB=CalibrationTrackSelector::isHit2D" + << "Hit not in tracker with 'official' dimension >=2."; + return true; // dimension() >= 2 so accept that... + } + } + // never reached... + } + + //____________________________________________________________ + unsigned int count2DHits(const reco::Track &track) { + unsigned int nHit2D = 0; + for (auto iHit = track.recHitsBegin(); iHit != track.recHitsEnd(); ++iHit) { + if (isHit2D(**iHit)) { + ++nHit2D; + } + } + return nHit2D; + } + + //____________________________________________________________ + void fill(const reco::Track &track, const reco::BeamSpot &beamSpot, const reco::Vertex &pvtx) { + h_chi2ndof->Fill(track.normalizedChi2()); + h_trkQuality->Fill(trackQual(track)); + h_trkAlgo->Fill(static_cast(track.algo())); + h_trkOriAlgo->Fill(static_cast(track.originalAlgo())); + h_P->Fill(track.p()); + h_Pt->Fill(track.pt()); + h_nHit->Fill(track.numberOfValidHits()); + h_nHit2D->Fill(count2DHits(track)); + h_Charge->Fill(track.charge()); + h_QoverP->Fill(track.qoverp()); + h_QoverPZoom->Fill(track.qoverp()); + h_Eta->Fill(track.eta()); + h_Phi->Fill(track.phi()); + h_vx->Fill(track.vx()); + h_vy->Fill(track.vy()); + h_vz->Fill(track.vz()); + h_d0->Fill(track.d0()); + h_dz->Fill(track.dz()); + h_dxy->Fill(track.dxy()); + h_nhpxb->Fill(track.hitPattern().numberOfValidPixelBarrelHits()); + h_nhpxe->Fill(track.hitPattern().numberOfValidPixelEndcapHits()); + h_nhTIB->Fill(track.hitPattern().numberOfValidStripTIBHits()); + h_nhTID->Fill(track.hitPattern().numberOfValidStripTIDHits()); + h_nhTOB->Fill(track.hitPattern().numberOfValidStripTOBHits()); + h_nhTEC->Fill(track.hitPattern().numberOfValidStripTECHits()); + + math::XYZPoint BS(beamSpot.x0(), beamSpot.y0(), beamSpot.z0()); + h_dxyBS->Fill(track.dxy(BS)); + h_d0BS->Fill(-track.dxy(BS)); + h_dzBS->Fill(track.dz(BS)); + + math::XYZPoint PV(pvtx.x(), pvtx.y(), pvtx.z()); + h_dxyPV->Fill(track.dxy(PV)); + h_d0PV->Fill(-track.dxy(PV)); + h_dzPV->Fill(track.dz(PV)); + } + + private: + TH1D *h_chi2ndof; + TH1D *h_trkQuality; + TH1D *h_trkAlgo; + TH1D *h_trkOriAlgo; + TH1D *h_P; + TH1D *h_Pt; + TH1D *h_nHit; + TH1D *h_nHit2D; + TH1D *h_Charge; + TH1D *h_QoverP; + TH1D *h_QoverPZoom; + TH1D *h_Eta; + TH1D *h_Phi; + TH1D *h_vx; + TH1D *h_vy; + TH1D *h_vz; + TH1D *h_d0; + TH1D *h_dz; + TH1D *h_dxy; + TH1D *h_nhpxb; + TH1D *h_nhpxe; + TH1D *h_nhTIB; + TH1D *h_nhTID; + TH1D *h_nhTOB; + TH1D *h_nhTEC; + TH1D *h_dxyBS; + TH1D *h_d0BS; + TH1D *h_dzBS; + TH1D *h_dxyPV; + TH1D *h_d0PV; + TH1D *h_dzPV; + }; + + class trackComparator { + public: + trackComparator() {} + ~trackComparator() = default; + + //__________________________________________________ + void book(const TFileDirectory &fs) { + h2_chi2ndof = CREATE_HIST_2D(h2_chi2ndof, 100, 0.0, 10.0, fs); + h2_trkAlgo = CREATE_HIST_2D(h2_trkAlgo, reco::TrackBase::algoSize, 0.0, double(reco::TrackBase::algoSize), fs); + h2_trkOriAlgo = + CREATE_HIST_2D(h2_trkOriAlgo, reco::TrackBase::algoSize, 0.0, double(reco::TrackBase::algoSize), fs); + h2_P = CREATE_HIST_2D(h2_P, 100, 0.0, 200.0, fs); + h2_Pt = CREATE_HIST_2D(h2_Pt, 100, 0.0, 100.0, fs); + h2_nHit = CREATE_HIST_2D(h2_nHit, 50, -0.5, 49.5, fs); + h2_Charge = CREATE_HIST_2D(h2_Charge, 3, -1.5, 1.5, fs); + h2_QoverPZoom = CREATE_HIST_2D(h2_QoverPZoom, 100, -0.1, 0.1, fs); + h2_Eta = CREATE_HIST_2D(h2_Eta, 100, -3., 3., fs); + h2_Phi = CREATE_HIST_2D(h2_Phi, 100, -M_PI, M_PI, fs); + h2_vx = CREATE_HIST_2D(h2_vx, 100, -0.5, 0.5, fs); + h2_vy = CREATE_HIST_2D(h2_vy, 100, -0.5, 0.5, fs); + h2_vz = CREATE_HIST_2D(h2_vz, 100, -20.0, 20.0, fs); + h2_d0 = CREATE_HIST_2D(h2_d0, 100, -0.5, 0.5, fs); + h2_dz = CREATE_HIST_2D(h2_dz, 100, -20.0, 20.0, fs); + h2_nhpxb = CREATE_HIST_2D(h2_nhpxb, 10, -0.5, 9.5, fs); + h2_nhpxe = CREATE_HIST_2D(h2_nhpxe, 10, -0.5, 9.5, fs); + h2_nhTIB = CREATE_HIST_2D(h2_nhTIB, 20, -0.5, 19.5, fs); + h2_nhTID = CREATE_HIST_2D(h2_nhTID, 20, -0.5, 19.5, fs); + h2_nhTOB = CREATE_HIST_2D(h2_nhTOB, 20, -0.5, 19.5, fs); + h2_nhTEC = CREATE_HIST_2D(h2_nhTEC, 20, -0.5, 19.5, fs); + } + + //__________________________________________________ + void fill(const reco::Track &tk1, const reco::Track &tk2) { + h2_chi2ndof->Fill(tk1.normalizedChi2(), tk2.normalizedChi2()); + h2_trkAlgo->Fill(static_cast(tk1.algo()), static_cast(tk2.algo())); + h2_trkOriAlgo->Fill(static_cast(tk1.originalAlgo()), static_cast(tk2.originalAlgo())); + h2_P->Fill(tk1.p(), tk2.p()); + h2_Pt->Fill(tk1.pt(), tk2.p()); + h2_nHit->Fill(tk1.numberOfValidHits(), tk2.numberOfValidHits()); + h2_Charge->Fill(tk1.charge(), tk2.charge()); + h2_QoverPZoom->Fill(tk1.qoverp(), tk2.qoverp()); + h2_Eta->Fill(tk1.eta(), tk2.eta()); + h2_Phi->Fill(tk1.phi(), tk2.phi()); + h2_vx->Fill(tk1.vx(), tk2.vx()); + h2_vy->Fill(tk1.vy(), tk2.vy()); + h2_vz->Fill(tk1.vz(), tk2.vz()); + h2_d0->Fill(tk1.d0(), tk2.d0()); + h2_dz->Fill(tk2.dz(), tk2.dz()); + h2_nhpxb->Fill(tk1.hitPattern().numberOfValidPixelBarrelHits(), tk2.hitPattern().numberOfValidPixelBarrelHits()); + h2_nhpxe->Fill(tk1.hitPattern().numberOfValidPixelEndcapHits(), tk2.hitPattern().numberOfValidPixelEndcapHits()); + h2_nhTIB->Fill(tk1.hitPattern().numberOfValidStripTIBHits(), tk2.hitPattern().numberOfValidStripTIBHits()); + h2_nhTID->Fill(tk1.hitPattern().numberOfValidStripTIDHits(), tk2.hitPattern().numberOfValidStripTIDHits()); + h2_nhTOB->Fill(tk1.hitPattern().numberOfValidStripTOBHits(), tk2.hitPattern().numberOfValidStripTOBHits()); + h2_nhTEC->Fill(tk1.hitPattern().numberOfValidStripTECHits(), tk2.hitPattern().numberOfValidStripTECHits()); + } + + private: + TH2D *h2_chi2ndof; + TH2D *h2_trkAlgo; + TH2D *h2_trkOriAlgo; + TH2D *h2_P; + TH2D *h2_Pt; + TH2D *h2_nHit; + TH2D *h2_Charge; + TH2D *h2_QoverPZoom; + TH2D *h2_Eta; + TH2D *h2_Phi; + TH2D *h2_vx; + TH2D *h2_vy; + TH2D *h2_vz; + TH2D *h2_d0; + TH2D *h2_dz; + TH2D *h2_nhpxb; + TH2D *h2_nhpxe; + TH2D *h2_nhTIB; + TH2D *h2_nhTID; + TH2D *h2_nhTOB; + TH2D *h2_nhTEC; + }; + +public: + explicit ShortenedTrackValidation(const edm::ParameterSet &); + ~ShortenedTrackValidation() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +private: + template + T *book(const TFileDirectory &dir, const Args &...args) const; + void beginJob() override; + void analyze(edm::Event const &iEvent, edm::EventSetup const &iSetup) override; + + // ----------member data --------------------------- + edm::Service fs_; + const std::string folderName_; + const std::vector hitsRemain_; + const double minTracksEta_; + const double maxTracksEta_; + const double minTracksPt_; + const double maxTracksPt_; + + const double maxDr_; + const edm::InputTag tracksTag_; + const std::vector tracksRerecoTag_; + const edm::InputTag BeamSpotTag_; + const edm::InputTag VerticesTag_; + const edm::EDGetTokenT> tracksToken_; + const std::vector>> tracksRerecoToken_; + const edm::EDGetTokenT beamspotToken_; + const edm::EDGetTokenT vertexToken_; + + // monitoring histograms + std::vector histsPtRatioAll_; + std::vector histsPtDiffAll_; + std::vector histsEtaDiffAll_; + std::vector histsPhiDiffAll_; + std::vector histsPtRatioVsDeltaRAll_; + std::vector histsDeltaPtOverPtAll_; + std::vector histsPtAll_; + std::vector histsNhitsAll_; + std::vector histsDeltaRAll_; + + trackingMon originalTrack; + std::vector comparators_; + static constexpr double muMass = 0.105658; +}; + +// ----------------------------- +// constructors and destructor +// ----------------------------- +ShortenedTrackValidation::ShortenedTrackValidation(const edm::ParameterSet &ps) + : folderName_(ps.getUntrackedParameter("folderName", "TrackRefitting")), + hitsRemain_(ps.getUntrackedParameter>("hitsRemainInput")), + minTracksEta_(ps.getUntrackedParameter("minTracksEtaInput", 0.0)), + maxTracksEta_(ps.getUntrackedParameter("maxTracksEtaInput", 2.2)), + minTracksPt_(ps.getUntrackedParameter("minTracksPtInput", 15.0)), + maxTracksPt_(ps.getUntrackedParameter("maxTracksPtInput", 99999.9)), + maxDr_(ps.getUntrackedParameter("maxDrInput", 0.01)), + tracksTag_(ps.getUntrackedParameter("tracksInputTag", edm::InputTag("generalTracks", "", "DQM"))), + tracksRerecoTag_(ps.getUntrackedParameter>("tracksRerecoInputTag")), + BeamSpotTag_(ps.getUntrackedParameter("BeamSpotTag", edm::InputTag("offlineBeamSpot"))), + VerticesTag_(ps.getUntrackedParameter("VerticesTag", edm::InputTag("offlinePrimaryVertices"))), + tracksToken_(consumes>(tracksTag_)), + tracksRerecoToken_(edm::vector_transform( + tracksRerecoTag_, [this](edm::InputTag const &tag) { return consumes>(tag); })), + beamspotToken_(consumes(BeamSpotTag_)), + vertexToken_(consumes(VerticesTag_)) { + usesResource(TFileService::kSharedResource); + histsPtRatioAll_.clear(); + histsPtDiffAll_.clear(); + histsEtaDiffAll_.clear(); + histsPhiDiffAll_.clear(); + histsPtRatioVsDeltaRAll_.clear(); + histsDeltaPtOverPtAll_.clear(); + histsPtAll_.clear(); + histsNhitsAll_.clear(); + histsDeltaRAll_.clear(); + comparators_.clear(); + + comparators_.reserve(hitsRemain_.size()); + for (unsigned int i = 0; i < hitsRemain_.size(); ++i) { + comparators_.push_back(new trackComparator()); + } +} + +//__________________________________________________________________________________ +template +T *ShortenedTrackValidation::book(const TFileDirectory &dir, const Args &...args) const { + T *t = dir.make(args...); + return t; +} + +//__________________________________________________________________________________ +void ShortenedTrackValidation::beginJob() { + std::string currentFolder = folderName_ + "/Resolutions"; + TFileDirectory ShortTrackResolution = fs_->mkdir(currentFolder); + currentFolder = folderName_ + "/Tracks"; + TFileDirectory TrackQuals = fs_->mkdir(currentFolder); + + for (unsigned int i = 0; i < hitsRemain_.size(); ++i) { + histsPtRatioAll_.push_back( + book(ShortTrackResolution, + fmt::sprintf("trackPtRatio_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track p_{T} / Full Track p_{T} - %s layers;p_{T}^{short}/p_{T}^{full};n. tracks", + hitsRemain_[i]) + .c_str(), + 101, + -0.05, + 2.05)); + + histsPtDiffAll_.push_back(book( + ShortTrackResolution, + fmt::sprintf("trackPtDiff_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track p_{T} - Full Track p_{T} - %s layers;p_{T}^{short} - p_{T}^{full} [GeV];n. tracks", + hitsRemain_[i]) + .c_str(), + 100, + -10., + 10.)); + + histsEtaDiffAll_.push_back( + book(ShortTrackResolution, + fmt::sprintf("trackEtaDiff_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track #eta - Full Track #eta - %s layers;#eta^{short} - #eta^{full};n. tracks", + hitsRemain_[i]) + .c_str(), + 100, + -0.01, + 0.01)); + + histsPhiDiffAll_.push_back( + book(ShortTrackResolution, + fmt::sprintf("trackPhiDiff_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track #phi - Full Track #phi - %s layers;#phi^{short} - #phi^{full};n. tracks", + hitsRemain_[i]) + .c_str(), + 100, + -0.01, + 0.01)); + + histsPtRatioVsDeltaRAll_.push_back( + book(ShortTrackResolution, + fmt::sprintf("trackPtRatioVsDeltaR_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track p_{T} / Full Track p_{T} - %s layers vs " + "#DeltaR;#DeltaR(short,full);p_{T}^{short}/p_{T}^{full} [GeV];n. tracks", + hitsRemain_[i]) + .c_str(), + 100, + 0., + 0.01, + 101, + -0.05, + 2.05)); + + histsDeltaPtOverPtAll_.push_back( + book(ShortTrackResolution, + fmt::sprintf("trackDeltaPtOverPt_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track p_{T} - Full Track p_{T} / Full Track p_{T} - %s layers;p_{T}^{short} - " + "p_{T}^{full} / p^{full}_{T};n. tracks", + hitsRemain_[i]) + .c_str(), + 101, + -10., + 10.)); + + histsPtAll_.push_back( + book(TrackQuals, + fmt::sprintf("trackPt_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track p_{T} - %s layers;p_{T}^{short} [GeV];n. tracks", hitsRemain_[i]).c_str(), + 101, + -0.05, + 200.5)); + + histsNhitsAll_.push_back( + book(TrackQuals, + fmt::sprintf("trackNhits_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track n. hits - %s layers; n. hits per track;n. tracks", hitsRemain_[i]).c_str(), + 20, + -0.5, + 19.5)); + + histsDeltaRAll_.push_back(book( + TrackQuals, + fmt::sprintf("trackDeltaR_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track / Long Track #DeltaR %s layers;#DeltaR(short,long);n. tracks", hitsRemain_[i]).c_str(), + 100, + 0., + 0.01)); + + currentFolder = fmt::sprintf("%s/Compare_%sHit", folderName_, hitsRemain_[i]); + comparators_[i]->book(fs_->mkdir(currentFolder)); + } + + currentFolder = folderName_ + "/OriginalTrack"; + TFileDirectory original = fs_->mkdir(currentFolder); + originalTrack.book(original); +} + +//__________________________________________________________________________________ +void ShortenedTrackValidation::analyze(edm::Event const &iEvent, edm::EventSetup const &iSetup) { + const auto &tracks = iEvent.getHandle(tracksToken_); + + if (!tracks.isValid()) { + edm::LogError("ShortenedTrackValidation") << "Missing input track collection " << tracksTag_.encode() << std::endl; + return; + } + + reco::BeamSpot beamSpot; + edm::Handle beamSpotHandle = iEvent.getHandle(beamspotToken_); + if (beamSpotHandle.isValid()) { + beamSpot = *beamSpotHandle; + } else { + beamSpot = reco::BeamSpot(); + } + + reco::Vertex pvtx; + edm::Handle vertexHandle = iEvent.getHandle(vertexToken_); + if (vertexHandle.isValid()) { + pvtx = (*vertexHandle).at(0); + } else { + pvtx = reco::Vertex(); + } + + // the original long track + for (const auto &track : *tracks) { + const reco::HitPattern &hp = track.hitPattern(); + if (int(int(hp.numberOfValidHits()) - int(hp.numberOfAllHits(reco::HitPattern::TRACK_HITS))) != 0) { + break; + } + + // fill the original track properties monitoring + originalTrack.fill(track, beamSpot, pvtx); + + TLorentzVector tvec; + tvec.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), muMass); + + int i = 0; // token index + // loop on the re-recoed shortened track collections + for (const auto &token : tracksRerecoToken_) { + const auto &tracks_rereco = iEvent.getHandle(token); + + for (const auto &track_rereco : *tracks_rereco) { + TLorentzVector trerecovec; + trerecovec.SetPtEtaPhiM(track_rereco.pt(), track_rereco.eta(), track_rereco.phi(), 0.0); + double deltaR = tvec.DeltaR(trerecovec); + + if (deltaR < maxDr_) { + if (track_rereco.pt() >= minTracksPt_ && track_rereco.pt() <= maxTracksPt_ && + std::abs(track_rereco.eta()) >= minTracksEta_ && std::abs(track_rereco.eta()) <= maxTracksEta_) { + // fill the 2D comparisons per track + comparators_[i]->fill(track, track_rereco); + + histsPtRatioAll_[i]->Fill(1.0 * track_rereco.pt() / track.pt()); + histsPtDiffAll_[i]->Fill(track_rereco.pt() - track.pt()); + histsDeltaPtOverPtAll_[i]->Fill((track_rereco.pt() - track.pt()) / track.pt()); + histsEtaDiffAll_[i]->Fill(track_rereco.eta() - track.eta()); + histsPhiDiffAll_[i]->Fill(track_rereco.phi() - track.phi()); + histsPtRatioVsDeltaRAll_[i]->Fill(deltaR, track_rereco.pt() / track.pt()); + histsPtAll_[i]->Fill(track_rereco.pt()); + histsNhitsAll_[i]->Fill(track_rereco.numberOfValidHits()); + histsDeltaRAll_[i]->Fill(deltaR); + } + } + } + ++i; + } + } +} + +//__________________________________________________________________________________ +void ShortenedTrackValidation::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked("folderName", "TrackRefitting"); + desc.addUntracked>("hitsRemainInput", {}); + desc.addUntracked("minTracksEtaInput", 0.0); + desc.addUntracked("maxTracksEtaInput", 2.2); + desc.addUntracked("minTracksPtInput", 15.0); + desc.addUntracked("maxTracksPtInput", 99999.9); + desc.addUntracked("maxDrInput", 0.01); + desc.addUntracked("tracksInputTag", edm::InputTag("generalTracks", "", "DQM")); + desc.addUntracked>("tracksRerecoInputTag", {}); + desc.addUntracked("BeamSpotTag", edm::InputTag("offlineBeamSpot")); + desc.addUntracked("VerticesTag", edm::InputTag("offlinePrimaryVertices")); + descriptions.addWithDefaultLabel(desc); +} + +// Define this as a plug-in +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ShortenedTrackValidation); diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS.py new file mode 100644 index 0000000000000..ae0d9a44a6bcb --- /dev/null +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS.py @@ -0,0 +1,124 @@ +import copy +import os + +def MTS(config, validationDir): + ##List with all jobs + jobs = [] + mtsType = "single" + + ##Dictionary of lists of all IOVs (can be different per each single job) + IOVs = {} + + ##Auxilliary dictionary of isData flags per each merged job + isDataMerged = {} + + ##Start with single MTS jobs + if not mtsType in config["validations"]["MTS"]: + raise Exception("No 'single' key word in config for MTS") + + for singleName in config["validations"]["MTS"][mtsType]: + aux_IOV = config["validations"]["MTS"][mtsType][singleName]["IOV"] + if not isinstance(aux_IOV, list) and aux_IOV.endswith(".txt"): + config["validations"]["MTS"][mtsType][singleName]["IOV"] = [] + with open(aux_IOV, 'r') as IOVfile: + for line in IOVfile.readlines(): + if len(line) != 0: config["validations"]["MTS"][mtsType][singleName]["IOV"].append(int(line)) + for IOV in config["validations"]["MTS"][mtsType][singleName]["IOV"]: + ##Save IOV to loop later for merge jobs + if singleName not in IOVs.keys(): + IOVs[singleName] = [] + if IOV not in IOVs[singleName]: + IOVs[singleName].append(IOV) + + for alignment in config["validations"]["MTS"][mtsType][singleName]["alignments"]: + ##Work directory for each IOV + workDir = "{}/MTS/{}/{}/{}/{}".format(validationDir, mtsType, singleName, alignment, IOV) + + ##Write local config + local = {} + local["output"] = "{}/{}/MTS/{}/{}/{}/{}".format(config["LFS"], config["name"], mtsType, alignment, singleName, IOV) + local["alignment"] = copy.deepcopy(config["alignments"][alignment]) + local["validation"] = copy.deepcopy(config["validations"]["MTS"][mtsType][singleName]) + local["validation"].pop("alignments") + local["validation"]["IOV"] = IOV + if "dataset" in local["validation"]: + local["validation"]["dataset"] = local["validation"]["dataset"].format(IOV) + if "goodlumi" in local["validation"]: + local["validation"]["goodlumi"] = local["validation"]["goodlumi"].format(IOV) + + ##Write job info + job = { + "name": "MTS_{}_{}_{}_{}".format(mtsType, alignment, singleName, IOV), + "dir": workDir, + "exe": "cmsRun", + "cms-config": "{}/src/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS_cfg.py".format(os.environ["CMSSW_BASE"]), + "run-mode": "Condor", + "dependencies": [], + "config": local, + } + + jobs.append(job) + + ##Do merge MTS if wished + if "merge" in config["validations"]["MTS"]: + ##List with merge jobs, will be expanded to jobs after looping + mergeJobs = [] + pvType = "merge" + + ##Loop over all merge jobs/IOVs which are wished + for mergeName in config["validations"]["MTS"][pvType]: + ##Loop over singles + for iname,singleName in enumerate(config["validations"]["MTS"][pvType][mergeName]['singles']): + for IOV in IOVs[singleName]: + + ##Work directory for each IOV + workDir = "{}/MTS/{}/{}/{}".format(validationDir, pvType, mergeName, IOV) #Different (DATA) single jobs must contain different set of IOVs + + ##Write job info + local = {} + + job = { + "name": "MTS_{}_{}_{}".format(pvType, mergeName, IOV), + "dir": workDir, + "exe": "MTSmerge", + "run-mode": "Condor", + "dependencies": [], + "config": local, + } + + ##Deep copy necessary things from global config + assure plot order + for alignment in config["alignments"]: + local.setdefault("alignments", {}) + if alignment in config["validations"]["MTS"]["single"][singleName]["alignments"]: #Cover all DATA validations + local["alignments"][alignment] = copy.deepcopy(config["alignments"][alignment]) + local["alignments"][alignment]['index'] = config["validations"]["MTS"]["single"][singleName]["alignments"].index(alignment) + local["alignments"][alignment]['isMC'] = False + local["validation"] = copy.deepcopy(config["validations"]["MTS"][pvType][mergeName]) + local["validation"]["IOV"] = IOV + if "customrighttitle" in local["validation"].keys(): + if "IOV" in local["validation"]["customrighttitle"]: + local["validation"]["customrighttitle"] = local["validation"]["customrighttitle"].replace("IOV",str(IOV)) + local["output"] = "{}/{}/MTS/{}/{}/{}".format(config["LFS"], config["name"], pvType, mergeName, IOV) + + ##Add global plotting options + if "style" in config.keys(): + if "MTS" in config['style'].keys(): + if pvType in config['style']['MTS'].keys(): + local["style"] = copy.deepcopy(config["style"]["MTS"][pvType]) + if "Rlabel" in local["style"] and "customrighttitle" in local["validation"].keys(): + print("WARNING: custom right label is overwritten by global settings") + + ##Loop over all single jobs + for singleJob in jobs: + ##Get single job info and append to merge job if requirements fullfilled + _alignment, _singleName, _singleIOV = singleJob["name"].split("_")[2:] + if _singleName in config["validations"]["MTS"][pvType][mergeName]["singles"]: + if (int(_singleIOV) == IOV): #matching DATA job or any MC single job + local["alignments"][_alignment]["file"] = singleJob["config"]["output"] + job["dependencies"].append(singleJob["name"]) + + mergeJobs.append(job) + + jobs.extend(mergeJobs) + + return jobs diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS_cfg.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS_cfg.py new file mode 100644 index 0000000000000..f5aaedc8414fa --- /dev/null +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/MTS_cfg.py @@ -0,0 +1,203 @@ +import json +import yaml +import os +import FWCore.ParameterSet.Config as cms +import FWCore.PythonUtilities.LumiList as LumiList +from Alignment.OfflineValidation.TkAlAllInOneTool.defaultInputFiles_cff import filesDefaultData_Cosmics_string +from FWCore.ParameterSet.VarParsing import VarParsing +from Alignment.OfflineValidation.TkAlAllInOneTool.utils import _byteify +import pdb + +################################################################### +# Define process +################################################################### +process = cms.Process("splitter") + +################################################################### +# Argument parsing +################################################################### +options = VarParsing() +options.register("config", "", VarParsing.multiplicity.singleton, VarParsing.varType.string , "AllInOne config") +options.parseArguments() + +################################################################### +# Read in AllInOne config in JSON format +################################################################### +if options.config == "": + config = {"validation": {}, + "alignment": {}} +else: + with open(options.config, "r") as configFile: + if options.config.endswith(".json"): + config = json.load(configFile) + elif options.config.endswith(".yaml"): + config = yaml.safe_load(configFile) + +################################################################### +# Read filenames from given TXT file and define input source +################################################################### +readFiles = [] + +if "dataset" in config["validation"]: + with open(config["validation"]["dataset"], "r") as datafiles: + for fileName in datafiles.readlines(): + readFiles.append(fileName.replace("\n", "")) + + process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(readFiles), + skipEvents = cms.untracked.uint32(0) + ) +else: + print(">>>>>>>>>> MTS_cfg.py: msg%-i: dataset not specified! Loading default file -> filesDefaultData_Cosmics_string!") + process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(filesDefaultData_Cosmics_string), + skipEvents = cms.untracked.uint32(0) + ) + +################################################################### +# Get good lumi section and load data or handle MC +################################################################### +if "goodlumi" in config["validation"]: + if os.path.isfile(config["validation"]["goodlumi"]): + goodLumiSecs = cms.untracked.VLuminosityBlockRange(LumiList.LumiList(filename = config["validation"]["goodlumi"]).getCMSSWString().split(',')) + else: + print("Does not exist: {}. Continue without good lumi section file.") + goodLumiSecs = cms.untracked.VLuminosityBlockRange() + +else: + goodLumiSecs = cms.untracked.VLuminosityBlockRange() + +################################################################### +# Runs and events +################################################################### +runboundary = config["validation"].get("runboundary", 1) +isMultipleRuns=False +if(isinstance(runboundary, (list, tuple))): + isMultipleRuns=True + print("Multiple Runs are selected") +if(isMultipleRuns): + process.source.firstRun = cms.untracked.uint32(runboundary[0]) +else: + process.source.firstRun = cms.untracked.uint32(runboundary) + +################################################################### +# Default set to 1 for unit tests +################################################################### +process.maxEvents = cms.untracked.PSet(input = cms.untracked.int32(config["validation"].get("maxevents", 1))) + +################################################################### +# Bookeeping +################################################################### +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(False), + Rethrow = cms.untracked.vstring("ProductNotFound"), # make this exception fatal + fileMode = cms.untracked.string('NOMERGE'), # no ordering needed, but calls endRun/beginRun etc. at file boundaries +) + +################################################################### +# Messages +################################################################### +process.load("FWCore.MessageLogger.MessageLogger_cfi") +process.MessageLogger.cerr.FwkReport.reportEvery = 1000 +process.MessageLogger.cout.enableStatistics = cms.untracked.bool(True) + +################################################################### +# Basic modules +################################################################### +process.load("RecoVertex.BeamSpotProducer.BeamSpot_cff") +process.load("Configuration.Geometry.GeometryDB_cff") +process.load('Configuration.StandardSequences.Services_cff') +process.load("Configuration.StandardSequences.MagneticField_cff") + +#################################################################### +# Load and Configure Track refitter +#################################################################### +import Alignment.CommonAlignment.tools.trackselectionRefitting as trackselRefit +process.seqTrackselRefit = trackselRefit.getSequence( + process, + config["validation"].get("trackcollection", "ALCARECOTkAlCosmicsCTF0T"), + isPVValidation = False, + TTRHBuilder = config["validation"].get("tthrbuilder", "WithAngleAndTemplate"), + usePixelQualityFlag=config["validation"].get("usePixelQualityFlag", True), + openMassWindow = False, + cosmicsDecoMode = True, + cosmicsZeroTesla=config["validation"].get("cosmicsZeroTesla", False), + momentumConstraint = None, + cosmicTrackSplitting = True, + use_d0cut = False +) + +#################################################################### +# Global tag +#################################################################### +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, config["alignment"].get("globaltag", "124X_dataRun3_Prompt_v10")) + +#################################################################### +# Load conditions if wished +#################################################################### +if "conditions" in config["alignment"]: + from CalibTracker.Configuration.Common.PoolDBESSource_cfi import poolDBESSource + + for condition in config["alignment"]["conditions"]: + setattr( + process, + "conditionsIn{}".format(condition), + poolDBESSource.clone( + # FIXME%START + connect = cms.string("sqlite_file:" + str(config["alignment"]["conditions"][condition]["connect"]) if "alignments_MP.db" in str(config["alignment"]["conditions"][condition]["connect"]) else str(config["alignment"]["conditions"][condition]["connect"])), + #FIXME%END + toGet = cms.VPSet( + cms.PSet( + record = cms.string(str(condition)), + tag = cms.string(str(config["alignment"]["conditions"][condition]["tag"])) + ) + ) + ) + ) + + setattr( + process, + "prefer_conditionsIn{}".format(condition), + cms.ESPrefer("PoolDBESSource", "conditionsIn{}".format(condition)) + ) + +#################################################################### +# Configure the Analyzer module +#################################################################### + +process.FittingSmootherRKP5.EstimateCut = -1 +process.AlignmentTrackSelector.minHitsPerSubDet.inPIXEL = 2 +# Use compressions settings of TFile +# see https://root.cern.ch/root/html534/TFile.html#TFile:SetCompressionSet tings +# settings = 100 * algorithm + level +# level is from 1 (small) to 9 (large compression) +# algo: 1 (ZLIB), 2 (LMZA) +# see more about compression & performance: https://root.cern.ch/root/html534/guides/users-guide/InputOutput.html#compression-and-performance +compressionSettings = 207 +process.cosmicValidation = cms.EDAnalyzer( + "CosmicSplitterValidation", + compressionSettings = cms.untracked.int32(compressionSettings), + ifSplitMuons = cms.bool(False), + checkIfGolden = cms.bool(False), + splitTracks = cms.InputTag("FinalTrackRefitter","","splitter"), + splitGlobalMuons = cms.InputTag("muons","","splitter"), + originalTracks = cms.InputTag("FirstTrackRefitter","","splitter"), + originalGlobalMuons = cms.InputTag("muons","","Rec") +) + +#################################################################### +# Output file +#################################################################### +process.TFileService = cms.Service("TFileService", + fileName = cms.string("{}/MTSValidation_{}_{}.root".format(config.get("output", os.getcwd()), config["alignment"].get("name", ""), config["validation"].get("IOV", 1.))), + closeFileFast = cms.untracked.bool(True), + ) + +#################################################################### +# Path +#################################################################### +process.p = cms.Path(process.seqTrackselRefit*process.cosmicValidation) + +print("Done") diff --git a/Alignment/OfflineValidation/python/TkAlAllInOneTool/defaultInputFiles_cff.py b/Alignment/OfflineValidation/python/TkAlAllInOneTool/defaultInputFiles_cff.py index d0bc9b7de5e5b..498441f5ac464 100644 --- a/Alignment/OfflineValidation/python/TkAlAllInOneTool/defaultInputFiles_cff.py +++ b/Alignment/OfflineValidation/python/TkAlAllInOneTool/defaultInputFiles_cff.py @@ -56,3 +56,5 @@ filesDefaultData_MinBias2018B = cms.untracked.vstring( '/store/express/Run2018B/StreamExpress/ALCARECO/TkAlMinBias-Express-v1/000/317/212/00000/00F0EFA7-8D64-E811-A594-FA163EFC96CC.root' ) + +filesDefaultData_Cosmics_string = "/store/data/Run2022G/Cosmics/ALCARECO/TkAlCosmics0T-PromptReco-v1/000/362/440/00000/47f31eaa-1c00-4f39-902b-a09fa19c27f2.root" diff --git a/Alignment/OfflineValidation/python/TkAlStyle.py b/Alignment/OfflineValidation/python/TkAlStyle.py index 4bed74f8a465c..0520af32f5130 100644 --- a/Alignment/OfflineValidation/python/TkAlStyle.py +++ b/Alignment/OfflineValidation/python/TkAlStyle.py @@ -1,5 +1,5 @@ import ROOT -ROOT.gROOT.ProcessLine('#include "Alignment/OfflineValidation/macros/TkAlStyle.cc"') +ROOT.gROOT.ProcessLine('#include "Alignment/OfflineValidation/interface/TkAlStyle.h"') from ROOT import TkAlStyle diff --git a/Alignment/OfflineValidation/python/eopElecTreeWriter_cfi.py b/Alignment/OfflineValidation/python/energyOverMomentumTreeElec_cfi.py similarity index 100% rename from Alignment/OfflineValidation/python/eopElecTreeWriter_cfi.py rename to Alignment/OfflineValidation/python/energyOverMomentumTreeElec_cfi.py diff --git a/Alignment/OfflineValidation/python/eopTreeWriter_cfi.py b/Alignment/OfflineValidation/python/energyOverMomentumTree_cfi.py similarity index 100% rename from Alignment/OfflineValidation/python/eopTreeWriter_cfi.py rename to Alignment/OfflineValidation/python/energyOverMomentumTree_cfi.py diff --git a/Alignment/OfflineValidation/scripts/validateAlignments.py b/Alignment/OfflineValidation/scripts/validateAlignments.py index 6d8e7b9e0a26a..64cb7f455d3f0 100755 --- a/Alignment/OfflineValidation/scripts/validateAlignments.py +++ b/Alignment/OfflineValidation/scripts/validateAlignments.py @@ -19,6 +19,7 @@ import Alignment.OfflineValidation.TkAlAllInOneTool.SplitV as SplitV import Alignment.OfflineValidation.TkAlAllInOneTool.JetHT as JetHT import Alignment.OfflineValidation.TkAlAllInOneTool.DiMuonV as DiMuonV +import Alignment.OfflineValidation.TkAlAllInOneTool.MTS as MTS ############################################## def parser(): @@ -263,10 +264,10 @@ def main(): elif validation == "JetHT": jobs.extend(JetHT.JetHT(config, validationDir)) - elif validation == "DiMuonV": jobs.extend(DiMuonV.DiMuonV(config, validationDir)) - + elif validation == "MTS": + jobs.extend(MTS.MTS(config, validationDir)) else: raise Exception("Unknown validation method: {}".format(validation)) diff --git a/Alignment/OfflineValidation/src/PVValidationHelpers.cc b/Alignment/OfflineValidation/src/PVValidationHelpers.cc index f360fe02ee1a9..9724e822b2fd3 100644 --- a/Alignment/OfflineValidation/src/PVValidationHelpers.cc +++ b/Alignment/OfflineValidation/src/PVValidationHelpers.cc @@ -234,7 +234,7 @@ std::pair PVValHelper::fitResiduals(TH1* hist) float sigma = hist->GetRMS(); TF1 func("tmp", "gaus", mean - 1.5 * sigma, mean + 1.5 * sigma); - if (0 == hist->Fit(&func, "QNR")) { // N: do not blow up file by storing fit! + if (0 == hist->Fit(&func, "QNRL")) { // N: do not blow up file by storing fit! mean = func.GetParameter(1); sigma = func.GetParameter(2); // second fit: three sigma of first fit around mean of first fit diff --git a/Alignment/OfflineValidation/src/TkAlStyle.cc b/Alignment/OfflineValidation/src/TkAlStyle.cc index 84e01398d8cf0..4f933cd234582 100644 --- a/Alignment/OfflineValidation/src/TkAlStyle.cc +++ b/Alignment/OfflineValidation/src/TkAlStyle.cc @@ -1,6 +1,6 @@ #include "Alignment/OfflineValidation/interface/TkAlStyle.h" -TString toTString(const PublicationStatus status) { +TString TkAlStyle::toTString(const PublicationStatus status) { TString str = ""; if (status == NO_STATUS) str = "Status not set yet!"; @@ -22,7 +22,7 @@ TString toTString(const PublicationStatus status) { return str; } -static TString toTString(const Era era) { +TString TkAlStyle::toTString(const Era era) { TString str = ""; if (era == CRUZET15) str = "0T cosmic ray data 2015"; @@ -34,6 +34,41 @@ static TString toTString(const Era era) { return str; } +TString TkAlStyle::toTString(const AlignObj obj) { + TString str = ""; + if (obj == IDEALAlign) + str = "MC (no mis-alignment)"; + else if (obj == RUN1Align) + str = "No Run-2 alignment (Run-1 geometry)"; + else if (obj == CRUZETAlign) + str = "Aligned (0T cosmic rays)"; + else if (obj == CRAFTAlign) + str = "Aligned (cosmic rays)"; + else if (obj == Coll0TAlign) + str = "Aligned (0T collisions + cosmic rays)"; + + return str; +} + +// Line and fill styles depending on alignment object +int TkAlStyle::color(const AlignObj obj) { + int col = 1; + if (obj == IDEALAlign) + col = kGray + 1; + else if (obj == RUN1Align) + col = kBlack; + else if (obj == CRUZETAlign) + col = kGreen + 2; + else if (obj == CRAFTAlign) + col = kBlue; + else if (obj == Coll0TAlign) + col = kRed; + + return col; +} + +int TkAlStyle::style(const AlignObj obj) { return obj == RUN1Align ? kDashed : kSolid; } + PublicationStatus TkAlStyle::publicationStatus_ = NO_STATUS; Era TkAlStyle::era_ = NONE; TString TkAlStyle::legendheader = ""; diff --git a/Alignment/OfflineValidation/test/BuildFile.xml b/Alignment/OfflineValidation/test/BuildFile.xml index daf54f09d1962..d6cc4c190ef4d 100644 --- a/Alignment/OfflineValidation/test/BuildFile.xml +++ b/Alignment/OfflineValidation/test/BuildFile.xml @@ -18,6 +18,9 @@ + + + @@ -30,6 +33,10 @@ + + + + diff --git a/Alignment/OfflineValidation/test/eopElecTreeWriter_cfg.py b/Alignment/OfflineValidation/test/eopElecTreeWriter_cfg.py index cc00fd049b3d0..4a0c73ac8ec16 100644 --- a/Alignment/OfflineValidation/test/eopElecTreeWriter_cfg.py +++ b/Alignment/OfflineValidation/test/eopElecTreeWriter_cfg.py @@ -131,7 +131,7 @@ else: print( "NO REFIT") -process.load("Alignment.OfflineValidation.eopElecTreeWriter_cfi") +process.load("Alignment.OfflineValidation.energyOverMomentumTreeElec_cfi") if REFIT: print( "REFIT") diff --git a/Alignment/OfflineValidation/test/testShortenedTrackValidation_cfg.py b/Alignment/OfflineValidation/test/testShortenedTrackValidation_cfg.py new file mode 100644 index 0000000000000..2901ef5a7fc83 --- /dev/null +++ b/Alignment/OfflineValidation/test/testShortenedTrackValidation_cfg.py @@ -0,0 +1,153 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.Utilities.FileUtils as FileUtils +from FWCore.ParameterSet.VarParsing import VarParsing + +options = VarParsing('analysis') +options.register('scenario', + '0', + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "Name of input misalignment scenario") +options.parseArguments() + +valid_scenarios = ['-10e-6','-8e-6','-6e-6','-4e-6','-2e-6','0','2e-6','4e-6','6e-6','8e-6','10e-6'] + +if options.scenario not in valid_scenarios: + print("Error: Invalid scenario specified. Please choose from the following list: ") + print(valid_scenarios) + exit(1) + +process = cms.Process("TrackingResolution") + +##################################################################### +# import of standard configurations +##################################################################### +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.MessageLogger.cerr.FwkReport.reportEvery = 100000 +process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +##################################################################### +## BeamSpot from database (i.e. GlobalTag), needed for Refitter +##################################################################### +process.load("RecoVertex.BeamSpotProducer.BeamSpot_cfi") + +##################################################################### +# Load and Configure Measurement Tracker Event +##################################################################### +process.load("RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi") +process.MeasurementTrackerEvent.pixelClusterProducer = "ALCARECOTkAlDiMuon" +process.MeasurementTrackerEvent.stripClusterProducer = "ALCARECOTkAlDiMuon" +process.MeasurementTrackerEvent.inactivePixelDetectorLabels = cms.VInputTag() +process.MeasurementTrackerEvent.inactiveStripDetectorLabels = cms.VInputTag() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000000) +) + +##################################################################### +# Input source +##################################################################### +# filelist = FileUtils.loadListFromFile("listOfFiles_idealMC_TkAlDiMuonAndVertex.txt") +# readFiles = cms.untracked.vstring( *filelist) +# events taken from /DYJetsToMuMu_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/Run3Winter23Reco-TkAlDiMuonAndVertex-TRKDesignNoPU_AlcaRecoTRKMu_designGaussSigmaZ4cm_125X_mcRun3_2022_design_v6-v1/ALCARECO +readFiles = cms.untracked.vstring('/store/mc/Run3Winter23Reco/DYJetsToMuMu_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/ALCARECO/TkAlDiMuonAndVertex-TRKDesignNoPU_AlcaRecoTRKMu_designGaussSigmaZ4cm_125X_mcRun3_2022_design_v6-v1/60000/d3af17a5-2409-4551-9c3d-00deb2f3f64f.root') +process.source = cms.Source("PoolSource",fileNames = readFiles) + +process.options = cms.untracked.PSet() + +#################################################################### +# Output file +#################################################################### +process.TFileService = cms.Service("TFileService", + fileName = cms.string("shortenedTrackResolution_LayerRotation_"+options.scenario+".root")) + +##################################################################### +# Other statements +##################################################################### +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, "125X_mcRun3_2022_design_v6", '') +if (options.scenario=='null'): + print("null scenario, do nothing") + pass +else: + process.GlobalTag.toGet = cms.VPSet(cms.PSet(connect = cms.string("frontier://FrontierPrep/CMS_CONDITIONS"), + record = cms.string('TrackerAlignmentRcd'), + tag = cms.string("LayerRotation_"+options.scenario))) + +##################################################################### +# The DQM analysis sequence +##################################################################### +process.load("DQM.TrackingMonitorSource.shortTrackResolution_cff") + +##################################################################### +# The changes to cope with ALCARECO data format +##################################################################### +process.load("RecoTracker.TrackProducer.TrackRefitters_cff") +import RecoTracker.TrackProducer.TrackRefitters_cff +process.LongTracksRefit = process.TrackRefitter.clone( + src = 'SingleLongTrackProducer', + TrajectoryInEvent = True, + TTRHBuilder = "WithAngleAndTemplate", + NavigationSchool = '' +) + +process.ShortTrackCandidates3.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates4.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates5.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates6.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates7.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates8.src = cms.InputTag("LongTracksRefit") + +process.SingleLongTrackProducer.requiredDr = cms.double(-9999.) # do not require any matchings +process.SingleLongTrackProducer.matchMuons = cms.InputTag("muons") # for ALCA irrelevant (see above) +process.SingleLongTrackProducer.allTracks = cms.InputTag("ALCARECOTkAlDiMuon") + +##################################################################### +# The Analysis module +##################################################################### +from Alignment.OfflineValidation.shortenedTrackValidation_cfi import shortenedTrackValidation as _shortenedTrackValidation +process.ShortenedTrackValidation = _shortenedTrackValidation.clone(folderName = "ShortTrackResolution", + hitsRemainInput = ["3","4","5","6","7","8"], + minTracksEtaInput = 0.0, + maxTracksEtaInput = 2.2, + minTracksPtInput = 15.0, + maxTracksPtInput = 99999.9, + maxDrInput = 0.01, + tracksInputTag = "SingleLongTrackProducer", + tracksRerecoInputTag = ["RefittedShortTracks3", + "RefittedShortTracks4", + "RefittedShortTracks5", + "RefittedShortTracks6", + "RefittedShortTracks7", + "RefittedShortTracks8"]) + +##################################################################### +# Path +##################################################################### +process.analysis_step = cms.Path(process.offlineBeamSpot * + process.MeasurementTrackerEvent * + process.SingleLongTrackProducer * + process.LongTracksRefit * + process.ShortTrackCandidates3 * + process.ShortTrackCandidates4 * + process.ShortTrackCandidates5 * + process.ShortTrackCandidates6 * + process.ShortTrackCandidates7 * + process.ShortTrackCandidates8 * + process.RefittedShortTracks3 * + process.RefittedShortTracks4 * + process.RefittedShortTracks5 * + process.RefittedShortTracks6 * + process.RefittedShortTracks7 * + process.RefittedShortTracks8 * + process.ShortenedTrackValidation) + +################################################################### +# Set the process to run multi-threaded +################################################################### +process.options.numberOfThreads = 8 diff --git a/Alignment/OfflineValidation/test/testTkAlStyle.C b/Alignment/OfflineValidation/test/testTkAlStyle.C index 039561b000528..e1148728d4dcc 100644 --- a/Alignment/OfflineValidation/test/testTkAlStyle.C +++ b/Alignment/OfflineValidation/test/testTkAlStyle.C @@ -6,51 +6,50 @@ #include "TPaveText.h" #include "TROOT.h" -#include "../macros/TkAlStyle.cc" - +#include "../interface/TkAlStyle.h" void testTkAlStyle() { - gROOT->ProcessLine(".L ../macros/TkAlStyle.cc+"); - TkAlStyle::set(PRELIMINARY); // set publication status + //gROOT->ProcessLine(".L ../src/TkAlStyle.cc++g"); + TkAlStyle::set(PRELIMINARY); // set publication status - TCanvas* can = new TCanvas("can","can",500,500); + TCanvas* can = new TCanvas("can", "can", 500, 500); can->cd(); - // Create dummy histograms representing validation plots, // e.g. DMR plots, for a particular alignment object, using // line style accordingly - TH1* h1 = new TH1D("h1",";x title;y title",100,-10,10); - h1->FillRandom("gaus",1000); + TH1* h1 = new TH1D("h1", ";x title;y title", 100, -10, 10); + h1->FillRandom("gaus", 1000); h1->SetLineColor(TkAlStyle::color(IDEALAlign)); h1->SetLineStyle(TkAlStyle::style(IDEALAlign)); - h1->GetYaxis()->SetRangeUser(0,110); + h1->GetYaxis()->SetRangeUser(0, 110); - TH1* h2 = new TH1D("h2",";x title;y title",100,-10,10); - h2->FillRandom("gaus",500); + TH1* h2 = new TH1D("h2", ";x title;y title", 100, -10, 10); + h2->FillRandom("gaus", 500); h2->SetLineColor(TkAlStyle::color(CRAFTAlign)); h2->SetLineStyle(TkAlStyle::style(CRAFTAlign)); - h2->GetYaxis()->SetRangeUser(0,110); + h2->GetYaxis()->SetRangeUser(0, 110); h1->Draw(); h2->Draw("same"); - // Add a title that specifies the data-taking era // (title specifies also the publication label "CMS Preliminary" // etc. according to the status set above) - TPaveText* title = TkAlStyle::standardTitle(CRAFT15); + TPaveText* title = TkAlStyle::standardRightTitle(CRAFT15); title->Draw("same"); - // Add a legend at the top left with 2 entries stretching // over 60% of the pad's width. Legend labels depend on // the alignment object. - TLegend* leg = TkAlStyle::legend("top left",2,0.6); - leg->AddEntry(h1,toTString(IDEALAlign),"L"); - leg->AddEntry(h2,toTString(CRAFTAlign),"L"); + TLegend* leg = TkAlStyle::legend("top left", 2, 0.6); + leg->AddEntry(h1, TkAlStyle::toTString(IDEALAlign), "L"); + leg->AddEntry(h2, TkAlStyle::toTString(CRAFTAlign), "L"); leg->Draw("same"); gPad->RedrawAxis(); can->SaveAs("test.pdf"); } + +// main function for unit test +int main(int argc, char** argv) { testTkAlStyle(); } diff --git a/Alignment/OfflineValidation/test/testTrackAnalyzers.cc b/Alignment/OfflineValidation/test/testTrackAnalyzers.cc index 1874fcbacbd2a..e644d562787b6 100644 --- a/Alignment/OfflineValidation/test/testTrackAnalyzers.cc +++ b/Alignment/OfflineValidation/test/testTrackAnalyzers.cc @@ -2,36 +2,35 @@ #include "FWCore/Utilities/interface/Exception.h" #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "Alignment/OfflineValidation/interface/TkAlStyle.h" #define CATCH_CONFIG_MAIN #include "catch.hpp" -TEST_CASE("GeneralPurposeTrackAnalyzer tests", "[GeneralPurposeTrackAnalyzer]") { - //The python configuration - const std::string baseConfig{ - R"_(from FWCore.TestProcessor.TestProcess import * -from Alignment.OfflineValidation.generalPurposeTrackAnalyzer_cfi import generalPurposeTrackAnalyzer -process = TestProcess() -process.trackAnalyzer = generalPurposeTrackAnalyzer -process.moduleToTest(process.trackAnalyzer) -process.add_(cms.Service('MessageLogger')) -process.add_(cms.Service('JobReportService')) -process.add_(cms.Service('TFileService',fileName=cms.string('tesTrackAnalyzer1.root'))) -)_"}; - +// Function to run the catch2 tests +//___________________________________________________________________________________________ +void runTestForAnalyzer(const std::string& baseConfig, const std::string& analyzerName) { edm::test::TestProcessor::Config config{baseConfig}; - SECTION("base configuration is OK") { REQUIRE_NOTHROW(edm::test::TestProcessor(config)); } - // SECTION("No event data") { - // edm::test::TestProcessor tester(config); - // REQUIRE_NOTHROW(tester.test()); - // } + SECTION(analyzerName + " base configuration is OK") { REQUIRE_NOTHROW(edm::test::TestProcessor(config)); } + + SECTION(analyzerName + " No Runs data") { + edm::test::TestProcessor tester(config); + REQUIRE_NOTHROW(tester.testWithNoRuns()); + } - SECTION("beginJob and endJob only") { + SECTION(analyzerName + " beginJob and endJob only") { edm::test::TestProcessor tester(config); REQUIRE_NOTHROW(tester.testBeginAndEndJobOnly()); } + // Add more sections as needed + + //SECTION("No event data") { + // edm::test::TestProcessor tester(config); + // REQUIRE_NOTHROW(tester.test()); + //} + // SECTION("Run with no LuminosityBlocks") { // edm::test::TestProcessor tester(config); // REQUIRE_NOTHROW(tester.testRunWithNoLuminosityBlocks()); @@ -43,65 +42,122 @@ process.add_(cms.Service('TFileService',fileName=cms.string('tesTrackAnalyzer1.r // } } -TEST_CASE("DMRChecker tests", "[DMRChecker]") { - //The python configuration - const std::string baseConfig{ - R"_(from FWCore.TestProcessor.TestProcess import * -from Alignment.OfflineValidation.dmrChecker_cfi import dmrChecker +// Function to generate base configuration string +//___________________________________________________________________________________________ +std::string generateBaseConfig(const std::string& analyzerName, const std::string& rootFileName) { + // Define a raw string literal + const char* rawString = R"_(from FWCore.TestProcessor.TestProcess import * +from Alignment.OfflineValidation.{}_cfi import {} process = TestProcess() -process.dmrAnalyzer = dmrChecker -process.moduleToTest(process.dmrAnalyzer) +process.trackAnalyzer = {} +process.moduleToTest(process.trackAnalyzer) process.add_(cms.Service('MessageLogger')) process.add_(cms.Service('JobReportService')) -process.add_(cms.Service('TFileService',fileName=cms.string('tesTrackAnalyzer2.root'))) -)_"}; +process.add_(cms.Service('TFileService',fileName=cms.string('{}'))) + )_"; - edm::test::TestProcessor::Config config{baseConfig}; - SECTION("base configuration is OK") { REQUIRE_NOTHROW(edm::test::TestProcessor(config)); } - - // SECTION("No event data") { - // edm::test::TestProcessor tester(config); - // REQUIRE_NOTHROW(tester.test()); - // } + // Format the raw string literal using fmt::format + return fmt::format(rawString, analyzerName, analyzerName, analyzerName, rootFileName); +} - SECTION("beginJob and endJob only") { - edm::test::TestProcessor tester(config); - REQUIRE_NOTHROW(tester.testBeginAndEndJobOnly()); - } +//___________________________________________________________________________________________ +TEST_CASE("GeneralPurposeTrackAnalyzer tests", "[GeneralPurposeTrackAnalyzer]") { + const std::string baseConfig = generateBaseConfig("generalPurposeTrackAnalyzer", "tesTrackAnalyzer0.root"); + runTestForAnalyzer(baseConfig, "GeneralPurposeTrackAnalyzer"); +} - // SECTION("Run with no LuminosityBlocks") { - // edm::test::TestProcessor tester(config); - // REQUIRE_NOTHROW(tester.testRunWithNoLuminosityBlocks()); - // } +//___________________________________________________________________________________________ +TEST_CASE("GeneralPurposeVertexAnalyzer tests", "[GeneralPurposeVertexAnalyzer]") { + const std::string baseConfig = generateBaseConfig("generalPurposeVertexAnalyzer", "tesVertexAnalyzer1.root"); + runTestForAnalyzer(baseConfig, "GeneralPurposeVertexAnalyzer"); +} - // SECTION("LuminosityBlock with no Events") { - // edm::test::TestProcessor tester(config); - // REQUIRE_NOTHROW(tester.testLuminosityBlockWithNoEvents()); - // } +//___________________________________________________________________________________________ +TEST_CASE("DMRChecker tests", "[DMRChecker]") { + const std::string baseConfig = generateBaseConfig("dmrChecker", "tesTrackAnalyzer2.root"); + runTestForAnalyzer(baseConfig, "DMRChecker"); } +//___________________________________________________________________________________________ TEST_CASE("JetHTAnalyzer tests", "[JetHTAnalyzer]") { - //The python configuration - edm::test::TestProcessor::Config config{ - R"_(import FWCore.ParameterSet.Config as cms -from FWCore.TestProcessor.TestProcess import * -from Alignment.OfflineValidation.jetHTAnalyzer_cfi import jetHTAnalyzer -process = TestProcess() -process.JetHTAnalyzer = jetHTAnalyzer -process.moduleToTest(process.JetHTAnalyzer) -process.add_(cms.Service('JobReportService')) -process.add_(cms.Service('TFileService',fileName=cms.string('tesTrackAnalyzer3.root'))) -)_"}; + const std::string baseConfig = generateBaseConfig("jetHTAnalyzer", "tesTrackAnalyzer3.root"); + runTestForAnalyzer(baseConfig, "JetHTAnalyzer"); +} - SECTION("base configuration is OK") { REQUIRE_NOTHROW(edm::test::TestProcessor(config)); } +//___________________________________________________________________________________________ +TEST_CASE("DiMuonValidation tests", "[DiMuonValidation]") { + const std::string baseConfig = generateBaseConfig("diMuonValidation", "tesTrackAnalyzer4.root"); + runTestForAnalyzer(baseConfig, "DiMuonValidation"); +} - SECTION("beginJob and endJob only") { - edm::test::TestProcessor tester(config); - REQUIRE_NOTHROW(tester.testBeginAndEndJobOnly()); - } +//___________________________________________________________________________________________ +TEST_CASE("CosmicSplitterValidation tests", "[CosmicsSplitterValidation]") { + const std::string baseConfig = generateBaseConfig("cosmicSplitterValidation", "tesTrackAnalyzer5.root"); + runTestForAnalyzer(baseConfig, "CosmicSplitterValidation"); +} - // SECTION("No event data") { - // edm::test::TestProcessor tester(config); - // REQUIRE_NOTHROW(tester.test()); - //} +//___________________________________________________________________________________________ +TEST_CASE("DiElectronVertexValidation tests", "[DiElectronVertexValidation]") { + const std::string baseConfig = generateBaseConfig("diElectronVertexValidation", "tesTrackAnalyzer6.root"); + runTestForAnalyzer(baseConfig, "DiElectronVertexValidation"); +} + +//___________________________________________________________________________________________ +TEST_CASE("DiMuonVertexValidation tests", "[DiMuonVertexValidation]") { + const std::string baseConfig = generateBaseConfig("diMuonVertexValidation", "tesTrackAnalyzer7.root"); + runTestForAnalyzer(baseConfig, "DiMuonVertexValidation"); +} + +//___________________________________________________________________________________________ +TEST_CASE("EopElecTreeWriter tests", "[EopElecTreeWriter]") { + const std::string baseConfig = generateBaseConfig("eopElecTreeWriter", "tesTrackAnalyzer8.root"); + runTestForAnalyzer(baseConfig, "EopElecTreeWriter"); +} + +//___________________________________________________________________________________________ +TEST_CASE("EopTreeWriter tests", "[EopTreeWriter]") { + const std::string baseConfig = generateBaseConfig("eopTreeWriter", "tesTrackAnalyzer9.root"); + runTestForAnalyzer(baseConfig, "EopTreeWriter"); +} + +//___________________________________________________________________________________________ +TEST_CASE("OverlapValidation tests", "[OverlapValidation]") { + const std::string baseConfig = generateBaseConfig("overlapValidation", "tesTrackAnalyzer10.root"); + runTestForAnalyzer(baseConfig, "OverlapValidation"); +} + +//___________________________________________________________________________________________ +TEST_CASE("PixelBaryCentreAnalyzer tests", "[PixelBaryCentreAnalyzer]") { + const std::string baseConfig = generateBaseConfig("pixelBaryCentreAnalyzer", "tesTrackAnalyzer11.root"); + runTestForAnalyzer(baseConfig, "PixelBaryCentreAnalyzer"); +} + +//___________________________________________________________________________________________ +TEST_CASE("PrimaryVertexValidation tests", "[PrimaryVertexValidation]") { + const std::string baseConfig = generateBaseConfig("primaryVertexValidation", "tesTrackAnalyzer12.root"); + runTestForAnalyzer(baseConfig, "PrimaryVertexValidation"); +} + +//___________________________________________________________________________________________ +TEST_CASE("SplitVertexResolution tests", "[SplitVertexResolution]") { + const std::string baseConfig = generateBaseConfig("splitVertexResolution", "tesTrackAnalyzer13.root"); + runTestForAnalyzer(baseConfig, "SplitVertexResolution"); +} + +//___________________________________________________________________________________________ +TEST_CASE("TrackerGeometryIntoNtuples tests", "[TrackerGeometryIntoNtuples]") { + const std::string baseConfig = generateBaseConfig("trackerGeometryIntoNtuples", "tesTrackAnalyzer14.root"); + runTestForAnalyzer(baseConfig, "TrackerGeometryIntoNtuples"); +} + +//___________________________________________________________________________________________ +TEST_CASE("TrackerOfflineValidation tests", "[TrackerOfflineValidation]") { + const std::string baseConfig = generateBaseConfig("TrackerOfflineValidation", "tesTrackAnalyzer15.root"); + runTestForAnalyzer(baseConfig, "TrackerOfflineValidation"); +} + +//___________________________________________________________________________________________ +TEST_CASE("TrackerGeometryCompare tests", "[TrackerGeometryCompare]") { + const std::string baseConfig = generateBaseConfig("trackerGeometryCompare", "tesTrackAnalyzer16.root"); + runTestForAnalyzer(baseConfig, "trackerGeometryCompare"); } diff --git a/Alignment/OfflineValidation/test/testingScripts/test_unitDiMuonV.sh b/Alignment/OfflineValidation/test/testingScripts/test_unitDiMuonV.sh index 662561dfd0016..6d01a1d61385b 100755 --- a/Alignment/OfflineValidation/test/testingScripts/test_unitDiMuonV.sh +++ b/Alignment/OfflineValidation/test/testingScripts/test_unitDiMuonV.sh @@ -10,7 +10,7 @@ echo "TESTING Alignment/DiMuonV single configuration standalone..." ./cmsRun validation_cfg.py || die "Failure running DiMuonV single configuration standalone" $? popd -echo "TESTING PV merge step" +echo "TESTING DiMuonV merge step" pushd test_yaml/DiMuonV/merge/testUnits/1/ ./DiMuonVmerge validation.json --verbose || die "Failure running DiMuonV merge step" $? popd diff --git a/Alignment/OfflineValidation/test/testingScripts/test_unitMTS.sh b/Alignment/OfflineValidation/test/testingScripts/test_unitMTS.sh new file mode 100755 index 0000000000000..71945e6a00b63 --- /dev/null +++ b/Alignment/OfflineValidation/test/testingScripts/test_unitMTS.sh @@ -0,0 +1,23 @@ +#! /bin/bash + +function die { echo $1: status $2 ; exit $2; } + +echo "TESTING Alignment/MTS single configuration with json..." +pushd test_yaml/MTS/single/testSingleMTS/PromptNewTemplate/1 +./cmsRun validation_cfg.py config=validation.json || die "Failure running MTS single configuration with json" $? + +echo "TESTING Alignment/MTS single configuration standalone..." +./cmsRun validation_cfg.py || die "Failure running MTS single configuration standalone" $? +popd + +pushd test_yaml/MTS/single/testSingleMTS/mp3619/1 +./cmsRun validation_cfg.py config=validation.json || die "Failure running MTS single configuration with json (part 2)" $? + +echo "TESTING Alignment/MTS single configuration standalone..." +./cmsRun validation_cfg.py || die "Failure running MTS single configuration standalone (part 2)" $? +popd + +echo "TESTING MTS merge step" +pushd test_yaml/MTS/merge/testSingleMTS/1 +./MTSmerge validation.json --verbose || die "Failure running MTS merge step" $? +popd diff --git a/Alignment/OfflineValidation/test/unit_test.json b/Alignment/OfflineValidation/test/unit_test.json index b5bba7315f84e..773866c51fec5 100644 --- a/Alignment/OfflineValidation/test/unit_test.json +++ b/Alignment/OfflineValidation/test/unit_test.json @@ -56,7 +56,45 @@ "globaltag": "auto:phase1_2018_realistic", "style": "2101", "title": "unit test" - } + }, + "PromptNewTemplate" : { + "name" : "PromptNewTemplate", + "color" : "1", + "globaltag" : "124X_dataRun3_Prompt_v10", + "style" : "2301", + "title" : "Alignment in prompt with 400V pixel templates", + "conditions" : { + "SiPixelTemplateDBObjectRcd" : { + "connect" : "frontier://FrontierProd/CMS_CONDITIONS", + "tag" : "SiPixelTemplateDBObject_phase1_38T_2022_v9" + }, + "SiPixel2DTemplateDBObjectRcd" : { + "connect" : "frontier://FrontierProd/CMS_CONDITIONS", + "tag" : "SiPixel2DTemplateDBObject_phase1_38T_2022_v9" + } + } + }, + "mp3619" : { + "name" : "mp3619", + "color" : "2", + "globaltag" : "124X_dataRun3_Prompt_v10", + "style" : "2001", + "title" : "mp3619", + "conditions" : { + "TrackerAlignmentRcd" : { + "connect" : "frontier://FrontierProd/CMS_CONDITIONS", + "tag" : "TrackerAlignment_collisions22_v13" + }, + "SiPixelTemplateDBObjectRcd" : { + "connect" : "frontier://FrontierProd/CMS_CONDITIONS", + "tag" : "SiPixelTemplateDBObject_phase1_38T_2022_v9" + }, + "SiPixel2DTemplateDBObjectRcd" : { + "connect" : "frontier://FrontierProd/CMS_CONDITIONS", + "tag" : "SiPixel2DTemplateDBObject_phase1_38T_2022_v9" + } + } + } }, "validations": { "DMR": { @@ -161,6 +199,25 @@ } } }, + "MTS" : { + "merge" : { + "testSingleMTS" : { + "singles" : ["testSingleMTS"] + } + }, + "single" : { + "testSingleMTS" : { + "IOV" : ["1"], + "alignments": ["PromptNewTemplate","mp3619"], + "maxevents" : 200000, + "trackcollection" : "ALCARECOTkAlCosmicsCTF0T", + "tthrbuilder" : "WithAngleAndTemplate", + "usePixelQualityFlag" : "True", + "cosmicsZeroTesla" : "False", + "magneticfield" : 3.8 + } + } + }, "GCP": { "GCPdetUnits": { "levels": "DetUnit", diff --git a/Alignment/OfflineValidation/test/unit_test.yaml b/Alignment/OfflineValidation/test/unit_test.yaml index 19c26174b914f..6274962d8076c 100644 --- a/Alignment/OfflineValidation/test/unit_test.yaml +++ b/Alignment/OfflineValidation/test/unit_test.yaml @@ -44,6 +44,35 @@ alignments: globaltag: auto:phase1_2022_realistic style: 2101 title: unit test + PromptNewTemplate: + name: PromptNewTemplate + color: 1 + globaltag: 124X_dataRun3_Prompt_v10 + style: 2301 + title: Alignment in prompt with 400V pixel templates + conditions: + SiPixelTemplateDBObjectRcd: + connect: frontier://FrontierProd/CMS_CONDITIONS + tag: SiPixelTemplateDBObject_phase1_38T_2022_v9 + SiPixel2DTemplateDBObjectRcd: + connect: frontier://FrontierProd/CMS_CONDITIONS + tag: SiPixel2DTemplateDBObject_phase1_38T_2022_v9 + mp3619: + name: mp3619 + color: 2 + globaltag: 124X_dataRun3_Prompt_v10 + style: 2001 + title: mp3619 + conditions: + TrackerAlignmentRcd: + connect: frontier://FrontierProd/CMS_CONDITIONS + tag: TrackerAlignment_collisions22_v13 + SiPixelTemplateDBObjectRcd: + connect: frontier://FrontierProd/CMS_CONDITIONS + tag: SiPixelTemplateDBObject_phase1_38T_2022_v9 + SiPixel2DTemplateDBObjectRcd: + connect: frontier://FrontierProd/CMS_CONDITIONS + tag: SiPixel2DTemplateDBObject_phase1_38T_2022_v9 validations: DMR: single: @@ -153,6 +182,24 @@ validations: - unitTestDiMuonVMC trackcollection: generalTracks maxevents: 10 + MTS: + merge: + testSingleMTS: + singles: + - testSingleMTS + single: + testSingleMTS: + IOV: + - 1 + alignments: + - PromptNewTemplate + - mp3619 + maxevents: 200000 + trackcollection: ALCARECOTkAlCosmicsCTF0T + tthrbuilder: WithAngleAndTemplate + usePixelQualityFlag: True + cosmicsZeroTesla: False + magneticfield: 3.8 GCP: GCPdetUnits: levels: DetUnit diff --git a/Alignment/ReferenceTrajectories/src/ReferenceTrajectory.cc b/Alignment/ReferenceTrajectories/src/ReferenceTrajectory.cc index 6fe8cc45ab15d..cd55c5564ae84 100644 --- a/Alignment/ReferenceTrajectories/src/ReferenceTrajectory.cc +++ b/Alignment/ReferenceTrajectories/src/ReferenceTrajectory.cc @@ -956,7 +956,14 @@ bool ReferenceTrajectory::addMaterialEffectsLocalGbl(const std::vector rejected + // - for the Phase 2 Strips in PS modules (Length ~ 2.4 cm) is 2.08 => accepted + // - for the Phase 2 Strips in 2S modules (Length ~ 5 cm) is 0.48 => accepted + const double minPrec = 0.3; AlgebraicMatrix OffsetToLocal(5, 2); // dLocal/dU OffsetToLocal[3][0] = 1.; @@ -1038,7 +1045,14 @@ bool ReferenceTrajectory::addMaterialEffectsCurvlinGbl(const std::vector rejected + // - for the Phase 2 Strips in PS modules (Length ~ 2.4 cm) is 2.08 => accepted + // - for the Phase 2 Strips in 2S modules (Length ~ 5 cm) is 0.48 => accepted + const double minPrec = 0.3; int ierr = 0; AlgebraicMatrix OffsetToCurv(5, 2); // dCurv/dU diff --git a/CalibCalorimetry/EBPhase2TPGTools/BuildFile.xml b/CalibCalorimetry/EBPhase2TPGTools/BuildFile.xml new file mode 100644 index 0000000000000..07af00943a026 --- /dev/null +++ b/CalibCalorimetry/EBPhase2TPGTools/BuildFile.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/CalibCalorimetry/EBPhase2TPGTools/plugins/BuildFile.xml b/CalibCalorimetry/EBPhase2TPGTools/plugins/BuildFile.xml new file mode 100644 index 0000000000000..a9dd20350ca2f --- /dev/null +++ b/CalibCalorimetry/EBPhase2TPGTools/plugins/BuildFile.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/CalibCalorimetry/EBPhase2TPGTools/plugins/EcalEBPhase2TPParamProducer.cc b/CalibCalorimetry/EBPhase2TPGTools/plugins/EcalEBPhase2TPParamProducer.cc new file mode 100644 index 0000000000000..fee2d6b50f29e --- /dev/null +++ b/CalibCalorimetry/EBPhase2TPGTools/plugins/EcalEBPhase2TPParamProducer.cc @@ -0,0 +1,435 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +// +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" +#include "Geometry/EcalMapping/interface/EcalMappingRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h" +#include "DataFormats/EcalDigi/interface/EcalConstants.h" +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EcalDetId/interface/EBDetId.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +/** +\class EcalEBPhase2TPParamProducer +\author L. Lutton, N. Marinelli - Univ. of Notre Dame +\brief TPG Param Builder for Phase2 +*/ + +class EcalEBPhase2TPParamProducer : public edm::one::EDAnalyzer<> { +public: + explicit EcalEBPhase2TPParamProducer(edm::ParameterSet const& pSet); + ~EcalEBPhase2TPParamProducer() override; + void analyze(const edm::Event& evt, const edm::EventSetup& evtSetup) override; + void beginJob() override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + std::vector computeWeights(int type); + + void getNumericalDeriv(TGraph graph, TGraph& deriv); + void fillFMat(std::vector clockSampleSet, + bool useThirdPulse, + std::vector sampleSet, + std::vector sampleDotSet, + TMatrix& FMat, + unsigned int binOfMaximum); + void getGMatrix(TMatrix FMat, float scaleMatrixBy, TMatrix& GMat); + void getPulseSampleSet(TGraph pulseGraph, float phaseShift, std::vector& sampleSet); + bool computeLinearizerParam(double theta, double gainRatio, double calibCoeff, int& shift, int& mult); + + const edm::ESGetToken theBarrelGeometryToken_; + const edm::FileInPath inFile_; + const std::string outFile_; + const int nSamplesToUse_; + const bool useBXPlusOne_; + const double phaseShift_; + const unsigned int nWeightGroups_; + const edm::ESGetToken theEcalTPGPedestals_Token_; + + gzFile out_file_; + TGraph* thePulse_; + TGraph* pulseDot_; + + const UInt_t NPoints_ = 1599; //With the CMSSW pulse + + static constexpr float norm_ = 1 / 503.109; // with the CMSSW pulse shape + static constexpr float offset_ = 0.; // with the CMSSW pulse shape + int multToInt_ = 0x1000; + + int i2cSub_[2] = {0, 0}; + + const double et_sat_; + const double xtal_LSB_; + const unsigned int binOfMaximum_; + static const int linTopRange_; +}; + +EcalEBPhase2TPParamProducer::EcalEBPhase2TPParamProducer(edm::ParameterSet const& pSet) + : theBarrelGeometryToken_(esConsumes(edm::ESInputTag("", "EcalBarrel"))), + inFile_(pSet.getParameter("inputFile")), + outFile_(pSet.getUntrackedParameter("outputFile")), + nSamplesToUse_(pSet.getParameter("nSamplesToUse")), + useBXPlusOne_(pSet.getParameter("useBXPlusOne")), + phaseShift_(pSet.getParameter("phaseShift")), + nWeightGroups_(pSet.getParameter("nWeightGroups")), + theEcalTPGPedestals_Token_(esConsumes(edm::ESInputTag("EcalLiteDTUPedestals", ""))), + et_sat_(pSet.getParameter("Et_sat")), + xtal_LSB_(pSet.getParameter("xtal_LSB")), + binOfMaximum_(pSet.getParameter("binOfMaximum")) + +{ + out_file_ = gzopen(outFile_.c_str(), "wb"); + + std::string filename = inFile_.fullPath(); + TFile* inFile = new TFile(filename.c_str(), "READ"); + + inFile->GetObject("average-pulse", thePulse_); + delete inFile; + + if (binOfMaximum_ != 6 && binOfMaximum_ != 8) + edm::LogError("EcalEBPhase2TPParamProducer") + << " Value for binOfMaximum " << binOfMaximum_ << " is wrong, The default binOfMaximum=6 will be used"; + + if (nSamplesToUse_ != 6 && nSamplesToUse_ != 8 && nSamplesToUse_ != 12) + edm::LogError("EcalEBPhase2TPParamProducer") + << " Value for nSamplesToUse " << nSamplesToUse_ << " is wrong, The default nSamplesToUse=8 will be used"; +} + +EcalEBPhase2TPParamProducer::~EcalEBPhase2TPParamProducer() { gzclose(out_file_); } + +void EcalEBPhase2TPParamProducer::beginJob() {} + +void EcalEBPhase2TPParamProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("inputFile"); + desc.addUntracked("outputFile"); + desc.add("nSamplesToUse", 8); + desc.add("useBXPlusOne", false); + desc.add("phaseShift", 2.581); + desc.add("nWeightGroups", 61200); + desc.add("Et_sat", 1998.36); + desc.add("xtal_LSB", 0.0488); + desc.add("binOfMaximum", 6); + descriptions.add("ecalEBPhase2TPParamProducerDefault", desc); +} + +void EcalEBPhase2TPParamProducer::analyze(const edm::Event& evt, const edm::EventSetup& evtSetup) { + using namespace edm; + using namespace std; + + const EcalLiteDTUPedestals* peds = nullptr; + const auto* theBarrelGeometry = &evtSetup.getData(theBarrelGeometryToken_); + const auto* theEcalTPPedestals = &evtSetup.getData(theEcalTPGPedestals_Token_); + + std::string tmpStringConv; + const char* tmpStringOut; + + // Compute weights // + std::vector ampWeights[nWeightGroups_]; + std::vector timeWeights[nWeightGroups_]; + + for (unsigned int iGr = 0; iGr < nWeightGroups_; iGr++) { + ampWeights[iGr] = computeWeights(1); + timeWeights[iGr] = computeWeights(2); + } + + /* write to compressed file */ + std::stringstream toCompressStream(""); + for (unsigned int iGr = 0; iGr < nWeightGroups_; iGr++) { + toCompressStream << " WEIGHTAMP " << dec << iGr << std::endl; + for (long unsigned int i = 0; i < ampWeights[iGr].size(); i++) { + if (ampWeights[iGr][i] < 0) + toCompressStream << "-0x" << std::hex << abs(ampWeights[iGr][i]) << " "; + else + toCompressStream << "0x" << std::hex << ampWeights[iGr][i] << " "; + } + toCompressStream << "\n"; + } + toCompressStream << "\n"; + tmpStringConv = toCompressStream.str(); + tmpStringOut = tmpStringConv.c_str(); + gzwrite(out_file_, tmpStringOut, std::strlen(tmpStringOut)); + toCompressStream.str(std::string()); + + for (unsigned int iGr = 0; iGr < nWeightGroups_; iGr++) { + toCompressStream << "WEIGHTTIME " << dec << iGr << std::endl; + for (long unsigned int i = 0; i < timeWeights[iGr].size(); i++) { + if (timeWeights[iGr][i] < 0) + toCompressStream << "-0x" << std::hex << abs(timeWeights[iGr][i]) << " "; + else + toCompressStream << "0x" << std::hex << timeWeights[iGr][i] << " "; + } + toCompressStream << "\n"; + } + + toCompressStream << "\n"; + tmpStringConv = toCompressStream.str(); + tmpStringOut = tmpStringConv.c_str(); + gzwrite(out_file_, tmpStringOut, std::strlen(tmpStringOut)); + toCompressStream.str(std::string()); + + // fill map between xTals and groups. If each xTal is a group there is a one-to-one map + const std::vector& ebCells = theBarrelGeometry->getValidDetIds(DetId::Ecal, EcalBarrel); + std::map mapXtalToGroup; + + int iGroup = 0; + for (const auto& it : ebCells) { + EBDetId id(it); + std::pair xTalToGroup(id.rawId(), iGroup); + mapXtalToGroup.insert(xTalToGroup); + iGroup++; + } + + //write to file + + for (std::map::const_iterator it = mapXtalToGroup.begin(); it != mapXtalToGroup.end(); it++) { + toCompressStream << "CRYSTAL " << dec << it->first << std::endl; + toCompressStream << it->second << std::endl; + } + tmpStringConv = toCompressStream.str(); + tmpStringOut = tmpStringConv.c_str(); + gzwrite(out_file_, tmpStringOut, std::strlen(tmpStringOut)); + toCompressStream.str(std::string()); + + ///////////////////////////////////// + + for (const auto& it : ebCells) { + EBDetId id(it); + toCompressStream << "LINCONST " << dec << id.rawId() << std::endl; + double theta = theBarrelGeometry->getGeometry(id)->getPosition().theta(); + EcalLiteDTUPedestalsMap::const_iterator itped = theEcalTPPedestals->getMap().find(id); + + if (itped != theEcalTPPedestals->end()) { + peds = &(*itped); + + } else { + edm::LogError("EcalEBPhase2TPParamProducer") << " could not find EcalLiteDTUPedestal entry for " << id; + throw cms::Exception("could not find pedestals"); + } + + int shift, mult; + double calibCoeff = 1.; + bool ok; + for (unsigned int i = 0; i < ecalPh2::NGAINS; ++i) { + ok = computeLinearizerParam(theta, ecalph2::gains[ecalPh2::NGAINS - 1 - i], calibCoeff, shift, mult); + if (!ok) { + edm::LogError("EcalEBPhase2TPParamProducer") + << "unable to compute the parameters for SM=" << id.ism() << " xt=" << id.ic() << " " << id.rawId(); + throw cms::Exception("unable to compute the parameters"); + + } else { + int tmpPedByGain = (int)(peds->mean(i) + 0.5); + toCompressStream << std::hex << " 0x" << tmpPedByGain << " 0x" << mult << " 0x" << shift << " " << i2cSub_[i] + << std::endl; + } + } + } + tmpStringConv = toCompressStream.str(); + tmpStringOut = tmpStringConv.c_str(); + gzwrite(out_file_, tmpStringOut, std::strlen(tmpStringOut)); + toCompressStream.str(std::string()); +} + +std::vector EcalEBPhase2TPParamProducer::computeWeights(int type) { + std::vector sampleSet; + std::vector sampleDotSet; + std::vector clockSampleSet; + double scaleMatrixBy = 1.; + int lbinOfMaximum = binOfMaximum_; + + switch (binOfMaximum_) { + case 6: + break; + case 8: + break; + default: + lbinOfMaximum = 6; + break; + } + + switch (nSamplesToUse_) { + case 12: + clockSampleSet = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + break; + case 8: + switch (lbinOfMaximum) { + case 8: + clockSampleSet = {2, 3, 4, 5, 6, 7, 8, 9}; + break; + case 6: + clockSampleSet = {0, 1, 2, 3, 4, 5, 6, 7}; + break; + } + break; + + case 6: + switch (lbinOfMaximum) { + case 8: + clockSampleSet = {3, 4, 6, 7, 8, 9}; + break; + case 6: + clockSampleSet = {1, 2, 4, 5, 6, 7}; + break; + } + break; + + default: + clockSampleSet = {0, 1, 2, 3, 4, 5, 6, 7}; + break; + } + + getPulseSampleSet(*thePulse_, phaseShift_, sampleSet); + pulseDot_ = new TGraph(); + getNumericalDeriv(*thePulse_, *pulseDot_); + getPulseSampleSet(*pulseDot_, phaseShift_, sampleDotSet); + + unsigned int fMatColumns = useBXPlusOne_ ? 6 : 4; + + TMatrix fMat(clockSampleSet.size(), fMatColumns); + fillFMat(clockSampleSet, useBXPlusOne_, sampleSet, sampleDotSet, fMat, lbinOfMaximum); + TMatrix gMat(fMatColumns, clockSampleSet.size()); + + getGMatrix(fMat, scaleMatrixBy, gMat); + + std::vector tmpWeightVec; + std::vector tmpTimeWeightVec; + unsigned int iClock = 0; + for (unsigned int iSample = 0; iSample < 12; iSample++) { + bool inSampleSet = false; + for (unsigned int clockSample = 0; clockSample < clockSampleSet.size(); clockSample++) { + if (iSample == clockSampleSet[clockSample]) { + inSampleSet = true; + iClock = clockSample; + break; + } + } + if (inSampleSet) { + if (type == 1) + tmpWeightVec.push_back(round(gMat(2, iClock) * multToInt_)); // amp weights + if (type == 2) + tmpWeightVec.push_back(round(gMat(3, iClock) * multToInt_)); // time weights + } else { + if (type == 1) + tmpWeightVec.push_back(0); // amp weights + if (type == 2) + tmpWeightVec.push_back(0); // time weights + } + } + + return tmpWeightVec; +} + +void EcalEBPhase2TPParamProducer::getNumericalDeriv(TGraph graph, TGraph& deriv) { + UInt_t numPoints = graph.GetN(); + if (numPoints != NPoints_) { + edm::LogWarning("EcalEBPhase2TPParamProducer") << "Error! Wrong amount of points in pulse graph! "; + } + Double_t xval; + Double_t yval; + Double_t xvalPOne; + Double_t yvalPOne; + + for (UInt_t p = 0; p < NPoints_ - 1; p++) { + graph.GetPoint(p, xval, yval); + graph.GetPoint(p + 1, xvalPOne, yvalPOne); + float midpoint = (xvalPOne + xval) / 2; + float rise = yvalPOne - yval; + float run = xvalPOne - xval; + deriv.SetPoint(deriv.GetN(), midpoint, rise / run); + } + deriv.SetName("pulse_prime"); +} + +void EcalEBPhase2TPParamProducer::fillFMat(std::vector clockSampleSet, + bool useThirdPulse, + std::vector sampleSet, + std::vector sampleDotSet, + TMatrix& fMat, + uint binOfMaximum) { + Int_t iShift = 8 - binOfMaximum; + for (UInt_t i = 0; i < clockSampleSet.size(); i++) { + Int_t tmpClockToSample = clockSampleSet[i] + iShift; + fMat(i, 0) = sampleSet[tmpClockToSample]; + fMat(i, 1) = sampleDotSet[tmpClockToSample]; + if (tmpClockToSample > 4) { + fMat(i, 2) = sampleSet[tmpClockToSample - 4]; + fMat(i, 3) = sampleDotSet[tmpClockToSample - 4]; + } + if (clockSampleSet[i] > 8 && useThirdPulse) { + fMat(i, 4) = sampleSet[tmpClockToSample - 8]; + fMat(i, 5) = sampleDotSet[tmpClockToSample - 8]; + } + } +} + +void EcalEBPhase2TPParamProducer::getGMatrix(TMatrix fMat, float scaleMatrixBy, TMatrix& gMat) { + TMatrix FT = fMat; + FT.T(); + TMatrix tmpFT = FT; + TMatrix FTDotF = TMatrix(tmpFT, TMatrix::kMult, fMat); + TMatrix InvFTDotF = FTDotF; + + //Possible for this bit to fail depending on the sample set and phase shift + InvFTDotF.Invert(); + + TMatrix tmpMat(InvFTDotF, TMatrix::kMult, FT); + gMat = tmpMat; + gMat *= scaleMatrixBy; +} + +void EcalEBPhase2TPParamProducer::getPulseSampleSet(TGraph pulseGraph, + float phaseShift, + std::vector& sampleSet) { + for (UInt_t i = 0; i < ecalPh2::sampleSize; i++) { + float t = (ecalPh2::Samp_Period * i) + phaseShift; + float y = pulseGraph.Eval(t + offset_) * norm_; + sampleSet.push_back(y); + } +} + +bool EcalEBPhase2TPParamProducer::computeLinearizerParam( + double theta, double gainRatio, double calibCoeff, int& shift, int& mult) { + bool result = false; + + static constexpr double linTopRange_ = 16383.; + // linTopRange_ 16383 = (2**14)-1 is setting the top of the range for the linearizer output + double factor = (linTopRange_ * (xtal_LSB_ * gainRatio * calibCoeff * sin(theta))) / et_sat_; + //first with shift_ = 0 + //add 0.5 (for rounding) and set to int + //Here we are getting mult with a max bit length of 8 + //and shift_ with a max bit length of 4 + mult = (int)(factor + 0.5); + for (shift = 0; shift < 15; shift++) { + if (mult >= 128 && mult < 256) { + result = true; + break; + } + factor *= 2; + mult = (int)(factor + 0.5); + } + + return result; +} + +// DEfine this module as a plug-in +DEFINE_FWK_MODULE(EcalEBPhase2TPParamProducer); diff --git a/CalibCalorimetry/EBPhase2TPGTools/python/ecalEBPhase2TPParamProducer_cfi.py b/CalibCalorimetry/EBPhase2TPGTools/python/ecalEBPhase2TPParamProducer_cfi.py new file mode 100644 index 0000000000000..1faa813593464 --- /dev/null +++ b/CalibCalorimetry/EBPhase2TPGTools/python/ecalEBPhase2TPParamProducer_cfi.py @@ -0,0 +1,24 @@ +import FWCore.ParameterSet.Config as cms + +EBPhase2TPGParamProducer = cms.EDAnalyzer("EcalEBPhase2TPParamProducer", +inputFile = cms.FileInPath('SimCalorimetry/EcalEBTrigPrimProducers/data/CMSSWPhaseIIPulseGraphAlt.root'), +outputFile = cms.untracked.string('../../../SimCalorimetry/EcalEBTrigPrimProducers/data/AmpTimeOnPeakXtalWeightsCMSSWPulse_8samples_peakOnSix_WithAndyFixes.txt.gz'), + nSamplesToUse = cms.uint32(8), + useBXPlusOne = cms.bool(False), + phaseShift = cms.double (2.581), + nWeightGroups = cms.uint32(61200), + Et_sat = cms.double(1998.36), + xtal_LSB = cms.double(0.0488), + binOfMaximum = cms.uint32(6) + + +## allowed values of nSamplesToUse: 12, 8, 6. nSamplesToUse=8 is the default +## allowed values of binOfMaximum: 6, 8. binOfMaximum=6 is the default +#### The DEFAULT is nSamplesToUse=8, binOfMaximum=6 ####### + +## If nSamplesToUse is 12 ==> useBXPlusOne is True +## If nSamplesToUse is 8 ==> useBXPlusOne is False +## If nSamplesToUse is 6 ==> useBXPlusOne is False + +) + diff --git a/CalibCalorimetry/EBPhase2TPGTools/test/runEBPhase2TPParamProducer.py b/CalibCalorimetry/EBPhase2TPGTools/test/runEBPhase2TPParamProducer.py new file mode 100644 index 0000000000000..eea149b2c2029 --- /dev/null +++ b/CalibCalorimetry/EBPhase2TPGTools/test/runEBPhase2TPParamProducer.py @@ -0,0 +1,91 @@ +import FWCore.ParameterSet.Config as cms +import CondTools.Ecal.db_credentials as auth +import FWCore.ParameterSet.VarParsing as VarParsing + + +from Configuration.Eras.Era_Phase2C17I13M9_cff import Phase2C17I13M9 +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel + + +#process = cms.Process("ProdTPGParam") +process = cms.Process('DIGI',Phase2C17I13M9,phase2_ecal_devel) + +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2026D88Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2026D88_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedHLLHC14TeV_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +#process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') TO BE FIXED +process.load('CalibCalorimetry.EBPhase2TPGTools.ecalEBPhase2TPParamProducer_cfi') +""" +options = VarParsing.VarParsing('tpg') + +options.register ('outFile', + 'testtest.txt', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Output file") + +options.parseArguments() +""" +# Calo geometry service model +#process.load("Configuration.StandardSequences.GeometryDB_cff") + +# ecal mapping +process.eegeom = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalMappingRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +# Get hardcoded conditions the same used for standard digitization before CMSSW_3_1_x +## process.load("CalibCalorimetry.EcalTrivialCondModules.EcalTrivialCondRetriever_cfi") +# or Get DB parameters +# process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff') +process.load("CondCore.CondDB.CondDB_cfi") + +process.CondDB.connect = 'frontier://FrontierProd/CMS_CONDITIONS' +process.CondDB.DBParameters.authenticationPath = '/nfshome0/popcondev/conddb' ###P5 stuff + +""" +process.PoolDBESSource = cms.ESSource("PoolDBESSource", + process.CondDB, + timetype = cms.untracked.string('runnumber'), + toGet = cms.VPSet( + cms.PSet( + record = cms.string('EcalPedestalsRcd'), + #tag = cms.string('EcalPedestals_v5_online') + #tag = cms.string('EcalPedestals_2009runs_hlt') ### obviously diff w.r.t previous + tag = cms.string('EcalPedestals_hlt'), ### modif-alex 22/02/2011 + ), + cms.PSet( + record = cms.string('EcalMappingElectronicsRcd'), + tag = cms.string('EcalMappingElectronics_EEMap_v1_mc') + ) + ) + ) +""" + +######################### +process.source = cms.Source("EmptySource", + ##firstRun = cms.untracked.uint32(100000000) ### need to use latest run to pick-up update values from DB + firstRun = cms.untracked.uint32(161310) +) + + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1) +) + + + +process.p = cms.Path(process.EBPhase2TPGParamProducer) diff --git a/CalibMuon/DTCalibration/plugins/DTGeometryParserFromDDD.cc b/CalibMuon/DTCalibration/plugins/DTGeometryParserFromDDD.cc index ab9c57624aac6..62462e6c70c59 100644 --- a/CalibMuon/DTCalibration/plugins/DTGeometryParserFromDDD.cc +++ b/CalibMuon/DTCalibration/plugins/DTGeometryParserFromDDD.cc @@ -24,16 +24,14 @@ DTGeometryParserFromDDD::DTGeometryParserFromDDD( } catch (const cms::Exception& e) { std::cerr << "DTGeometryParserFromDDD::build() : DDD Exception: something went wrong during XML parsing!" << std::endl - << " Message: " << e << std::endl - << " Terminating execution ... " << std::endl; + << " Message: " << e << std::endl; throw; } catch (const exception& e) { std::cerr << "DTGeometryParserFromDDD::build() : an unexpected exception occured: " << e.what() << std::endl; throw; } catch (...) { - std::cerr << "DTGeometryParserFromDDD::build() : An unexpected exception occured!" << std::endl - << " Terminating execution ... " << std::endl; - std::unexpected(); + std::cerr << "DTGeometryParserFromDDD::build() : An unexpected exception occured!" << std::endl; + throw; } } diff --git a/CalibPPS/ESProducers/plugins/CTPPSBeamParametersFromLHCInfoESSource.cc b/CalibPPS/ESProducers/plugins/CTPPSBeamParametersFromLHCInfoESSource.cc index 27b33c4eeada6..1b921e643c666 100644 --- a/CalibPPS/ESProducers/plugins/CTPPSBeamParametersFromLHCInfoESSource.cc +++ b/CalibPPS/ESProducers/plugins/CTPPSBeamParametersFromLHCInfoESSource.cc @@ -13,7 +13,7 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondTools/RunInfo/interface/LHCInfoCombined.h" #include "CondFormats/DataRecord/interface/CTPPSBeamParametersRcd.h" #include "CondFormats/RunInfo/interface/LHCInfo.h" @@ -31,7 +31,10 @@ class CTPPSBeamParametersFromLHCInfoESSource : public edm::ESProducer { static void fillDescriptions(edm::ConfigurationDescriptions&); private: - const edm::ESGetToken lhcInfoToken_; + edm::ESGetToken lhcInfoToken_; + edm::ESGetToken lhcInfoPerLSToken_; + edm::ESGetToken lhcInfoPerFillToken_; + const bool useNewLHCInfo_; CTPPSBeamParameters defaultParameters_; }; @@ -39,8 +42,12 @@ class CTPPSBeamParametersFromLHCInfoESSource : public edm::ESProducer { //---------------------------------------------------------------------------------------------------- CTPPSBeamParametersFromLHCInfoESSource::CTPPSBeamParametersFromLHCInfoESSource(const edm::ParameterSet& iConfig) - : lhcInfoToken_( - setWhatProduced(this).consumes(edm::ESInputTag("", iConfig.getParameter("lhcInfoLabel")))) { + : useNewLHCInfo_(iConfig.getParameter("useNewLHCInfo")) { + auto cc = setWhatProduced(this); + lhcInfoToken_ = cc.consumes(edm::ESInputTag("", iConfig.getParameter("lhcInfoLabel"))); + lhcInfoPerLSToken_ = cc.consumes(edm::ESInputTag("", iConfig.getParameter("lhcInfoPerLSLabel"))); + lhcInfoPerFillToken_ = cc.consumes(edm::ESInputTag("", iConfig.getParameter("lhcInfoPerFillLabel"))); + defaultParameters_.setBeamDivergenceX45(iConfig.getParameter("beamDivX45")); defaultParameters_.setBeamDivergenceY45(iConfig.getParameter("beamDivX56")); defaultParameters_.setBeamDivergenceX56(iConfig.getParameter("beamDivY45")); @@ -62,13 +69,16 @@ CTPPSBeamParametersFromLHCInfoESSource::CTPPSBeamParametersFromLHCInfoESSource(c std::unique_ptr CTPPSBeamParametersFromLHCInfoESSource::produce( const CTPPSBeamParametersRcd& iRecord) { - LHCInfo const& lhcInfo = iRecord.get(lhcInfoToken_); + auto lhcInfoCombined = + LHCInfoCombined::createLHCInfoCombined>( + iRecord, lhcInfoPerLSToken_, lhcInfoPerFillToken_, lhcInfoToken_, useNewLHCInfo_); auto bp = std::make_unique(defaultParameters_); - const auto beamMom = lhcInfo.energy(); - const auto betaStar = lhcInfo.betaStar() * 1E2; // conversion m --> cm - const auto xangle = lhcInfo.crossingAngle() * 1E-6; // conversion mu rad --> rad + const auto beamMom = lhcInfoCombined.energy; + const auto betaStar = lhcInfoCombined.betaStarX * 1E2; // conversion m --> cm + const auto xangle = lhcInfoCombined.crossingAngle() * 1E-6; // conversion mu rad --> rad bp->setBeamMom45(beamMom); bp->setBeamMom56(beamMom); @@ -92,6 +102,9 @@ void CTPPSBeamParametersFromLHCInfoESSource::fillDescriptions(edm::Configuration edm::ParameterSetDescription desc; desc.add("lhcInfoLabel", ""); + desc.add("lhcInfoPerLSLabel", ""); + desc.add("lhcInfoPerFillLabel", ""); + desc.add("useNewLHCInfo", false); // beam divergence (rad) desc.add("beamDivX45", 0.1); @@ -112,7 +125,7 @@ void CTPPSBeamParametersFromLHCInfoESSource::fillDescriptions(edm::Configuration desc.add("vtxStddevY", 2.e-2); desc.add("vtxStddevZ", 2.e-2); - descriptions.add("ctppsBeamParametersFromLHCInfoESSource", desc); + descriptions.add("ctppsBeamParametersFromLHCInfoESSourceDefault", desc); } //---------------------------------------------------------------------------------------------------- diff --git a/CalibPPS/ESProducers/plugins/CTPPSInterpolatedOpticalFunctionsESSource.cc b/CalibPPS/ESProducers/plugins/CTPPSInterpolatedOpticalFunctionsESSource.cc index e4d0f26bb3c5d..fb25ff49ebee1 100644 --- a/CalibPPS/ESProducers/plugins/CTPPSInterpolatedOpticalFunctionsESSource.cc +++ b/CalibPPS/ESProducers/plugins/CTPPSInterpolatedOpticalFunctionsESSource.cc @@ -62,7 +62,7 @@ void CTPPSInterpolatedOpticalFunctionsESSource::fillDescriptions(edm::Configurat desc.add("opticsLabel", "")->setComment("label of the optics records"); desc.add("useNewLHCInfo", false)->setComment("flag whether to use new LHCInfoPer* records or old LHCInfo"); - descriptions.add("ctppsInterpolatedOpticalFunctionsESSource", desc); + descriptions.add("ctppsInterpolatedOpticalFunctionsESSourceDefault", desc); } //---------------------------------------------------------------------------------------------------- diff --git a/CalibPPS/ESProducers/python/ctppsBeamParametersFromLHCInfoESSource_cfi.py b/CalibPPS/ESProducers/python/ctppsBeamParametersFromLHCInfoESSource_cfi.py new file mode 100644 index 0000000000000..b03973c02cc2a --- /dev/null +++ b/CalibPPS/ESProducers/python/ctppsBeamParametersFromLHCInfoESSource_cfi.py @@ -0,0 +1,8 @@ +from CalibPPS.ESProducers.ctppsBeamParametersFromLHCInfoESSourceDefault_cfi import ctppsBeamParametersFromLHCInfoESSourceDefault as _ctppsBeamParametersFromLHCInfoESSourceDefault +ctppsBeamParametersFromLHCInfoESSource = _ctppsBeamParametersFromLHCInfoESSourceDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsBeamParametersFromLHCInfoESSource, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsBeamParametersFromLHCInfoESSource, useNewLHCInfo = False) diff --git a/CalibPPS/ESProducers/python/ctppsInterpolatedOpticalFunctionsESSource_cff.py b/CalibPPS/ESProducers/python/ctppsInterpolatedOpticalFunctionsESSource_cff.py deleted file mode 100644 index e6cc78ccdd3f9..0000000000000 --- a/CalibPPS/ESProducers/python/ctppsInterpolatedOpticalFunctionsESSource_cff.py +++ /dev/null @@ -1,3 +0,0 @@ -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * -from Configuration.Eras.Modifier_run3_common_cff import run3_common -run3_common.toModify(ctppsInterpolatedOpticalFunctionsESSource, useNewLHCInfo = True) \ No newline at end of file diff --git a/CalibPPS/ESProducers/python/ctppsInterpolatedOpticalFunctionsESSource_cfi.py b/CalibPPS/ESProducers/python/ctppsInterpolatedOpticalFunctionsESSource_cfi.py new file mode 100644 index 0000000000000..25426226c1be7 --- /dev/null +++ b/CalibPPS/ESProducers/python/ctppsInterpolatedOpticalFunctionsESSource_cfi.py @@ -0,0 +1,8 @@ +from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSourceDefault_cfi import ctppsInterpolatedOpticalFunctionsESSourceDefault as _ctppsInterpolatedOpticalFunctionsESSourceDefault +ctppsInterpolatedOpticalFunctionsESSource = _ctppsInterpolatedOpticalFunctionsESSourceDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsInterpolatedOpticalFunctionsESSource, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsInterpolatedOpticalFunctionsESSource, useNewLHCInfo = False) diff --git a/CalibPPS/ESProducers/python/ctppsOpticalFunctions_cff.py b/CalibPPS/ESProducers/python/ctppsOpticalFunctions_cff.py index 00017a8690f84..7a123f6792d0d 100644 --- a/CalibPPS/ESProducers/python/ctppsOpticalFunctions_cff.py +++ b/CalibPPS/ESProducers/python/ctppsOpticalFunctions_cff.py @@ -25,4 +25,4 @@ #ctppsOpticalFunctionsESSource.configuration.append(config_2016_preTS2) # optics interpolation between crossing angles -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cff import * +from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * diff --git a/CalibPPS/ESProducers/python/ctppsOpticalFunctions_non_DB_cff.py b/CalibPPS/ESProducers/python/ctppsOpticalFunctions_non_DB_cff.py index 72f1a07f4bbdd..946d7b3b68e1a 100644 --- a/CalibPPS/ESProducers/python/ctppsOpticalFunctions_non_DB_cff.py +++ b/CalibPPS/ESProducers/python/ctppsOpticalFunctions_non_DB_cff.py @@ -136,4 +136,4 @@ ctppsOpticalFunctionsESSource.configuration.append(optics_2022) # optics interpolation between crossing angles -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cff import * +from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * diff --git a/CalibTracker/SiStripCommon/plugins/SiStripGainCalibTableProducer.cc b/CalibTracker/SiStripCommon/plugins/SiStripGainCalibTableProducer.cc new file mode 100644 index 0000000000000..8a56dcfc9e1cd --- /dev/null +++ b/CalibTracker/SiStripCommon/plugins/SiStripGainCalibTableProducer.cc @@ -0,0 +1,164 @@ +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h" +#include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" +#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h" + +#include "CalibFormats/SiStripObjects/interface/SiStripGain.h" +#include "CalibTracker/Records/interface/SiStripGainRcd.h" + +#include "CalibTracker/SiStripCommon/interface/SiStripOnTrackClusterTableProducerBase.h" + +class SiStripGainCalibTableProducer : public SiStripOnTrackClusterTableProducerBase { +public: + explicit SiStripGainCalibTableProducer(const edm::ParameterSet& params) + : SiStripOnTrackClusterTableProducerBase(params), m_tkGeomToken{esConsumes<>()}, m_gainToken{esConsumes<>()} {} + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("name", "cluster"); + desc.add("doc", ""); + desc.add("extension", false); + desc.add("Tracks", edm::InputTag{"generalTracks"}); + descriptions.add("siStripGainCalibTable", desc); + } + + void fillTable(const std::vector& clusters, + const edm::View& tracks, + nanoaod::FlatTable* table, + const edm::EventSetup& iSetup) final; + +private: + const edm::ESGetToken m_tkGeomToken; + const edm::ESGetToken m_gainToken; + + std::map m_thicknessMap; + double thickness(DetId id, const TrackerGeometry* tGeom); +}; + +namespace { + bool isFarFromBorder(const TrajectoryStateOnSurface& trajState, uint32_t detId, const TrackerGeometry* tGeom) { + const auto gdu = tGeom->idToDetUnit(detId); + if ((!dynamic_cast(gdu)) && (!dynamic_cast(gdu))) { + edm::LogWarning("SiStripGainCalibTableProducer") + << "DetId " << detId << " does not seem to belong to the tracker"; + return false; + } + const auto plane = gdu->surface(); + const auto trapBounds = dynamic_cast(&plane.bounds()); + const auto rectBounds = dynamic_cast(&plane.bounds()); + + static constexpr double distFromBorder = 1.0; + double halfLength = 0.; + if (trapBounds) { + halfLength = trapBounds->parameters()[3]; + } else if (rectBounds) { + halfLength = .5 * gdu->surface().bounds().length(); + } else { + return false; + } + + const auto pos = trajState.localPosition(); + const auto posError = trajState.localError().positionError(); + if (std::abs(pos.y()) + posError.yy() >= (halfLength - distFromBorder)) + return false; + + return true; + } +} // namespace + +double SiStripGainCalibTableProducer::thickness(DetId id, const TrackerGeometry* tGeom) { + const auto it = m_thicknessMap.find(id); + if (m_thicknessMap.end() != it) { + return it->second; + } else { + double detThickness = 1.; + const auto gdu = tGeom->idToDetUnit(id); + const auto isPixel = (dynamic_cast(gdu) != nullptr); + const auto isStrip = (dynamic_cast(gdu) != nullptr); + if (!isPixel && !isStrip) { + edm::LogWarning("SiStripGainCalibTableProducer") + << "DetId " << id.rawId() << " doesn't seem to belong to the Tracker"; + } else { + detThickness = gdu->surface().bounds().thickness(); + } + m_thicknessMap[id] = detThickness; + return detThickness; + } +} + +void SiStripGainCalibTableProducer::fillTable(const std::vector& clusters, + const edm::View& tracks, + nanoaod::FlatTable* table, + const edm::EventSetup& iSetup) { + edm::ESHandle tGeom = iSetup.getHandle(m_tkGeomToken); + edm::ESHandle stripGains = iSetup.getHandle(m_gainToken); + + std::vector c_localdirx; + std::vector c_localdiry; + std::vector c_localdirz; + std::vector c_firststrip; + std::vector c_nstrips; + std::vector c_saturation; + std::vector c_overlapping; + std::vector c_farfromedge; + std::vector c_charge; + std::vector c_path; + // NOTE only very few types are supported by NanoAOD, but more could be added (to discuss with XPOG / core software) + // NOTE removed amplitude vector, I don't think it was used anywhere + std::vector c_gainused; // NOTE was double + std::vector c_gainusedTick; // NOTE was double + for (const auto clus : clusters) { + const auto& ampls = clus.cluster->amplitudes(); + const int firstStrip = clus.cluster->firstStrip(); + const int nStrips = ampls.size(); + double prevGain = -1; + double prevGainTick = -1; + if (stripGains.isValid()) { + prevGain = stripGains->getApvGain(firstStrip / 128, stripGains->getRange(clus.det, 1), 1); + prevGainTick = stripGains->getApvGain(firstStrip / 128, stripGains->getRange(clus.det, 0), 1); + } + const unsigned int charge = clus.cluster->charge(); + const bool saturation = std::any_of(ampls.begin(), ampls.end(), [](uint8_t amp) { return amp >= 254; }); + + const bool overlapping = (((firstStrip % 128) == 0) || ((firstStrip / 128) != ((firstStrip + nStrips) / 128)) || + (((firstStrip + nStrips) % 128) == 127)); + const auto& trajState = clus.measurement.updatedState(); + const auto trackDir = trajState.localDirection(); + const auto cosine = trackDir.z() / trackDir.mag(); + const auto path = (10. * thickness(clus.det, tGeom.product())) / std::abs(cosine); + const auto farFromEdge = isFarFromBorder(trajState, clus.det, tGeom.product()); + c_localdirx.push_back(trackDir.x()); + c_localdiry.push_back(trackDir.y()); + c_localdirz.push_back(trackDir.z()); + c_firststrip.push_back(firstStrip); + c_nstrips.push_back(nStrips); + c_saturation.push_back(saturation); + c_overlapping.push_back(overlapping); + c_farfromedge.push_back(farFromEdge); + c_charge.push_back(charge); + c_path.push_back(path); + c_gainused.push_back(prevGain); + c_gainusedTick.push_back(prevGainTick); + } + // addColumn(table, "localdirx", c_localdirx, ""); + // addColumn(table, "localdiry", c_localdiry, ""); + // addColumn(table, "localdirz", c_localdirz, ""); + // addColumn(table, "firststrip", c_firststrip, ""); + // addColumn(table, "nstrips", c_nstrips, ""); + addColumn(table, "saturation", c_saturation, ""); + addColumn(table, "overlapping", c_overlapping, ""); + addColumn(table, "farfromedge", c_farfromedge, ""); + addColumn(table, "charge", c_charge, ""); + // addColumn(table, "path", c_path, ""); + // ExtendedCalibTree: also charge/path + addColumn(table, "gainused", c_gainused, ""); + addColumn(table, "gainusedTick", c_gainusedTick, ""); +} + +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(SiStripGainCalibTableProducer); diff --git a/CalibTracker/SiStripCommon/plugins/TkInstLumiTableProducer.cc b/CalibTracker/SiStripCommon/plugins/TkInstLumiTableProducer.cc new file mode 100644 index 0000000000000..a422e1309ece3 --- /dev/null +++ b/CalibTracker/SiStripCommon/plugins/TkInstLumiTableProducer.cc @@ -0,0 +1,73 @@ +#include "DataFormats/NanoAOD/interface/FlatTable.h" +#include "DataFormats/OnlineMetaData/interface/OnlineLuminosityRecord.h" +#include "DataFormats/Scalers/interface/LumiScalers.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +class TkInstLumiTableProducer : public edm::stream::EDProducer<> { +public: + explicit TkInstLumiTableProducer(const edm::ParameterSet& params) + : m_name(params.getParameter("name")), + m_doc(params.existsAs("doc") ? params.getParameter("doc") : ""), + m_extension(params.existsAs("extension") ? params.getParameter("extension") : false), + m_scalerToken(consumes(params.getParameter("lumiScalers"))), + m_metaDataToken(consumes(params.getParameter("metadata"))) { + produces(); + } + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("name", ""); + desc.add("doc", ""); + desc.add("extension", false); + desc.add("lumiScalers", edm::InputTag("scalersRawToDigi")); + desc.add("metadata", edm::InputTag("onlineMetaDataDigis")); + descriptions.add("tkInstLumiTable", desc); + } + + void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; + +private: + const std::string m_name; + const std::string m_doc; + bool m_extension; + + const edm::EDGetTokenT m_scalerToken; + const edm::EDGetTokenT m_metaDataToken; +}; + +void TkInstLumiTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + auto out = std::make_unique(1, m_name, true, m_extension); + + out->addColumnValue("bx", iEvent.bunchCrossing(), "Bunch-crossing ID"); + + float instLumi{0.}, pu{0.}; + edm::Handle lumiScalers = iEvent.getHandle(m_scalerToken); + edm::Handle metaData = iEvent.getHandle(m_metaDataToken); + + if (lumiScalers.isValid() && !lumiScalers->empty()) { + if (lumiScalers->begin() != lumiScalers->end()) { + instLumi = lumiScalers->begin()->instantLumi(); + pu = lumiScalers->begin()->pileup(); + } + } else if (metaData.isValid()) { + instLumi = metaData->instLumi(); + pu = metaData->avgPileUp(); + } else { + edm::LogInfo("TkInstLumiTableProducer") + << "Luminosity related collections not found in the event; will write dummy values"; + } + + out->addColumnValue("instLumi", instLumi, "Instantaneous luminosity"); + out->addColumnValue("PU", pu, "Pileup"); + + iEvent.put(std::move(out)); +} + +#include "FWCore/PluginManager/interface/ModuleDef.h" +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(TkInstLumiTableProducer); diff --git a/CalibTracker/SiStripCommon/test/testCalibTree_nano.py b/CalibTracker/SiStripCommon/test/testCalibTree_nano.py new file mode 100644 index 0000000000000..ffdf36102538f --- /dev/null +++ b/CalibTracker/SiStripCommon/test/testCalibTree_nano.py @@ -0,0 +1,99 @@ +from __future__ import print_function + +## adapted from produceCalibrationTree_template_cfg.py + +import FWCore.ParameterSet.Config as cms +##from CalibTracker.SiStripCommon.shallowTree_test_template import * ## TODO get rid of this one + +process = cms.Process('CALIB') +process.load('Configuration/StandardSequences/MagneticField_cff') +process.load('Configuration.Geometry.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, "auto:run3_data_PromptAnalysis") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.StandardSequences.Services_cff') + +process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(-1)) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring("/store/express/Run2023F/StreamExpress/ALCARECO/SiStripCalMinBias-Express-v1/000/373/710/00000/e2df2f78-b95a-4f33-ae22-add59aa2903f.root")) + +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) +process.MessageLogger.cerr.FwkReport.reportEvery = 10000 + +inTracks = cms.InputTag("ALCARECOSiStripCalMinBias") + +process.load('CalibTracker.SiStripCommon.prescaleEvent_cfi') +process.load('CalibTracker.Configuration.Filter_Refit_cff') +## use CalibrationTracks (for clusters) and CalibrationTracksRefit (for tracks) +process.CalibrationTracks.src = inTracks + +tracksForCalib = cms.InputTag("CalibrationTracksRefit") + +process.prescaleEvent.prescale = 1 + +process.TkCalSeq = cms.Sequence(process.prescaleEvent*process.MeasurementTrackerEvent*process.trackFilterRefit) + +process.load("PhysicsTools.NanoAOD.nano_cff") +process.load("PhysicsTools.NanoAOD.NanoAODEDMEventContent_cff") + +## as a test: it should be possible to add tracks fully at configuration level (+ declaring the plugin) +from PhysicsTools.NanoAOD.common_cff import * +## this is equivalent to ShallowTrackProducer as configured for the gain calibration +process.tracksTable = cms.EDProducer("SimpleTrackFlatTableProducer", + src=tracksForCalib, + cut=cms.string(""), + name=cms.string("track"), + doc=cms.string("SiStripCalMinBias ALCARECO tracks"), + singleton=cms.bool(False), + extension=cms.bool(False), + variables=cms.PSet( + #chi2=Var("chi2()", float), + #ndof=Var("ndof()", int), + chi2ndof=Var("chi2()/ndof", float), + #charge=Var("charge()", float), + momentum=Var("p()", float), + pt=Var("pt()", float), + #pterr=Var("ptError()", float), + hitsvalid=Var("numberOfValidHits()", int), ## unsigned? + #hitslost=Var("numberOfLostHits()", int), ## unsigned? + #theta=Var("theta()", float), + #thetaerr=Var("thetaError()", float), + phi=Var("phi()", float), + #phierr=Var("phiError()", float), + eta=Var("eta()", float), + #etaerr=Var("etaError()", float), + #dxy=Var("dxy()", float), + #dxyerr=Var("dxyError()", float), + #dsz=Var("dsz()", float), + #dszerr=Var("dszError()", float), + #qoverp=Var("qoverp()", float), + #qoverperr=Var("qoverpError()", float), + #vx=Var("vx()", float), + #vy=Var("vy()", float), + #vz=Var("vz()", float), + algo=Var("algo()", int) + ) + ) +process.load("CalibTracker.SiStripCommon.tkInstLumiTable_cfi") +process.tkInstLumiTable.extension = True +process.load("CalibTracker.SiStripCommon.siStripPositionCorrectionsTable_cfi") +process.load("CalibTracker.SiStripCommon.siStripGainCalibTable_cfi") +process.siStripPositionCorrectionsTable.Tracks = tracksForCalib +process.siStripGainCalibTable.Tracks = tracksForCalib + +process.nanoCTPath = cms.Path(process.TkCalSeq * + process.nanoMetadata * + process.tkInstLumiTable * + process.tracksTable * + process.siStripPositionCorrectionsTable) #* + #process.siStripGainCalibTable) + +process.out = cms.OutputModule("NanoAODOutputModule", + fileName=cms.untracked.string("CalibTreeMC_nano.root"), + outputCommands=process.NANOAODEventContent.outputCommands) + +process.end = cms.EndPath(process.out) diff --git a/CalibTracker/SiStripCommon/test/testCalibTree_nano_G2.py b/CalibTracker/SiStripCommon/test/testCalibTree_nano_G2.py new file mode 100644 index 0000000000000..b532ee28b5dff --- /dev/null +++ b/CalibTracker/SiStripCommon/test/testCalibTree_nano_G2.py @@ -0,0 +1,77 @@ +from __future__ import print_function + +## adapted from produceCalibrationTree_template_cfg.py + +import FWCore.ParameterSet.Config as cms +##from CalibTracker.SiStripCommon.shallowTree_test_template import * ## TODO get rid of this one + +process = cms.Process('CALIB') +process.load('Configuration/StandardSequences/MagneticField_cff') +process.load('Configuration.Geometry.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, "auto:run3_data_PromptAnalysis") + +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.StandardSequences.Services_cff') + +process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(-1)) + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring("/store/express/Run2023F/StreamExpress/ALCARECO/SiStripCalMinBias-Express-v1/000/373/710/00000/e2df2f78-b95a-4f33-ae22-add59aa2903f.root")) + +process.options = cms.untracked.PSet( wantSummary = cms.untracked.bool(True) ) +process.MessageLogger.cerr.FwkReport.reportEvery = 10000 + +inTracks = cms.InputTag("ALCARECOSiStripCalMinBias") + +process.load('CalibTracker.SiStripCommon.prescaleEvent_cfi') +process.load('CalibTracker.Configuration.Filter_Refit_cff') +## use CalibrationTracks (for clusters) and CalibrationTracksRefit (for tracks) +process.CalibrationTracks.src = inTracks + +tracksForCalib = cms.InputTag("CalibrationTracksRefit") + +process.prescaleEvent.prescale = 1 + +process.TkCalSeq = cms.Sequence(process.prescaleEvent*process.MeasurementTrackerEvent*process.trackFilterRefit) + +process.load("PhysicsTools.NanoAOD.nano_cff") +process.load("PhysicsTools.NanoAOD.NanoAODEDMEventContent_cff") + +## as a test: it should be possible to add tracks fully at configuration level (+ declaring the plugin) +from PhysicsTools.NanoAOD.common_cff import * +## this is equivalent to ShallowTrackProducer as configured for the gain calibration +process.tracksTable = cms.EDProducer("SimpleTrackFlatTableProducer", + src=tracksForCalib, + cut=cms.string(""), + name=cms.string("track"), + doc=cms.string("SiStripCalMinBias ALCARECO tracks"), + singleton=cms.bool(False), + extension=cms.bool(False), + variables=cms.PSet( + chi2ndof=Var("chi2()/ndof", float), + pt=Var("pt()", float), + hitsvalid=Var("numberOfValidHits()", int), ## unsigned? + phi=Var("phi()", float), + eta=Var("eta()", float), + ) + ) +process.load("CalibTracker.SiStripCommon.tkInstLumiTable_cfi") +process.tkInstLumiTable.extension = True +process.load("CalibTracker.SiStripCommon.siStripGainCalibTable_cfi") +process.siStripGainCalibTable.Tracks = tracksForCalib + +process.nanoCTPath = cms.Path(process.TkCalSeq* + process.nanoMetadata*process.tkInstLumiTable + *process.tracksTable + *process.siStripGainCalibTable + ) + +process.out = cms.OutputModule("NanoAODOutputModule", + fileName=cms.untracked.string("CalibTreeMC_nano_G2.root"), + outputCommands=process.NANOAODEventContent.outputCommands + ) + +process.end = cms.EndPath(process.out) diff --git a/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonProducer.cc b/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonProducer.cc index 095a17166d565..ce7b2ebb3dab2 100644 --- a/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonProducer.cc +++ b/Calibration/HcalAlCaRecoProducers/plugins/AlCaHBHEMuonProducer.cc @@ -60,12 +60,10 @@ class AlCaHBHEMuonProducer : public edm::stream::EDProducer("BeamSpotLabel")), labelVtx_(iConfig.getParameter("VertexLabel")), @@ -235,15 +232,6 @@ void AlCaHBHEMuonProducer::fillDescriptions(edm::ConfigurationDescriptions& desc descriptions.add("alcaHBHEMuonProducer", desc); } -void AlCaHBHEMuonProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) { - edm::LogVerbatim("HcalHBHEMuon") << "Run[" << nRun_ << "] " << iRun.run(); -} - -void AlCaHBHEMuonProducer::endRun(edm::Run const& iRun, edm::EventSetup const&) { - ++nRun_; - edm::LogVerbatim("HcalHBHEMuon") << "endRun[" << nRun_ << "] " << iRun.run(); -} - bool AlCaHBHEMuonProducer::select(const reco::MuonCollection& muons) { bool ok(false); for (unsigned int k = 0; k < muons.size(); ++k) { diff --git a/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py b/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py index 5b4aedc191531..df89229ede911 100644 --- a/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py +++ b/Calibration/PPSAlCaRecoProducer/test/test_express_PPSAlCaReco_output.py @@ -6,7 +6,7 @@ process = cms.Process( 'TEST',ctpps_2018) # LHCInfo plotter -process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cff') +process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cfi') process.ctppsLHCInfoPlotter.outputFile = "alcareco_lhc_info_express.root" # Load geometry from DB diff --git a/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py b/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py index 2b6a2db3240a6..27cb8bb23aeb1 100644 --- a/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py +++ b/Calibration/PPSAlCaRecoProducer/test/test_prompt_PPSAlCaReco_output.py @@ -6,7 +6,7 @@ process = cms.Process( 'TEST',ctpps_2018) # LHCInfo plotter -process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cff') +process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cfi') process.ctppsLHCInfoPlotter.outputFile = "alcareco_lhc_info_prompt.root" # Load geometry from DB diff --git a/CommonTools/RecoAlgos/plugins/BooleanFlagFilter.cc b/CommonTools/RecoAlgos/plugins/BooleanFlagFilter.cc index 1242df76c266b..7cae7f72190e6 100644 --- a/CommonTools/RecoAlgos/plugins/BooleanFlagFilter.cc +++ b/CommonTools/RecoAlgos/plugins/BooleanFlagFilter.cc @@ -35,17 +35,9 @@ class BooleanFlagFilter : public edm::global::EDFilter<> { public: explicit BooleanFlagFilter(const edm::ParameterSet&); - ~BooleanFlagFilter() override; private: - //virtual void beginJob() override; bool filter(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; - //virtual void endJob() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetTokenT inputToken_; @@ -69,11 +61,6 @@ BooleanFlagFilter::BooleanFlagFilter(const edm::ParameterSet& iConfig) { reverse_ = iConfig.getParameter("reverseDecision"); } -BooleanFlagFilter::~BooleanFlagFilter() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -96,52 +83,5 @@ bool BooleanFlagFilter::filter(edm::StreamID, edm::Event& iEvent, const edm::Eve return result; } -// ------------ method called once each job just before starting event loop ------------ -/* -void -BooleanFlagFilter::beginJob() -{ -} -*/ - -// ------------ method called once each job just after ending the event loop ------------ -/* -void -BooleanFlagFilter::endJob() { -} -*/ - -// ------------ method called when starting to processes a run ------------ -/* -void -BooleanFlagFilter::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -BooleanFlagFilter::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -BooleanFlagFilter::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -BooleanFlagFilter::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - //define this as a plug-in DEFINE_FWK_MODULE(BooleanFlagFilter); diff --git a/CommonTools/UtilAlgos/interface/Merger.h b/CommonTools/UtilAlgos/interface/Merger.h index 63c72cc1fe6fd..054baa5943a7f 100644 --- a/CommonTools/UtilAlgos/interface/Merger.h +++ b/CommonTools/UtilAlgos/interface/Merger.h @@ -19,6 +19,8 @@ */ #include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/transform.h" #include "FWCore/Utilities/interface/InputTag.h" @@ -34,19 +36,20 @@ class Merger : public edm::global::EDProducer<> { explicit Merger(const edm::ParameterSet&); /// destructor ~Merger() override; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: /// process an event void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; /// vector of strings - typedef std::vector > vtoken; + typedef std::vector> vtoken; /// labels of the collections to be merged vtoken srcToken_; }; template Merger::Merger(const edm::ParameterSet& par) - : srcToken_(edm::vector_transform(par.template getParameter >("src"), + : srcToken_(edm::vector_transform(par.template getParameter>("src"), [this](edm::InputTag const& tag) { return consumes(tag); })) { produces(); } @@ -69,4 +72,15 @@ void Merger::produce(edm::StreamID, evt.put(std::move(coll)); } +template +void Merger::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add>("src", + { + edm::InputTag("collection1"), + edm::InputTag("collection2"), + }); + descriptions.addWithDefaultLabel(desc); +} + #endif diff --git a/CondCore/CTPPSPlugins/interface/DAQMappingPayloadInspectorHelper.h b/CondCore/CTPPSPlugins/interface/DAQMappingPayloadInspectorHelper.h new file mode 100644 index 0000000000000..4642d1fbccf9a --- /dev/null +++ b/CondCore/CTPPSPlugins/interface/DAQMappingPayloadInspectorHelper.h @@ -0,0 +1,91 @@ +#ifndef CONDCORE_CTPPSPLUGINS_PPSDAQMAPPINGPAYLOADINSPECTORHELPER_H +#define CONDCORE_CTPPSPLUGINS_PPSDAQMAPPINGPAYLOADINSPECTORHELPER_H + +// User includes +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondFormats/PPSObjects/interface/TotemDAQMapping.h" +#include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" + +// system includes +#include +#include + +// ROOT includes +#include "TCanvas.h" +#include "TStyle.h" +#include "TH2F.h" +#include "TLatex.h" +#include "TGraph.h" + +namespace DAQMappingPI { + inline std::string resolveDetIDForDAQMapping(int detIDNumber) { + static const std::map mapping = {{CTPPSDetId::SubDetector::sdTrackingStrip, "Strip"}, + {CTPPSDetId::SubDetector::sdTrackingPixel, "Pixel"}, + {CTPPSDetId::SubDetector::sdTimingDiamond, "Diamond"}, + {CTPPSDetId::SubDetector::sdTimingFastSilicon, "FastSilicon"}, + {CTPPSDetId::SubDetector::sdTotemT2, "TotemT2"}}; + + auto it = mapping.find(detIDNumber); + if (it != mapping.end()) { + return it->second; + } else { + return "not defined"; + } + } +} // namespace DAQMappingPI + +template +class DAQMappingPayloadInfo + : public cond::payloadInspector::PlotImage { +public: + DAQMappingPayloadInfo() + : cond::payloadInspector::PlotImage( + "DAQMappingPayloadInfo text") {} + + bool fill() override { + auto tag = cond::payloadInspector::PlotBase::getTag<0>(); + auto tagname = tag.name; + auto iov = tag.iovs.back(); + auto m_payload = this->fetchPayload(std::get<1>(iov)); + + if (m_payload != nullptr) { + std::stringstream payloadInfo, lineCountStream; + int subDet = CTPPSDetId(m_payload->VFATMapping.begin()->second.symbolicID.symbolicID).subdetId(); + payloadInfo << "TAG: " << tagname << ", the mapping for: " << DAQMappingPI::resolveDetIDForDAQMapping(subDet) + << std::endl; + payloadInfo << *m_payload; + lineCountStream << *m_payload; + std::string line; + + //created to dynamically set canvas height + int lineCounter = 0; + while (std::getline(lineCountStream, line)) { + lineCounter++; + } + + TCanvas canvas("canvas", "Canvas", 800, 20 * lineCounter); + + TLatex latex; + latex.SetNDC(); + latex.SetTextSize(0.015); + double yPos = 0.95; + + while (std::getline(payloadInfo, line)) { + yPos -= 0.015; + latex.DrawLatex(0.1, yPos, line.c_str()); + } + + std::string fileName(this->m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + return true; + } else { + return false; + } + } +}; + +#endif diff --git a/CondCore/CTPPSPlugins/interface/PPSTimingCalibrationPayloadInspectorHelper.h b/CondCore/CTPPSPlugins/interface/PPSTimingCalibrationPayloadInspectorHelper.h index a839603e89bf8..a1196ab356b2b 100644 --- a/CondCore/CTPPSPlugins/interface/PPSTimingCalibrationPayloadInspectorHelper.h +++ b/CondCore/CTPPSPlugins/interface/PPSTimingCalibrationPayloadInspectorHelper.h @@ -19,167 +19,69 @@ #include "TLatex.h" #include "TGraph.h" -class PPSTimingCalibrationPI { -public: +namespace PPSTimingCalibrationPI { enum parameter { parameter0 = 0, parameter1 = 1, parameter2 = 2, parameter3 = 3 }; - enum conditions_db { db0 = 0, db1 = 1 }; - - enum conditions_plane { plane0 = 0, plane1 = 1, plane2 = 2, plane3 = 3 }; - - enum conditions_channel { - channel0 = 0, - channel1 = 1, - channel2 = 2, - channel3 = 3, - channel4 = 4, - channel5 = 5, - channel6 = 6, - channel7 = 7, - channel8 = 8, - channel9 = 9, - channel10 = 10, - channel11 = 11 - - }; - - static std::string getStringFromParamEnum(const parameter& parameter) { - switch (parameter) { - case 0: - return "parameter 0"; - case 1: - return "parameter 1"; - case 2: - return "parameter 2"; - case 3: - return "parameter 3"; - - default: - return "not here"; - } - } + inline std::string getStringFromParamEnum(const parameter& parameter) { + const std::map parameters = {{parameter0, "parameter 0"}, + {parameter1, "parameter 1"}, + {parameter2, "parameter 2"}, + {parameter3, "parameter 3"}}; - static std::string getStringFromDbEnum(const conditions_db& db) { - switch (db) { - case 0: - return "db = 0"; - case 1: - return "db = 1"; - - default: - return "not here"; - } - } - - static std::string getStringFromPlaneEnum(const conditions_plane& plane) { - switch (plane) { - case 0: - return "plane = 0"; - case 1: - return "plane = 1"; - case 2: - return "plane = 2"; - case 3: - return "plane = 3"; - - default: - return "not here"; + auto it = parameters.find(parameter); + if (it != parameters.end()) { + return it->second; + } else { + return "no param"; } } - static std::string getStringFromChannelEnum(const conditions_channel& channel) { - switch (channel) { - case 0: - return "channel = 0"; - case 1: - return "channel = 1"; - case 2: - return "channel = 2"; - case 3: - return "channel = 3"; - case 4: - return "channel = 4"; - case 5: - return "channel = 5"; - case 6: - return "channel = 6"; - case 7: - return "channel = 7"; - case 8: - return "channel = 8"; - case 9: - return "channel = 9"; - case 10: - return "channel = 10"; - case 11: - return "channel = 11"; - - default: - return "not here"; - } - } -}; + const std::string ARM = "db (0,1)"; + const std::string STATION = "station (1,2)"; + const std::string PLANE = "plane (0-3)"; + const std::string CHANNEL = "channel (0-11)"; +} // namespace PPSTimingCalibrationPI /************************************************ History plots *************************************************/ -template +template class ParametersPerRun : public cond::payloadInspector::HistoryPlot { public: ParametersPerRun() : cond::payloadInspector::HistoryPlot( - PPSTimingCalibrationPI::getStringFromParamEnum(param) + " " + - PPSTimingCalibrationPI::getStringFromDbEnum(db) + " " + - PPSTimingCalibrationPI::getStringFromPlaneEnum(plane) + " " + - PPSTimingCalibrationPI::getStringFromChannelEnum(channel) + " vs. Runs", - PPSTimingCalibrationPI::getStringFromParamEnum(param)) {} + "Parameter " + PPSTimingCalibrationPI::getStringFromParamEnum(param) + " vs. Runs", + PPSTimingCalibrationPI::getStringFromParamEnum(param)) { + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::ARM); + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::STATION); + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::PLANE); + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::CHANNEL); + } - float getFromPayload(PayloadType& payload) override { return payload.parameters(db, 1, plane, channel)[param]; } -}; + float getFromPayload(PayloadType& payload) override { + auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto db = paramValues.find(PPSTimingCalibrationPI::ARM)->second; + auto station = paramValues.find(PPSTimingCalibrationPI::STATION)->second; + auto plane = paramValues.find(PPSTimingCalibrationPI::PLANE)->second; + auto channel = paramValues.find(PPSTimingCalibrationPI::CHANNEL)->second; -/************************************************ - X-Y correlation plots -*************************************************/ -template -class PpPCorrelation : public cond::payloadInspector::ScatterPlot { -public: - PpPCorrelation() - : cond::payloadInspector::ScatterPlot( - "TimingCalibration " + PPSTimingCalibrationPI::getStringFromParamEnum(param1) + " vs. " + - PPSTimingCalibrationPI::getStringFromParamEnum(param2) + " on " + - PPSTimingCalibrationPI::getStringFromDbEnum(db) + " " + - PPSTimingCalibrationPI::getStringFromPlaneEnum(plane) + " " + - PPSTimingCalibrationPI::getStringFromChannelEnum(channel), - PPSTimingCalibrationPI::getStringFromParamEnum(param1), - PPSTimingCalibrationPI::getStringFromParamEnum(param2)) {} - - std::tuple getFromPayload(PayloadType& payload) override { - return std::make_tuple(payload.parameters(db, 1, plane, channel)[param1], - payload.parameters(db, 1, plane, channel)[param2]); + return payload.parameters(std::stoi(db), std::stoi(station), std::stoi(plane), std::stoi(channel))[param]; } }; /************************************************ - Other plots + Image plots *************************************************/ -template +template class ParametersPerChannel : public cond::payloadInspector::PlotImage { public: ParametersPerChannel() : cond::payloadInspector::PlotImage( - "PPSTimingCalibration parameters per channel") {} + "PPSTimingCalibration parameters per channel") { + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::ARM); + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::STATION); + cond::payloadInspector::PlotBase::addInputParam(PPSTimingCalibrationPI::PLANE); + } bool fill() override { auto tag = cond::payloadInspector::PlotBase::getTag<0>(); @@ -187,6 +89,11 @@ class ParametersPerChannel : public cond::payloadInspector::PlotImagefetchPayload(std::get<1>(iov)); + auto paramValues = cond::payloadInspector::PlotBase::inputParamValues(); + auto db = paramValues.find(PPSTimingCalibrationPI::ARM)->second; + auto station = paramValues.find(PPSTimingCalibrationPI::STATION)->second; + auto plane = paramValues.find(PPSTimingCalibrationPI::PLANE)->second; + if (m_payload != nullptr) { TCanvas canvas( "PPSTimingCalibration parameters per channel", "PPSTimingCalibration parameters per channel", 1400, 1000); @@ -196,14 +103,14 @@ class ParametersPerChannel : public cond::payloadInspector::PlotImageparameters(db, 1, plane, i)[param]; + y[i] = m_payload->parameters(std::stoi(db), std::stoi(station), std::stoi(plane), i)[param]; x[i] = i; } TGraph* graph = new TGraph(n, x, y); - graph->SetTitle(("PPSTimingCalibration " + PPSTimingCalibrationPI::getStringFromDbEnum(db) + " " + - PPSTimingCalibrationPI::getStringFromPlaneEnum(plane) + " " + - PPSTimingCalibrationPI::getStringFromParamEnum(param) + " per channel; channel; parameter") + graph->SetTitle(("PPSTimingCalibration db = " + db + ", " + "station = " + station + ", " + "plane = " + plane + + ", " + PPSTimingCalibrationPI::getStringFromParamEnum(param) + " PER channel; channel; " + + PPSTimingCalibrationPI::getStringFromParamEnum(param)) .c_str()); graph->SetMarkerColor(2); graph->SetMarkerSize(1.5); @@ -223,4 +130,4 @@ class ParametersPerChannel : public cond::payloadInspector::PlotImage - \ No newline at end of file + + + + + + diff --git a/CondCore/CTPPSPlugins/plugins/DAQMapping_PayloadInspector.cc b/CondCore/CTPPSPlugins/plugins/DAQMapping_PayloadInspector.cc new file mode 100644 index 0000000000000..4bcf88c1f3691 --- /dev/null +++ b/CondCore/CTPPSPlugins/plugins/DAQMapping_PayloadInspector.cc @@ -0,0 +1,18 @@ +/**************************************************************************** + * + * This is a part of PPS PI software. + * + ****************************************************************************/ + +#include "CondCore/Utilities/interface/PayloadInspectorModule.h" +#include "CondCore/Utilities/interface/PayloadInspector.h" +#include "CondCore/CondDB/interface/Time.h" +#include "CondCore/CondDB/interface/PayloadReader.h" +#include "CondFormats/PPSObjects/interface/TotemDAQMapping.h" +#include "CondCore/CTPPSPlugins/interface/DAQMappingPayloadInspectorHelper.h" + +namespace { + typedef DAQMappingPayloadInfo DAQMappingPayloadInfo_Text; +} + +PAYLOAD_INSPECTOR_MODULE(TotemDAQMapping) { PAYLOAD_INSPECTOR_CLASS(DAQMappingPayloadInfo_Text); } diff --git a/CondCore/CTPPSPlugins/plugins/PPSTimingCalibration_PayloadInspector.cc b/CondCore/CTPPSPlugins/plugins/PPSTimingCalibration_PayloadInspector.cc index 7dc1de4800696..e02afa525e697 100644 --- a/CondCore/CTPPSPlugins/plugins/PPSTimingCalibration_PayloadInspector.cc +++ b/CondCore/CTPPSPlugins/plugins/PPSTimingCalibration_PayloadInspector.cc @@ -1,3 +1,4 @@ + #include "CondCore/Utilities/interface/PayloadInspectorModule.h" #include "CondCore/Utilities/interface/PayloadInspector.h" #include "CondCore/CondDB/interface/Time.h" @@ -18,3520 +19,38 @@ namespace { History plots *************************************************/ - //db=0, plane=0, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param3; - - //db=0, plane=0, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param3; - - //db=0, plane=0, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param3; - - //db=0, plane=0, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param3; - - //db=0, plane=0, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param3; - - //db=0, plane=0, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param3; - - //db=0, plane=0, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param3; - - //db=0, plane=0, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param3; - - //db=0, plane=0, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param3; - - //db=0, plane=0, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param3; - - //db=0, plane=0, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param3; - - //db=0, plane=0, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param3; - - //db=0, plane=1, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param3; - - //db=0, plane=1, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param3; - - //db=0, plane=1, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param3; - - //db=0, plane=1, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param3; - - //db=0, plane=1, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param3; - - //db=0, plane=1, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param3; - - //db=0, plane=1, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param3; - - //db=0, plane=1, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param3; - - //db=0, plane=1, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param3; - - //db=0, plane=1, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param3; - - //db=0, plane=1, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param3; - - //db=0, plane=1, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param3; - - //db=0, plane=2, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param3; - - //db=0, plane=2, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param1; + using PPSTimingCalibration_history_htdc_calibration_param0 = + ParametersPerRun; + using PPSTimingCalibration_history_htdc_calibration_param1 = + ParametersPerRun; + using PPSTimingCalibration_history_htdc_calibration_param2 = + ParametersPerRun; + using PPSTimingCalibration_history_htdc_calibration_param3 = + ParametersPerRun; - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param3; - - //db=0, plane=2, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param3; - - //db=0, plane=2, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param3; - - //db=0, plane=2, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param3; - - //db=0, plane=2, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param3; - - //db=0, plane=2, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param3; - - //db=0, plane=2, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param3; - - //db=0, plane=2, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param3; - - //db=0, plane=2, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param3; - - //db=0, plane=2, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param3; - - //db=0, plane=2, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param3; - - //db=0, plane=3, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param3; - - //db=0, plane=3, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param3; - - //db=0, plane=3, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param3; - - //db=0, plane=3, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param3; - - //db=0, plane=3, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param3; - - //db=0, plane=3, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param3; - - //db=0, plane=3, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param3; - - //db=0, plane=3, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param3; - - //db=0, plane=3, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param3; - - //db=0, plane=3, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param3; - - //db=0, plane=3, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param3; - - //db=0, plane=3, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param3; - - //db=1, plane=0, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param3; - - //db=1, plane=0, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param3; - - //db=1, plane=0, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param1; + /************************************************ + Image plots + *************************************************/ - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param2; + using PPSTimingCalibration_htdc_calibration_param0_per_channels = + ParametersPerChannel; + using PPSTimingCalibration_htdc_calibration_param1_per_channels = + ParametersPerChannel; + using PPSTimingCalibration_htdc_calibration_param2_per_channels = + ParametersPerChannel; + using PPSTimingCalibration_htdc_calibration_param3_per_channels = + ParametersPerChannel; - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param3; - - //db=1, plane=0, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param3; - - //db=1, plane=0, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param3; - - //db=1, plane=0, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param3; - - //db=1, plane=0, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param3; - - //db=1, plane=0, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param3; - - //db=1, plane=0, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param3; - - //db=1, plane=0, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param3; - - //db=1, plane=0, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param3; - - //db=1, plane=0, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param3; - - //db=1, plane=1, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param3; - - //db=1, plane=1, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param3; - - //db=1, plane=1, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param3; - - //db=1, plane=1, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param3; - - //db=1, plane=1, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param3; - - //db=1, plane=1, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param3; - - //db=1, plane=1, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param3; - - //db=1, plane=1, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param3; - - //db=1, plane=1, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param3; - - //db=1, plane=1, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param3; - - //db=1, plane=1, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param3; - - //db=1, plane=1, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param3; - - //db=1, plane=2, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param3; - - //db=1, plane=2, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param3; - - //db=1, plane=2, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param3; - - //db=1, plane=2, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param3; - - //db=1, plane=2, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param3; - - //db=1, plane=2, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param3; - - //db=1, plane=2, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param3; - - //db=1, plane=2, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param3; - - //db=1, plane=2, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param3; - - //db=1, plane=2, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param3; - - //db=1, plane=2, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param3; - - //db=1, plane=2, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param3; - - //db=1, plane=3, channel=0 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param3; - - //db=1, plane=3, channel=1 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param3; - - //db=1, plane=3, channel=2 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param3; - - //db=1, plane=3, channel=3 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param3; - - //db=1, plane=3, channel=4 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param3; - - //db=1, plane=3, channel=5 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param3; - - //db=1, plane=3, channel=6 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param3; - - //db=1, plane=3, channel=7 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param3; - - //db=1, plane=3, channel=8 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param3; - - //db=1, plane=3, channel=9 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param3; - - //db=1, plane=3, channel=10 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param3; - - //db=1, plane=3, channel=11 - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param0; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param1; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param2; - - typedef ParametersPerRun - PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param3; - - /************************************************ - X-Y correlation plots - *************************************************/ - - /************************************************ - Image plots - *************************************************/ - - //db=0, plane=0 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl0param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl0param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl0param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl0param3_per_channels; - - //db=0, plane=1 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl1param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl1param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl1param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl1param3_per_channels; - - //db=0, plane=2 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl2param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl2param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl2param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl2param3_per_channels; - - //db=0, plane=3 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl3param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl3param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl3param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db0pl3param3_per_channels; - - //db=1, plane=0 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl0param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl0param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl0param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl0param3_per_channels; - - //db=1, plane=1 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl1param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl1param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl1param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl1param3_per_channels; - - //db=1, plane=2 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl2param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl2param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl2param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl2param3_per_channels; - - //db=1, plane=3 - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl3param0_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl3param1_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl3param2_per_channels; - - typedef ParametersPerChannel - PPSTimingCalibration_htdc_calibration_db1pl3param3_per_channels; - -} // namespace +} // namespace PAYLOAD_INSPECTOR_MODULE(PPSTimingCalibration) { - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl0ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl1ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl2ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db0pl3ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl0ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl1ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl2ch11_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch0_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch1_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch2_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch3_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch4_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch5_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch6_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch7_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch8_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch9_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch10_param3); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param0); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param1); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param2); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_db1pl3ch11_param3); - - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl0param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl0param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl0param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl0param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl1param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl1param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl1param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl1param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl2param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl2param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl2param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl2param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl3param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl3param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl3param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db0pl3param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl0param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl0param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl0param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl0param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl1param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl1param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl1param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl1param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl2param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl2param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl2param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl2param3_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl3param0_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl3param1_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl3param2_per_channels); - PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_db1pl3param3_per_channels); -} + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_param0) + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_param1) + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_param2) + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_history_htdc_calibration_param3) + + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_param0_per_channels) + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_param1_per_channels) + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_param2_per_channels) + PAYLOAD_INSPECTOR_CLASS(PPSTimingCalibration_htdc_calibration_param3_per_channels) +} \ No newline at end of file diff --git a/CondCore/CTPPSPlugins/test/testDAQMapping.sh b/CondCore/CTPPSPlugins/test/testDAQMapping.sh new file mode 100755 index 0000000000000..b187d3e0c1603 --- /dev/null +++ b/CondCore/CTPPSPlugins/test/testDAQMapping.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +if [ "$1" == "run" ] +then + mkdir -p $CMSSW_BASE/src/CondCore/CTPPSPlugins/test/results + if [ -f *.png ]; then + rm *.png + fi + + echo "Testing DAQMapping info" + + getPayloadData.py \ + --plugin pluginTotemDAQMapping_PayloadInspector \ + --plot plot_DAQMappingPayloadInfo_Text \ + --tag PPSDAQMapping_TimingDiamond_v1 \ + --time_type Run \ + --iovs '{"start_iov": "283820", "end_iov": "283820"}' \ + --db Prod \ + --test + + mv *.png $CMSSW_BASE/src/CondCore/CTPPSPlugins/test/results/DAQMapping_TextInfo.png + +elif [ "$1" == "clear" ] +then + rm -rf $CMSSW_BASE/src/CondCore/CTPPSPlugins/test/results + +else + echo "Wrong option! (available options: run/clear)" +fi diff --git a/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.cpp b/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.cpp index 9db167a2852d2..8ecbd37e06336 100644 --- a/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.cpp +++ b/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.cpp @@ -30,12 +30,19 @@ int main(int argc, char** argv) { edm::LogPrint("testPPSCalibrationPI") << "## Exercising TimingCalibration plots "; - ParametersPerChannel - test; + ParametersPerChannel test; + py::dict inputs; + inputs["db (0,1)"] = "0"; + inputs["station (1,2)"] = "1"; + inputs["plane (0-3)"] = "0"; + test.setInputParamValues(inputs); test.process(connectionString, PI::mk_input(tag, start, end)); edm::LogPrint("testparametersPerChannel") << test.data(); + + inputs.clear(); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(inputs.ptr()); +#endif + Py_Finalize(); } diff --git a/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.sh b/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.sh index 278afede43461..c512c449c6b23 100755 --- a/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.sh +++ b/CondCore/CTPPSPlugins/test/testPPSTimingCalibration.sh @@ -10,70 +10,54 @@ then echo "Testing history plots" - for db in 0 1 + for db in 0 #1 do - for pl in 0 1 2 3 + for station in 1 #2 do - for ch in 0 1 2 3 4 5 6 7 8 9 10 11 + for pl in 0 #1 2 3 do - for param in 0 1 2 3 + for ch in 0 #1 2 3 4 5 6 7 8 9 10 11 do - python3 CondCore/Utilities/scripts/getPayloadData.py \ - --plugin pluginPPSTimingCalibration_PayloadInspector \ - --plot plot_PPSTimingCalibration_history_htdc_calibration_db${db}pl${pl}ch${ch}_param${param} \ - --tag CTPPPSTimingCalibration_HPTDC_byPCL_v0_prompt \ - --time_type Run \ - --iovs '{"start_iov": "355892", "end_iov": "357079"}' \ - --db Prod \ - --test 2> CondCore/CTPPSPlugins/test/results/data_history__db${db}pl${pl}ch${ch}_param${param}.json + for param in 0 #1 2 3 + do + python3 CondCore/Utilities/scripts/getPayloadData.py \ + --plugin pluginPPSTimingCalibration_PayloadInspector \ + --plot plot_PPSTimingCalibration_history_htdc_calibration_param${param} \ + --input_params '{"db (0,1)":"'${db}'","station (1,2)":"'${station}'", "plane (0-3)":"'${pl}'", "channel (0-11)":"'${ch}'"}' \ + --tag CTPPPSTimingCalibration_HPTDC_byPCL_v0_prompt \ + --time_type Run \ + --iovs '{"start_iov": "357079", "end_iov": "357079"}' \ + --db Prod \ + --test 2> CondCore/CTPPSPlugins/test/results/data_history__db${db}st${station}pl${pl}ch${ch}_param${param}.json + done done done done done - - echo "Testing parameters plots" - - for param1 in 0 1 2 3 - do - for param2 in 1 2 3 - do - if [ "$param1" -lt "$param2" ] - then - getPayloadData.py \ - --plugin pluginPPSTimingCalibration_PayloadInspector \ - --plot plot_PPSTimingCalibration_htdc_calibration_params${param1}${param2} \ - --tag CTPPPSTimingCalibration_HPTDC_byPCL_v0_prompt \ - --time_type Run \ - --iovs '{"start_iov": "355892", "end_iov": "357079"}' \ - --db Prod \ - --test 2> CondCore/CTPPSPlugins/test/results/data_params_${param1}${param2}.json - fi - done - done - python3 CondCore/CTPPSPlugins/test/graph_check.py - echo "Testing channel plots" - - - for db in 0 1 + for db in 0 #1 do - for pl in 0 1 2 3 + for station in 1 #2 do - for param in 0 1 2 3 + for pl in 0 #1 2 3 do - getPayloadData.py \ - --plugin pluginPPSTimingCalibration_PayloadInspector \ - --plot plot_PPSTimingCalibration_htdc_calibration_db${db}pl${pl}param${param}_per_channels \ - --tag CTPPPSTimingCalibration_HPTDC_byPCL_v0_prompt \ - --time_type Run \ - --iovs '{"start_iov": "356489", "end_iov": "356489"}' \ - --db Prod \ - --test - mv *.png CondCore/CTPPSPlugins/test/results/plot_PPSTimingCalibration_db${db}pl${pl}param${param}_per_channels.png - done - done + for param in 0 #1 2 3 + do + getPayloadData.py \ + --plugin pluginPPSTimingCalibration_PayloadInspector \ + --plot plot_PPSTimingCalibration_htdc_calibration_param${param}_per_channels \ + --input_params '{"db (0,1)":"'${db}'","station (1,2)":"'${station}'", "plane (0-3)":"'${pl}'"}' \ + --tag CTPPPSTimingCalibration_HPTDC_byPCL_v1_prompt \ + --time_type Run \ + --iovs '{"start_iov": "370092", "end_iov": "370092"}' \ + --db Prod \ + --test + mv *.png CondCore/CTPPSPlugins/test/results/plot_PPSTimingCalibration_db${db}pl${pl}param${param}_per_channels.png + done + done + done done diff --git a/CondCore/ESSources/plugins/CondDBESSource.cc b/CondCore/ESSources/plugins/CondDBESSource.cc index dbbdd4627f2be..f01630f9a84b5 100644 --- a/CondCore/ESSources/plugins/CondDBESSource.cc +++ b/CondCore/ESSources/plugins/CondDBESSource.cc @@ -30,6 +30,10 @@ #include +#include + +using json = nlohmann::json; + namespace { /* utility ot build the name of the plugin corresponding to a given record se ESSources @@ -85,6 +89,27 @@ namespace { out << " " << id.since << " - " << id.till << " : " << id.payloadId << std::endl; } + void dumpInfoJson(json& jsonData, const std::string& recName, cond::ProductResolverWrapperBase const& proxy) { + json recordData; + recordData["label"] = proxy.label(); + recordData["connectionString"] = proxy.connString(); + recordData["tag"] = proxy.tag(); + + // Code to fill the JSON structure + + recordData["timeLookupPayloadIds"] = json::array(); + const auto& pids = *proxy.requests(); + for (const auto& id : pids) { + json payloadIdData; + payloadIdData["since"] = id.since; + payloadIdData["till"] = id.till; + payloadIdData["payloadId"] = id.payloadId; + recordData["timeLookupPayloadIds"].push_back(payloadIdData); + } + + jsonData[recName].push_back(recordData); + } + } // namespace /* @@ -96,7 +121,8 @@ namespace { * toGet: list of record label tag connection-string to add/overwrite the content of the global-tag */ CondDBESSource::CondDBESSource(const edm::ParameterSet& iConfig) - : m_connection(), + : m_jsonDumpFilename(iConfig.getUntrackedParameter("JsonDumpFileName", "")), + m_connection(), m_connectionString(""), m_frontierKey(""), m_lastRun(0), // for the stat @@ -322,15 +348,28 @@ void CondDBESSource::fillList(const std::string& stringList, } } +void CondDBESSource::printStatistics(const Stats& stats) const { + std::cout << "CondDBESSource Statistics\n" + << "DataProxy " << stats.nData << " setInterval " << stats.nSet << " Runs " << stats.nRun << " Lumis " + << stats.nLumi << " Refresh " << stats.nRefresh << " Actual Refresh " << stats.nActualRefresh + << " Reconnect " << stats.nReconnect << " Actual Reconnect " << stats.nActualReconnect << std::endl; +} + +void saveJsonToFile(const json& jsonData, const std::string& filename) { + std::ofstream outputFile(filename); + if (outputFile.is_open()) { + outputFile << jsonData.dump(2) << std::endl; + std::cout << "JSON data saved in file '" << filename << "'" << std::endl; + } else { + std::cerr << "Error opening file to write JSON data." << std::endl; + } +} + CondDBESSource::~CondDBESSource() { //dump info FIXME: find a more suitable place... if (m_doDump) { - std::cout << "CondDBESSource Statistics" << std::endl - << "ProductResolver " << m_stats.nData << " setInterval " << m_stats.nSet << " Runs " << m_stats.nRun - << " Lumis " << m_stats.nLumi << " Refresh " << m_stats.nRefresh << " Actual Refresh " - << m_stats.nActualRefresh << " Reconnect " << m_stats.nReconnect << " Actual Reconnect " - << m_stats.nActualReconnect; - std::cout << std::endl; + //Output CondDBESSource Statistics to the console + printStatistics(m_stats); ResolverMap::iterator b = m_resolvers.begin(); ResolverMap::iterator e = m_resolvers.end(); @@ -338,10 +377,21 @@ CondDBESSource::~CondDBESSource() { dumpInfo(std::cout, (*b).first, *(*b).second); std::cout << "\n" << std::endl; } - - // FIXME - // We shall eventually close transaction and session... } + //if filename was provided for iConfig by process.GlobalTag.JsonDumpFileName =cms.untracked.string("CondDBESSource.json") + if (!m_jsonDumpFilename.empty()) { + json jsonData; + + for (const auto& entry : m_resolvers) { + std::string recName = entry.first; + const auto& proxy = *entry.second; + dumpInfoJson(jsonData, recName, proxy); + } + //Save the dump data to a file in JSON format + saveJsonToFile(jsonData, m_jsonDumpFilename); + } + // FIXME + // We shall eventually close transaction and session... } // diff --git a/CondCore/ESSources/plugins/CondDBESSource.h b/CondCore/ESSources/plugins/CondDBESSource.h index 009949041898e..ced8f46d23ca2 100644 --- a/CondCore/ESSources/plugins/CondDBESSource.h +++ b/CondCore/ESSources/plugins/CondDBESSource.h @@ -93,6 +93,8 @@ class CondDBESSource : public edm::eventsetup::ESProductResolverProvider, public typedef enum { NOREFRESH, REFRESH_ALWAYS, REFRESH_OPEN_IOVS, REFRESH_EACH_RUN, RECONNECT_EACH_RUN } RefreshPolicy; + std::string m_jsonDumpFilename; + explicit CondDBESSource(const edm::ParameterSet&); ~CondDBESSource() override; @@ -164,5 +166,7 @@ class CondDBESSource : public edm::eventsetup::ESProductResolverProvider, public const std::vector& roottagList, std::map& replacement, cond::GTMetadata_t& gtMetadata); + + void printStatistics(const Stats& stats) const; }; #endif diff --git a/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc b/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc index 4f443978c4927..8715ed5d90210 100644 --- a/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc +++ b/CondCore/SiPixelPlugins/plugins/SiPixelQualityProbabilities_PayloadInspector.cc @@ -24,6 +24,7 @@ #include #include #include +#include // include ROOT #include "TH2F.h" @@ -42,7 +43,7 @@ namespace { using namespace cond::payloadInspector; /************************************************ - 1d histogram of SiPixelQualityProbabilities of 1 IOV + 1d histogram of n. scenarios per PU bin in 1 IOV of SiPixelQualityProbabilities *************************************************/ class SiPixelQualityProbabilitiesScenariosCount : public PlotImage { @@ -53,6 +54,7 @@ namespace { bool fill() override { auto tag = PlotBase::getTag<0>(); auto iov = tag.iovs.front(); + auto tagname = tag.name; std::shared_ptr payload = fetchPayload(std::get<1>(iov)); auto PUbins = payload->getPileUpBins(); auto span = PUbins.back() - PUbins.front(); @@ -62,7 +64,7 @@ namespace { TCanvas canvas("Canv", "Canv", 1200, 1000); canvas.cd(); auto h1 = std::make_unique("Count", - "SiPixelQualityProbablities Scenarios count;PU bin;n. of scenarios", + "SiPixelQualityProbablities Scenarios count;PU bin;n. of scenarios per PU bin", span, PUbins.front(), PUbins.back()); @@ -70,11 +72,11 @@ namespace { canvas.SetTopMargin(0.06); canvas.SetBottomMargin(0.12); - canvas.SetLeftMargin(0.12); + canvas.SetLeftMargin(0.13); canvas.SetRightMargin(0.05); canvas.Modified(); - for (const auto &bin : PUbins) { + for (const auto& bin : PUbins) { h1->SetBinContent(bin + 1, payload->nelements(bin)); } @@ -89,21 +91,23 @@ namespace { canvas.Update(); - TLegend legend = TLegend(0.40, 0.88, 0.95, 0.94); + TLegend legend = TLegend(0.40, 0.88, 0.94, 0.93); legend.SetHeader(("Payload hash: #bf{" + (std::get<1>(iov)) + "}").c_str(), - "C"); // option "C" allows to center the header - //legend.AddEntry(h1.get(), ("IOV: " + std::to_string(std::get<0>(iov))).c_str(), "PL"); + "C"); // option "C" allows to center the header + legend.SetBorderSize(0); // Set the border size to zero to remove visible borders legend.SetTextSize(0.025); legend.Draw("same"); auto ltx = TLatex(); ltx.SetTextFont(62); //ltx.SetTextColor(kBlue); - ltx.SetTextSize(0.05); + ltx.SetTextSize(0.037); ltx.SetTextAlign(11); - ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.1, - 1 - gPad->GetTopMargin() + 0.01, - ("SiPixelQualityProbabilities IOV:" + std::to_string(std::get<0>(iov))).c_str()); + + const auto& headerText = + fmt::sprintf("#color[4]{%s},IOV: #color[4]{%s}", tagname, std::to_string(std::get<0>(iov))); + + ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.1, 1 - gPad->GetTopMargin() + 0.01, headerText.c_str()); std::string fileName(m_imageFileName); canvas.SaveAs(fileName.c_str()); @@ -112,9 +116,149 @@ namespace { } }; + /************************************************ + Probability density per PU bin of 1 IOV of SiPixelQualityProbabilities + *************************************************/ + + class SiPixelQualityProbabilityDensityPerPUbin : public PlotImage { + public: + SiPixelQualityProbabilityDensityPerPUbin() : PlotImage("") { + PlotBase::addInputParam("PU bin"); + } + + bool fill() override { + auto tag = PlotBase::getTag<0>(); + auto iov = tag.iovs.front(); + auto tagname = tag.name; + std::shared_ptr payload = fetchPayload(std::get<1>(iov)); + auto PUbins = payload->getPileUpBins(); + + // initialize the PUbin + unsigned int PUbin(0); + auto paramValues = PlotBase::inputParamValues(); + auto ip = paramValues.find("PU bin"); + if (ip != paramValues.end()) { + PUbin = std::stoul(ip->second); + } else { + edm::LogWarning("SiPixelQualityProbabilityDensityPerPUbin") + << "\n WARNING!!!! \n The needed parameter 'PU bin' has not been passed. Will use all PU bins! \n"; + PUbin = k_ALLPUBINS; + } + + // graphics + TGaxis::SetMaxDigits(3); + + SiPixelQualityProbabilities::probabilityVec probVec; + if (PUbin != k_ALLPUBINS) { + probVec = payload->getProbabilities(PUbin); + } else { + if (PUbins.front() == 0) { + // if a PU bin = 0 exist the PU-averaged is in bin=0 + probVec = payload->getProbabilities(0); + } else { + // we need to build the PDF by hand + // create a list of the probabilities for all the PU bins + std::vector listOfProbabilityVec; + for (unsigned int bin = PUbins.front(); bin <= PUbins.back(); bin++) { + const auto& probsForBin = payload->getProbabilities(bin); + listOfProbabilityVec.push_back(probsForBin); + } + + // Map to store string and pair of floats (sum and count) + std::map> stringFloatMap; + + // Loop through the list of probabilityVec elements + for (const auto& vec : listOfProbabilityVec) { + // For each pair in the current vector + for (const auto& pair : vec) { + const std::string& currentScen = pair.first; + const float& currentProb = pair.second; + + // Check if the string exists in the map + auto it = stringFloatMap.find(currentScen); + if (it != stringFloatMap.end()) { + // If the scenario already exists, update the probability sum and count + it->second.first += currentProb; + it->second.second++; + } else { + // If the string doesn't exist, add it to the map + stringFloatMap[currentScen] = {currentProb, 1}; // Initialize sum and count + } + } + } + + // Calculate the average and populate the new probabilityVec from the map + for (const auto& pair : stringFloatMap) { + float average = pair.second.first / pair.second.second; // Calculate average + probVec.emplace_back(pair.first, average); + } + } // if the first PU bin is not 0 + } // if we're asking for all the PU bins + + TCanvas canvas("Canv", "Canv", 1200, 1000); + canvas.cd(); + auto h1 = std::make_unique("SiPixelQuality PDF", + "probability density vs scenario; scenario serial ID number; probability", + probVec.size(), + -0.5, + probVec.size() - 0.5); + h1->SetStats(false); + + canvas.SetTopMargin(0.06); + canvas.SetBottomMargin(0.12); + canvas.SetLeftMargin(0.13); + canvas.SetRightMargin(0.09); + canvas.Modified(); + + unsigned int count{0}; + for (const auto& [name, prob] : probVec) { + h1->SetBinContent(count, prob); + count++; + } + + h1->SetTitle(""); + h1->GetYaxis()->SetRangeUser(0., h1->GetMaximum() * 1.30); + h1->SetFillColor(kRed); + h1->SetMarkerStyle(20); + h1->SetMarkerSize(1); + h1->Draw("bar2"); + + SiPixelPI::makeNicePlotStyle(h1.get()); + + canvas.Update(); + + TLegend legend = TLegend(0.39, 0.88, 0.89, 0.93); + std::string puBinString = (PUbin == k_ALLPUBINS) ? "PU bin: #bf{all}" : fmt::sprintf("PU bin: #bf{%u}", PUbin); + legend.SetHeader(("#splitline{Payload hash: #bf{" + (std::get<1>(iov)) + "}}{" + puBinString + "}").c_str(), + "C"); // option "C" allows to center the header + legend.SetBorderSize(0); // Set the border size to zero to remove visible borders + legend.SetTextSize(0.025); + legend.Draw("same"); + + auto ltx = TLatex(); + ltx.SetTextFont(62); + ltx.SetTextSize(0.03); + ltx.SetTextAlign(11); + + const auto& headerText = + fmt::sprintf("#color[4]{%s}, IOV: #color[4]{%s}", tagname, std::to_string(std::get<0>(iov))); + + ltx.DrawLatexNDC(gPad->GetLeftMargin() + 0.1, 1 - gPad->GetTopMargin() + 0.01, headerText.c_str()); + + std::string fileName(m_imageFileName); + canvas.SaveAs(fileName.c_str()); + + return true; + } + + private: + static constexpr unsigned int k_ALLPUBINS = 9999; + }; + } // namespace // Register the classes as boost python plugin PAYLOAD_INSPECTOR_MODULE(SiPixelQualityProbabilities) { PAYLOAD_INSPECTOR_CLASS(SiPixelQualityProbabilitiesScenariosCount); + PAYLOAD_INSPECTOR_CLASS(SiPixelQualityProbabilityDensityPerPUbin); } diff --git a/CondCore/SiPixelPlugins/test/testMiscellanea.sh b/CondCore/SiPixelPlugins/test/testMiscellanea.sh index 2ae5130a845e6..828f468647e5c 100755 --- a/CondCore/SiPixelPlugins/test/testMiscellanea.sh +++ b/CondCore/SiPixelPlugins/test/testMiscellanea.sh @@ -19,3 +19,28 @@ getPayloadData.py \ --test ; mv *.png $W_DIR/display/testPixelMap.png + +# test a given PU bin +getPayloadData.py \ + --plugin pluginSiPixelQualityProbabilities_PayloadInspector \ + --plot plot_SiPixelQualityProbabilityDensityPerPUbin \ + --tag SiPixelQualityProbabilities_UltraLegacy2018_v0_mc \ + --input_params '{"PU bin": "10"}' \ + --time_type Run \ + --iovs '{"start_iov": "1", "end_iov": "1"}' \ + --db Prod \ + --test ; + +mv *.png $W_DIR/display/testSiPixelQualityProbabilityDensity.png + +# test all PU bins +getPayloadData.py \ + --plugin pluginSiPixelQualityProbabilities_PayloadInspector \ + --plot plot_SiPixelQualityProbabilityDensityPerPUbin \ + --tag SiPixelQualityProbabilities_2023_v2_BPix_mc \ + --time_type Run \ + --iovs '{"start_iov": "1", "end_iov": "1"}' \ + --db Prod \ + --test ; + +mv *.png $W_DIR/display/testSiPixelQualityProbabilityDensity_v2.png diff --git a/CondCore/Utilities/plugins/Module_2XML.cc b/CondCore/Utilities/plugins/Module_2XML.cc index 1ac70678e105c..679e75b2c7b8b 100644 --- a/CondCore/Utilities/plugins/Module_2XML.cc +++ b/CondCore/Utilities/plugins/Module_2XML.cc @@ -115,6 +115,12 @@ PAYLOAD_2XML_MODULE(pluginUtilities_payload2xml) { PAYLOAD_2XML_CLASS(EcalTPGOddWeightGroup); PAYLOAD_2XML_CLASS(EcalTPGOddWeightIdMap); PAYLOAD_2XML_CLASS(EcalTPGTPMode); + PAYLOAD_2XML_CLASS(EcalEBPhase2TPGAmplWeightIdMap); + PAYLOAD_2XML_CLASS(EcalEBPhase2TPGAmplWeights); + PAYLOAD_2XML_CLASS(EcalEBPhase2TPGLinearizationConstant); + PAYLOAD_2XML_CLASS(EcalEBPhase2TPGPedestal); + PAYLOAD_2XML_CLASS(EcalEBPhase2TPGTimeWeightIdMap); + PAYLOAD_2XML_CLASS(EcalEBPhase2TPGTimeWeights); PAYLOAD_2XML_CLASS(EcalTimeBiasCorrections); PAYLOAD_2XML_CLASS(EcalTimeDependentCorrections); PAYLOAD_2XML_CLASS(EcalTimeOffsetConstant); diff --git a/CondCore/Utilities/src/CondDBFetch.cc b/CondCore/Utilities/src/CondDBFetch.cc index e84e0b379b889..7816a0641626c 100644 --- a/CondCore/Utilities/src/CondDBFetch.cc +++ b/CondCore/Utilities/src/CondDBFetch.cc @@ -145,6 +145,12 @@ namespace cond { FETCH_PAYLOAD_CASE(EcalPulseCovariance) FETCH_PAYLOAD_CASE(EcalCondObjectContainer) FETCH_PAYLOAD_CASE(EcalPulseSymmCovariance) + FETCH_PAYLOAD_CASE(EcalEBPhase2TPGAmplWeightIdMap) + FETCH_PAYLOAD_CASE(EcalEBPhase2TPGAmplWeights) + FETCH_PAYLOAD_CASE(EcalEBPhase2TPGTimeWeightIdMap) + FETCH_PAYLOAD_CASE(EcalEBPhase2TPGTimeWeights) + FETCH_PAYLOAD_CASE(EcalEBPhase2TPGLinearizationConstant) + FETCH_PAYLOAD_CASE(EcalEBPhase2TPGPedestal) FETCH_PAYLOAD_CASE(FileBlob) FETCH_PAYLOAD_CASE(GBRForest) FETCH_PAYLOAD_CASE(GBRForestD) diff --git a/CondCore/Utilities/src/CondDBImport.cc b/CondCore/Utilities/src/CondDBImport.cc index c354ea25e1bed..7d30541b85f86 100644 --- a/CondCore/Utilities/src/CondDBImport.cc +++ b/CondCore/Utilities/src/CondDBImport.cc @@ -165,6 +165,12 @@ namespace cond { IMPORT_PAYLOAD_CASE(EcalPulseCovariance) IMPORT_PAYLOAD_CASE(EcalCondObjectContainer) IMPORT_PAYLOAD_CASE(EcalPulseSymmCovariance) + IMPORT_PAYLOAD_CASE(EcalEBPhase2TPGAmplWeightIdMap) + IMPORT_PAYLOAD_CASE(EcalEBPhase2TPGAmplWeights) + IMPORT_PAYLOAD_CASE(EcalEBPhase2TPGTimeWeightIdMap) + IMPORT_PAYLOAD_CASE(EcalEBPhase2TPGTimeWeights) + IMPORT_PAYLOAD_CASE(EcalEBPhase2TPGPedestal) + IMPORT_PAYLOAD_CASE(EcalEBPhase2TPGLinearizationConstant) IMPORT_PAYLOAD_CASE(FileBlob) IMPORT_PAYLOAD_CASE(GBRForest) IMPORT_PAYLOAD_CASE(GBRForestD) diff --git a/CondCore/Utilities/src/CondFormats.h b/CondCore/Utilities/src/CondFormats.h index 384de4c9c21f8..94ab553acd9f0 100644 --- a/CondCore/Utilities/src/CondFormats.h +++ b/CondCore/Utilities/src/CondFormats.h @@ -73,6 +73,12 @@ #include "CondFormats/EcalObjects/interface/EcalPulseShapes.h" #include "CondFormats/EcalObjects/interface/EcalPulseCovariances.h" #include "CondFormats/EcalObjects/interface/EcalPulseSymmCovariances.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeights.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeights.h" #include "CondFormats/GBRForest/interface/GBRForest.h" #include "CondFormats/GBRForest/interface/GBRForestD.h" #include "CondFormats/HcalObjects/interface/AbsOOTPileupCorrection.h" diff --git a/CondFormats/DataRecord/interface/CTPPSBeamParametersRcd.h b/CondFormats/DataRecord/interface/CTPPSBeamParametersRcd.h index a77796620c968..cd3b52a223e4d 100644 --- a/CondFormats/DataRecord/interface/CTPPSBeamParametersRcd.h +++ b/CondFormats/DataRecord/interface/CTPPSBeamParametersRcd.h @@ -8,10 +8,13 @@ #include "FWCore/Framework/interface/DependentRecordImplementation.h" #include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondFormats/DataRecord/interface/LHCInfoPerFillRcd.h" +#include "CondFormats/DataRecord/interface/LHCInfoPerLSRcd.h" #include "FWCore/Utilities/interface/mplVector.h" -class CTPPSBeamParametersRcd - : public edm::eventsetup::DependentRecordImplementation> {}; +class CTPPSBeamParametersRcd : public edm::eventsetup::DependentRecordImplementation< + CTPPSBeamParametersRcd, + edm::mpl::Vector> {}; #endif diff --git a/CondFormats/DataRecord/interface/EcalEBPhase2TPGAmplWeightIdMapRcd.h b/CondFormats/DataRecord/interface/EcalEBPhase2TPGAmplWeightIdMapRcd.h new file mode 100644 index 0000000000000..a9389ef6367a3 --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalEBPhase2TPGAmplWeightIdMapRcd.h @@ -0,0 +1,7 @@ +#ifndef CondFormats_DataRecord_EcalEBPhase2TPGAmplWeightIdMapRcd_h +#define CondFormats_DataRecord_EcalEBPhase2TPGAmplWeightIdMapRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +class EcalEBPhase2TPGAmplWeightIdMapRcd + : public edm::eventsetup::EventSetupRecordImplementation {}; +#endif diff --git a/CondFormats/DataRecord/interface/EcalEBPhase2TPGLinearizationConstRcd.h b/CondFormats/DataRecord/interface/EcalEBPhase2TPGLinearizationConstRcd.h new file mode 100644 index 0000000000000..8cae9d31c7d27 --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalEBPhase2TPGLinearizationConstRcd.h @@ -0,0 +1,7 @@ +#ifndef CondFormats_DataRecord_EcalEBPhase2TPGLinearizationConstRcd_h +#define CondFormats_DataRecord_EcalEBPhase2TPGLinearizationConstRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +class EcalEBPhase2TPGLinearizationConstRcd + : public edm::eventsetup::EventSetupRecordImplementation {}; +#endif diff --git a/CondFormats/DataRecord/interface/EcalEBPhase2TPGPedestalsRcd.h b/CondFormats/DataRecord/interface/EcalEBPhase2TPGPedestalsRcd.h new file mode 100644 index 0000000000000..399e780144b4a --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalEBPhase2TPGPedestalsRcd.h @@ -0,0 +1,7 @@ +#ifndef CondFormats_DataRecord_EcalEBPhase2TPGPedestalsRcd_h +#define CondFormats_DataRecord_EcalEBPhase2TPGPedestalsRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +class EcalEBPhase2TPGPedestalsRcd + : public edm::eventsetup::EventSetupRecordImplementation {}; +#endif diff --git a/CondFormats/DataRecord/interface/EcalEBPhase2TPGTimeWeightIdMapRcd.h b/CondFormats/DataRecord/interface/EcalEBPhase2TPGTimeWeightIdMapRcd.h new file mode 100644 index 0000000000000..7e591ffe19a73 --- /dev/null +++ b/CondFormats/DataRecord/interface/EcalEBPhase2TPGTimeWeightIdMapRcd.h @@ -0,0 +1,7 @@ +#ifndef CondFormats_DataRecord_EcalEBPhase2TPGTimeWeightIdMapRcd_h +#define CondFormats_DataRecord_EcalEBPhase2TPGTimeWeightIdMapRcd_h + +#include "FWCore/Framework/interface/EventSetupRecordImplementation.h" +class EcalEBPhase2TPGTimeWeightIdMapRcd + : public edm::eventsetup::EventSetupRecordImplementation {}; +#endif diff --git a/CondFormats/DataRecord/src/EcalEBPhase2TPGAmplWeightIdMapRcd.cc b/CondFormats/DataRecord/src/EcalEBPhase2TPGAmplWeightIdMapRcd.cc new file mode 100644 index 0000000000000..e6527eed26d8c --- /dev/null +++ b/CondFormats/DataRecord/src/EcalEBPhase2TPGAmplWeightIdMapRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGAmplWeightIdMapRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalEBPhase2TPGAmplWeightIdMapRcd); diff --git a/CondFormats/DataRecord/src/EcalEBPhase2TPGLinearizationConstRcd.cc b/CondFormats/DataRecord/src/EcalEBPhase2TPGLinearizationConstRcd.cc new file mode 100644 index 0000000000000..9e310ae324038 --- /dev/null +++ b/CondFormats/DataRecord/src/EcalEBPhase2TPGLinearizationConstRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGLinearizationConstRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalEBPhase2TPGLinearizationConstRcd); diff --git a/CondFormats/DataRecord/src/EcalEBPhase2TPGPedestalsRcd.cc b/CondFormats/DataRecord/src/EcalEBPhase2TPGPedestalsRcd.cc new file mode 100644 index 0000000000000..4d0beedfc9bdf --- /dev/null +++ b/CondFormats/DataRecord/src/EcalEBPhase2TPGPedestalsRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGPedestalsRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalEBPhase2TPGPedestalsRcd); diff --git a/CondFormats/DataRecord/src/EcalEBPhase2TPGTimeWeightIdMapRcd.cc b/CondFormats/DataRecord/src/EcalEBPhase2TPGTimeWeightIdMapRcd.cc new file mode 100644 index 0000000000000..1320e879c861f --- /dev/null +++ b/CondFormats/DataRecord/src/EcalEBPhase2TPGTimeWeightIdMapRcd.cc @@ -0,0 +1,4 @@ +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGTimeWeightIdMapRcd.h" +#include "FWCore/Framework/interface/eventsetuprecord_registration_macro.h" + +EVENTSETUP_RECORD_REG(EcalEBPhase2TPGTimeWeightIdMapRcd); diff --git a/CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h new file mode 100644 index 0000000000000..ee5a3fdb3b02c --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h @@ -0,0 +1,27 @@ +#ifndef CondFormats_EcalObjects_EcalEBPhase2TPGAmplWeightIdMap_h +#define CondFormats_EcalObjects_EcalEBPhase2TPGAmplWeightIdMap_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeights.h" +#include + +class EcalEBPhase2TPGAmplWeightIdMap { +public: + typedef std::map EcalEBPhase2TPGAmplWeightMap; + typedef std::map::const_iterator EcalEBPhase2TPGAmplWeightMapItr; + + EcalEBPhase2TPGAmplWeightIdMap(){}; + ~EcalEBPhase2TPGAmplWeightIdMap(){}; + + const EcalEBPhase2TPGAmplWeightMap& getMap() const { return map_; } + void setValue(const uint32_t& id, const EcalEBPhase2TPGAmplWeights& value); + +private: + EcalEBPhase2TPGAmplWeightMap map_; + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeights.h b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeights.h new file mode 100644 index 0000000000000..3352099f69bf4 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeights.h @@ -0,0 +1,56 @@ +#ifndef CondFormats_EcalObjects_EcalEBPhase2TPGAmplWeights_h +#define CondFormats_EcalObjects_EcalEBPhase2TPGAmplWeights_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include +#include + +class EcalEBPhase2TPGAmplWeights { +public: + EcalEBPhase2TPGAmplWeights(); + ~EcalEBPhase2TPGAmplWeights(); + + void getValues(uint32_t& w0, + uint32_t& w1, + uint32_t& w2, + uint32_t& w3, + uint32_t& w4, + uint32_t& w5, + uint32_t& w6, + uint32_t& w7, + uint32_t& w8, + uint32_t& w9, + uint32_t& w10, + uint32_t& w11) const; + void setValues(const uint32_t& w0, + const uint32_t& w1, + const uint32_t& w2, + const uint32_t& w3, + const uint32_t& w4, + const uint32_t& w5, + const uint32_t& w6, + const uint32_t& w7, + const uint32_t& w8, + const uint32_t& w9, + const uint32_t& w10, + const uint32_t& w11); + +private: + uint32_t w0_; + uint32_t w1_; + uint32_t w2_; + uint32_t w3_; + uint32_t w4_; + uint32_t w5_; + uint32_t w6_; + uint32_t w7_; + uint32_t w8_; + uint32_t w9_; + uint32_t w10_; + uint32_t w11_; + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h new file mode 100644 index 0000000000000..68813c46aa63f --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h @@ -0,0 +1,27 @@ +#ifndef CondFormats_EcalObjects_EcalEBPhase2TPGLinearizationConst_h +#define CondFormats_EcalObjects_EcalEBPhase2TPGLinearizationConst_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include "CondFormats/EcalObjects/interface/EcalCondObjectContainer.h" + +struct EcalEBPhase2TPGLinearizationConstant { + EcalEBPhase2TPGLinearizationConstant() + : mult_x10(0), mult_x1(0), shift_x10(0), shift_x1(0), i2cSub_x10(0), i2cSub_x1(0) {} + + uint32_t mult_x10; + uint32_t mult_x1; + uint32_t shift_x10; + uint32_t shift_x1; + uint32_t i2cSub_x10; + uint32_t i2cSub_x1; + + COND_SERIALIZABLE; +}; + +typedef EcalCondObjectContainer EcalEBPhase2TPGLinearizationConstMap; +typedef EcalCondObjectContainer::const_iterator + EcalEBPhase2TPGLinearizationConstMapIterator; +typedef EcalEBPhase2TPGLinearizationConstMap EcalEBPhase2TPGLinearizationConst; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h new file mode 100644 index 0000000000000..918fa6727f16b --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h @@ -0,0 +1,20 @@ +#ifndef CondFormats_EcalObjects_EcalEBPhase2TPGPedestals_h +#define CondFormats_EcalObjects_EcalEBPhase2TPGPedestals_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include "CondFormats/EcalObjects/interface/EcalCondObjectContainer.h" + +struct EcalEBPhase2TPGPedestal { + EcalEBPhase2TPGPedestal() : mean_x10(0), mean_x1(0) {} + uint32_t mean_x10; + uint32_t mean_x1; + + COND_SERIALIZABLE; +}; + +typedef EcalCondObjectContainer EcalEBPhase2TPGPedestalsMap; +typedef EcalEBPhase2TPGPedestalsMap::const_iterator EcalEBPhase2TPGPedestalsMapIterator; +typedef EcalEBPhase2TPGPedestalsMap EcalEBPhase2TPGPedestals; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h new file mode 100644 index 0000000000000..051b7c0988227 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h @@ -0,0 +1,27 @@ +#ifndef CondFormats_EcalObjects_EcalEBPhase2TPGTimeWeightIdMap_h +#define CondFormats_EcalObjects_EcalEBPhase2TPGTimeWeightIdMap_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeights.h" +#include + +class EcalEBPhase2TPGTimeWeightIdMap { +public: + typedef std::map EcalEBPhase2TPGTimeWeightMap; + typedef std::map::const_iterator EcalEBPhase2TPGTimeWeightMapItr; + + EcalEBPhase2TPGTimeWeightIdMap() {} + ~EcalEBPhase2TPGTimeWeightIdMap() {} + + const EcalEBPhase2TPGTimeWeightMap& getMap() const { return map_; } + void setValue(const uint32_t& id, const EcalEBPhase2TPGTimeWeights& value); + +private: + EcalEBPhase2TPGTimeWeightMap map_; + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeights.h b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeights.h new file mode 100644 index 0000000000000..b534733d5af87 --- /dev/null +++ b/CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeights.h @@ -0,0 +1,56 @@ +#ifndef CondFormats_EcalObjects_EcalEBPhase2TPGTimelWeights_h +#define CondFormats_EcalObjects_EcalEBPhase2TPGTimelWeights_h + +#include "CondFormats/Serialization/interface/Serializable.h" + +#include +#include + +class EcalEBPhase2TPGTimeWeights { +public: + EcalEBPhase2TPGTimeWeights(); + ~EcalEBPhase2TPGTimeWeights() {} + + void getValues(uint32_t& w0, + uint32_t& w1, + uint32_t& w2, + uint32_t& w3, + uint32_t& w4, + uint32_t& w5, + uint32_t& w6, + uint32_t& w7, + uint32_t& w8, + uint32_t& w9, + uint32_t& w10, + uint32_t& w11) const; + void setValues(const uint32_t& w0, + const uint32_t& w1, + const uint32_t& w2, + const uint32_t& w3, + const uint32_t& w4, + const uint32_t& w5, + const uint32_t& w6, + const uint32_t& w7, + const uint32_t& w8, + const uint32_t& w9, + const uint32_t& w10, + const uint32_t& w11); + +private: + uint32_t w0_; + uint32_t w1_; + uint32_t w2_; + uint32_t w3_; + uint32_t w4_; + uint32_t w5_; + uint32_t w6_; + uint32_t w7_; + uint32_t w8_; + uint32_t w9_; + uint32_t w10_; + uint32_t w11_; + + COND_SERIALIZABLE; +}; + +#endif diff --git a/CondFormats/EcalObjects/src/EcalEBPhase2TPGAmplWeightIdMap.cc b/CondFormats/EcalObjects/src/EcalEBPhase2TPGAmplWeightIdMap.cc new file mode 100644 index 0000000000000..8f7f1d3aa59ed --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalEBPhase2TPGAmplWeightIdMap.cc @@ -0,0 +1,5 @@ +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" + +void EcalEBPhase2TPGAmplWeightIdMap::setValue(const uint32_t& id, const EcalEBPhase2TPGAmplWeights& value) { + map_[id] = value; +} diff --git a/CondFormats/EcalObjects/src/EcalEBPhase2TPGAmplWeights.cc b/CondFormats/EcalObjects/src/EcalEBPhase2TPGAmplWeights.cc new file mode 100644 index 0000000000000..dafbd250ee753 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalEBPhase2TPGAmplWeights.cc @@ -0,0 +1,58 @@ +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeights.h" + +EcalEBPhase2TPGAmplWeights::EcalEBPhase2TPGAmplWeights() + : w0_(0), w1_(0), w2_(0), w3_(0), w4_(0), w5_(0), w6_(0), w7_(0), w8_(0), w9_(0), w10_(0), w11_(0) {} + +EcalEBPhase2TPGAmplWeights::~EcalEBPhase2TPGAmplWeights() {} + +void EcalEBPhase2TPGAmplWeights::getValues(uint32_t& w0, + uint32_t& w1, + uint32_t& w2, + uint32_t& w3, + uint32_t& w4, + uint32_t& w5, + uint32_t& w6, + uint32_t& w7, + uint32_t& w8, + uint32_t& w9, + uint32_t& w10, + uint32_t& w11) const { + w0 = w0_; + w1 = w1_; + w2 = w2_; + w3 = w3_; + w4 = w4_; + w5 = w5_; + w6 = w6_; + w7 = w7_; + w8 = w8_; + w9 = w9_; + w10 = w10_; + w11 = w11_; +} + +void EcalEBPhase2TPGAmplWeights::setValues(const uint32_t& w0, + const uint32_t& w1, + const uint32_t& w2, + const uint32_t& w3, + const uint32_t& w4, + const uint32_t& w5, + const uint32_t& w6, + const uint32_t& w7, + const uint32_t& w8, + const uint32_t& w9, + const uint32_t& w10, + const uint32_t& w11) { + w0_ = w0; + w1_ = w1; + w2_ = w2; + w3_ = w3; + w4_ = w4; + w5_ = w5; + w6_ = w6; + w7_ = w7; + w8_ = w8; + w9_ = w9; + w10_ = w10; + w11_ = w11; +} diff --git a/CondFormats/EcalObjects/src/EcalEBPhase2TPGTimeWeightIdMap.cc b/CondFormats/EcalObjects/src/EcalEBPhase2TPGTimeWeightIdMap.cc new file mode 100644 index 0000000000000..dc2124524e175 --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalEBPhase2TPGTimeWeightIdMap.cc @@ -0,0 +1,5 @@ +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" + +void EcalEBPhase2TPGTimeWeightIdMap::setValue(const uint32_t& id, const EcalEBPhase2TPGTimeWeights& value) { + map_[id] = value; +} diff --git a/CondFormats/EcalObjects/src/EcalEBPhase2TPGTimeWeights.cc b/CondFormats/EcalObjects/src/EcalEBPhase2TPGTimeWeights.cc new file mode 100644 index 0000000000000..bbc5d47e3973f --- /dev/null +++ b/CondFormats/EcalObjects/src/EcalEBPhase2TPGTimeWeights.cc @@ -0,0 +1,56 @@ +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeights.h" + +EcalEBPhase2TPGTimeWeights::EcalEBPhase2TPGTimeWeights() + : w0_(0), w1_(0), w2_(0), w3_(0), w4_(0), w5_(0), w6_(0), w7_(0), w8_(0), w9_(0), w10_(0), w11_(0) {} + +void EcalEBPhase2TPGTimeWeights::getValues(uint32_t& w0, + uint32_t& w1, + uint32_t& w2, + uint32_t& w3, + uint32_t& w4, + uint32_t& w5, + uint32_t& w6, + uint32_t& w7, + uint32_t& w8, + uint32_t& w9, + uint32_t& w10, + uint32_t& w11) const { + w0 = w0_; + w1 = w1_; + w2 = w2_; + w3 = w3_; + w4 = w4_; + w5 = w5_; + w6 = w6_; + w7 = w7_; + w8 = w8_; + w9 = w9_; + w10 = w10_; + w11 = w11_; +} + +void EcalEBPhase2TPGTimeWeights::setValues(const uint32_t& w0, + const uint32_t& w1, + const uint32_t& w2, + const uint32_t& w3, + const uint32_t& w4, + const uint32_t& w5, + const uint32_t& w6, + const uint32_t& w7, + const uint32_t& w8, + const uint32_t& w9, + const uint32_t& w10, + const uint32_t& w11) { + w0_ = w0; + w1_ = w1; + w2_ = w2; + w3_ = w3; + w4_ = w4; + w5_ = w5; + w6_ = w6; + w7_ = w7; + w8_ = w8; + w9_ = w9; + w10_ = w10; + w11_ = w11; +} diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGAmplWeightIdMap.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGAmplWeightIdMap.cc new file mode 100644 index 0000000000000..60f388c8131b7 --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGAmplWeightIdMap.cc @@ -0,0 +1,14 @@ +// -*- C++ -*- +// +// Author: Nancy Marinelli +// Created: +// $Id: T_EventSetup_EcalEBPhase2TPGAmplWeightIdMap.cc $ +// + +// system include files + +// user include files +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalEBPhase2TPGAmplWeightIdMap); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGLinearizationConst.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGLinearizationConst.cc new file mode 100644 index 0000000000000..a5568f53950be --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGLinearizationConst.cc @@ -0,0 +1,17 @@ +// -*- C++ -*- +// +// Implementation: +// create all the 'infrastructure' needed to get into the Context +// +// Author: Nancy Marinelli +// Created: +// $Id: T_EventSetup_EcalEBPhase2TPGLinearizationConst.cc $ +// + +// system include files + +// user include files +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalEBPhase2TPGLinearizationConst); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGPedestals.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGPedestals.cc new file mode 100644 index 0000000000000..6919fbd5dd486 --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGPedestals.cc @@ -0,0 +1,17 @@ +// -*- C++ -*- +// +// Implementation: +// create all the 'infrastructure' needed to get into the Context +// +// Author: Nancy Marinelli +// Created: +// $Id: T_EventSetup_EcalEBPhase2TPGPedestals.cc $ +// + +// system include files + +// user include files +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalEBPhase2TPGPedestals); diff --git a/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGTimeWeightIdMap.cc b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGTimeWeightIdMap.cc new file mode 100644 index 0000000000000..2b326b3ad9f3a --- /dev/null +++ b/CondFormats/EcalObjects/src/T_EventSetup_EcalEBPhase2TPGTimeWeightIdMap.cc @@ -0,0 +1,13 @@ +// -*- C++ -*- +// +// Author: Nancy Marinelli +// $Id: T_EventSetup_EcalEBPhase2TPGTimeWeightIdMap.cc $ +// + +// system include files + +// user include files +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" +#include "FWCore/Utilities/interface/typelookup.h" + +TYPELOOKUP_DATA_REG(EcalEBPhase2TPGTimeWeightIdMap); diff --git a/CondFormats/EcalObjects/src/classes.h b/CondFormats/EcalObjects/src/classes.h index cf9e4896a0f2b..ed447d09237a9 100644 --- a/CondFormats/EcalObjects/src/classes.h +++ b/CondFormats/EcalObjects/src/classes.h @@ -73,3 +73,7 @@ //ECAL PH2: #include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" #include "CondFormats/EcalObjects/interface/EcalCATIAGainRatios.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" diff --git a/CondFormats/EcalObjects/src/classes_def.xml b/CondFormats/EcalObjects/src/classes_def.xml index a6895cbdf9f58..76e5ece0cb2fe 100644 --- a/CondFormats/EcalObjects/src/classes_def.xml +++ b/CondFormats/EcalObjects/src/classes_def.xml @@ -112,6 +112,18 @@ + + + + + + + + + + + + @@ -123,6 +135,19 @@ + + + + + + + + + + + + + @@ -224,6 +249,12 @@ + + + + + + diff --git a/CondTools/RunInfo/interface/LHCInfoCombined.h b/CondTools/RunInfo/interface/LHCInfoCombined.h index 2f6aab4289642..aef3dbe4cfb01 100644 --- a/CondTools/RunInfo/interface/LHCInfoCombined.h +++ b/CondTools/RunInfo/interface/LHCInfoCombined.h @@ -43,7 +43,7 @@ class LHCInfoCombined { void setFromPerLS(const LHCInfoPerLS& infoPerLS); void setFromPerFill(const LHCInfoPerFill& infoPerFill); - float crossingAngle(); + float crossingAngle() const; static constexpr float crossingAngleInvalid = -1.; bool isCrossingAngleInvalid(); diff --git a/CondTools/RunInfo/src/LHCInfoCombined.cc b/CondTools/RunInfo/src/LHCInfoCombined.cc index f489adfbbe3d6..c2376f970b606 100644 --- a/CondTools/RunInfo/src/LHCInfoCombined.cc +++ b/CondTools/RunInfo/src/LHCInfoCombined.cc @@ -43,7 +43,7 @@ void LHCInfoCombined::setFromPerFill(const LHCInfoPerFill& infoPerFill) { fillNumber = infoPerFill.fillNumber(); } -float LHCInfoCombined::crossingAngle() { +float LHCInfoCombined::crossingAngle() const { if (crossingAngleX == 0. && crossingAngleY == 0.) { return crossingAngleInvalid; } diff --git a/CondTools/SiStrip/plugins/SiStripApvGainInspector.cc b/CondTools/SiStrip/plugins/SiStripApvGainInspector.cc new file mode 100644 index 0000000000000..3203328cd36c5 --- /dev/null +++ b/CondTools/SiStrip/plugins/SiStripApvGainInspector.cc @@ -0,0 +1,1145 @@ +// -*- C++ -*- +// +// Package: CondTools/SiStrip +// Class: SiStripApvGainInspector +// +/* + *\class SiStripApvGainInspector SiStripApvGainInspector.cc CalibTracker/SiStripChannelGain/plugins/SiStripApvGainInspector.cc + + Description: This module allows redo the per-APV gain fits with different PDFs (landau, landau + gaus convolution, etc.) starting from the Charge vs APV index plot produced in the SiStrip G2 APV gain PCL workflow. It is possible to inspect the 1D charge distributions for certain APVs after fitting by means of specifying them via the parameter selectedModules. + + Implementation: largely based off CalibTracker/SiStripChannelGain/src/SiStripGainsPCLHarvester.cc + +*/ +// +// Original Author: Marco Musich +// Created: Tue, 05 Jun 2018 15:46:15 GMT +// +// + +// system include files +#include /* log */ +#include + +// user include files +#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h" +#include "CalibFormats/SiStripObjects/interface/SiStripGain.h" +#include "CalibFormats/SiStripObjects/interface/SiStripQuality.h" +#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h" +#include "CalibTracker/Records/interface/SiStripGainRcd.h" +#include "CalibTracker/SiStripChannelGain/interface/APVGainStruct.h" +#include "CalibTracker/Records/interface/SiStripQualityRcd.h" +#include "CommonTools/TrackerMap/interface/TrackerMap.h" +#include "CommonTools/UtilAlgos/interface/TFileService.h" +#include "CondCore/DBOutputService/interface/PoolDBOutputService.h" +#include "CondFormats/SiStripObjects/interface/SiStripApvGain.h" +#include "CondTools/SiStrip/interface/SiStripMiscalibrateHelper.h" +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "Geometry/CommonDetUnit/interface/TrackingGeometry.h" +#include "Geometry/CommonTopologies/interface/PixelGeomDetUnit.h" +#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" +#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" +#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h" +#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" + +// ROOT includes +#include "TStyle.h" +#include "TCanvas.h" +#include "TFile.h" +#include "TTree.h" +#include "TH1F.h" +#include "TH2S.h" +#include "TProfile.h" +#include "TF1.h" + +// +// class declaration +// +class SiStripApvGainInspector : public edm::one::EDAnalyzer { +public: + explicit SiStripApvGainInspector(const edm::ParameterSet&); + ~SiStripApvGainInspector() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void beginJob() override; + void analyze(const edm::Event&, const edm::EventSetup&) override; + void endJob() override; + void checkBookAPVColls(const edm::EventSetup& es); + void checkAndRetrieveTopology(const edm::EventSetup& setup); + bool isGoodLandauFit(double* FitResults); + void getPeakOfLandau(TH1* InputHisto, double* FitResults, double LowRange = 50, double HighRange = 5400); + void getPeakOfLanGau(TH1* InputHisto, double* FitResults, double LowRange = 50, double HighRange = 5400); + void doFakeFit(TH1* InputHisto, double* FitResults); + void getPeakOfLandauAroundMax(TH1* InputHisto, double* FitResults, double LowRange = 100, double HighRange = 100); + static double langaufun(Double_t* x, Double_t* par); + void storeOnTree(TFileService* tfs); + void makeNicePlotStyle(TH1F* plot); + std::unique_ptr getNewObject(); + std::map bookQualityMonitor(const TFileDirectory& dir); + void fillQualityMonitor(); + + void inline fill1D(std::map& h, const std::string& s, double x) { + if (h.count(s) == 0) { + edm::LogWarning("SiStripApvGainInspector") << "Trying to fill non-existing Histogram named " << s << std::endl; + return; + } + h[s]->Fill(x); + } + + void inline fill2D(std::map& h, const std::string& s, double x, double y) { + if (h.count(s) == 0) { + edm::LogWarning("SiStripApvGainInspector") << "Trying to fill non-existing Histogram named " << s << std::endl; + return; + } + h[s]->Fill(x, y); + } + + // ----------member data --------------------------- + enum fitMode { landau = 1, landauAroundMax = 2, landauGauss = 3, fake = 4 }; + + const std::vector fitModeStrings = { + "", // Enum values start from 1, so index 0 is empty or can be used as "invalid" + "landau", + "landauAroundMax", + "landauGauss", + "fake"}; + + inline bool isValidMode(int mode) const { + return mode == landau || mode == landauAroundMax || mode == landauGauss || mode == fake; + } + + const edm::ESGetToken gainToken_; + const edm::ESGetToken qualityToken_; + const edm::ESGetToken tkGeomToken_; + const edm::ESGetToken tTopoToken_; + + TFileService* tfs; + + // map the APV ids to the charge plots + std::map, TH1F*> histoMap_; + + edm::ESHandle tkGeom_; + const TrackerGeometry* bareTkGeomPtr_; // ugly hack to fill APV colls only once, but checks + const TrackerTopology* tTopo_; + + int NStripAPVs; + int NPixelDets; + + unsigned int GOOD; + unsigned int BAD; + unsigned int MASKED; + + std::vector> APVsCollOrdered; + std::unordered_map> APVsColl; + + const TH2F* Charge_Vs_Index; + TFile* fin; + fitMode fitMode_; // Declare the enum variable + const std::string filename_; + double minNrEntries; + std::vector wantedmods; + + std::unique_ptr ratio_map; + std::unique_ptr old_payload_map; + std::unique_ptr new_payload_map; + std::unique_ptr mpv_map; + std::unique_ptr mpv_err_map; + std::unique_ptr entries_map; + std::unique_ptr fitChi2_map; + + std::map hControl; +}; + +// +// constructors and destructor +// +SiStripApvGainInspector::SiStripApvGainInspector(const edm::ParameterSet& iConfig) + : gainToken_(esConsumes()), + qualityToken_(esConsumes()), + tkGeomToken_(esConsumes()), + tTopoToken_(esConsumes()), + bareTkGeomPtr_(nullptr), + tTopo_(nullptr), + GOOD(0), + BAD(0), + filename_(iConfig.getUntrackedParameter("inputFile")), + minNrEntries(iConfig.getUntrackedParameter("minNrEntries", 20)), + wantedmods(iConfig.getUntrackedParameter>("selectedModules")) { + usesResource(TFileService::kSharedResource); + usesResource(cond::service::PoolDBOutputService::kSharedResource); + + sort(wantedmods.begin(), wantedmods.end()); + + edm::LogInfo("SelectedModules") << "Selected module list"; + for (std::vector::const_iterator mod = wantedmods.begin(); mod != wantedmods.end(); mod++) { + edm::LogVerbatim("SelectedModules") << *mod; + } + + int modeValue = iConfig.getParameter("fitMode"); + if (!isValidMode(modeValue)) { + throw std::invalid_argument("Invalid value provided for 'fitMode'"); + } else { + edm::LogPrint("SiStripApvGainInspector") << "Chosen fitting mode: " << fitModeStrings[modeValue]; + } + + fitMode_ = static_cast(modeValue); + + //now do what ever initialization is needed + fin = TFile::Open(filename_.c_str(), "READ"); + Charge_Vs_Index = (TH2F*)fin->Get("DQMData/Run 999999/AlCaReco/Run summary/SiStripGainsAAG/Charge_Vs_Index_AagBunch"); + + ratio_map = std::make_unique("ratio"); + ratio_map->setTitle("Average by module of the G2 Gain payload ratio (new/old)"); + ratio_map->setPalette(1); + + new_payload_map = std::make_unique("new_payload"); + new_payload_map->setTitle("Tracker Map of Updated G2 Gain payload averaged by module"); + new_payload_map->setPalette(1); + + old_payload_map = std::make_unique("old_payload"); + old_payload_map->setTitle("Tracker Map of Starting G2 Gain Payload averaged by module"); + old_payload_map->setPalette(1); + + // fit quality maps + + mpv_map = std::make_unique("MPV"); + mpv_map->setTitle("Landau Fit MPV average value per module [ADC counts/mm]"); + mpv_map->setPalette(1); + + mpv_err_map = std::make_unique("MPVerr"); + mpv_err_map->setTitle("Landau Fit MPV average error per module [ADC counts/mm]"); + mpv_err_map->setPalette(1); + + entries_map = std::make_unique("Entries"); + entries_map->setTitle("log_{10}(entries) average per module"); + entries_map->setPalette(1); + + fitChi2_map = std::make_unique("FitChi2"); + fitChi2_map->setTitle("log_{10}(Fit #chi^{2}/ndf) average per module"); + fitChi2_map->setPalette(1); +} + +// do anything here that needs to be done at desctruction time +// (e.g. close files, deallocate resources etc.) +SiStripApvGainInspector::~SiStripApvGainInspector() { + fin->Close(); + delete fin; +} + +// +// member functions +// + +// ------------ method called for each event ------------ +void SiStripApvGainInspector::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + this->checkBookAPVColls(iSetup); // check whether APV colls are booked and do so if not yet done + this->checkAndRetrieveTopology(iSetup); + + edm::ESHandle gainHandle = iSetup.getHandle(gainToken_); + if (!gainHandle.isValid()) { + edm::LogError("SiStripApvGainInspector") << "gainHandle is not valid\n"; + exit(0); + } + + edm::ESHandle SiStripQuality_ = iSetup.getHandle(qualityToken_); + + for (unsigned int a = 0; a < APVsCollOrdered.size(); a++) { + std::shared_ptr APV = APVsCollOrdered[a]; + + if (APV->SubDet == PixelSubdetector::PixelBarrel || APV->SubDet == PixelSubdetector::PixelEndcap) + continue; + + APV->isMasked = SiStripQuality_->IsApvBad(APV->DetId, APV->APVId); + + if (gainHandle->getNumberOfTags() != 2) { + edm::LogError("SiStripApvGainInspector") << "NUMBER OF GAIN TAG IS EXPECTED TO BE 2\n"; + fflush(stdout); + exit(0); + }; + float newPreviousGain = gainHandle->getApvGain(APV->APVId, gainHandle->getRange(APV->DetId, 1), 1); + if (APV->PreviousGain != 1 and newPreviousGain != APV->PreviousGain) + edm::LogWarning("SiStripApvGainInspector") << "WARNING: ParticleGain in the global tag changed\n"; + APV->PreviousGain = newPreviousGain; + + float newPreviousGainTick = gainHandle->getApvGain(APV->APVId, gainHandle->getRange(APV->DetId, 0), 0); + if (APV->PreviousGainTick != 1 and newPreviousGainTick != APV->PreviousGainTick) { + edm::LogWarning("SiStripApvGainInspector") + << "WARNING: TickMarkGain in the global tag changed\n" + << std::endl + << " APV->SubDet: " << APV->SubDet << " APV->APVId:" << APV->APVId << std::endl + << " APV->PreviousGainTick: " << APV->PreviousGainTick << " newPreviousGainTick: " << newPreviousGainTick + << std::endl; + } + APV->PreviousGainTick = newPreviousGainTick; + } + + unsigned int I = 0; + TH1F* Proj = nullptr; + double FitResults[6]; + double MPVmean = 300; + + if (Charge_Vs_Index == nullptr) { + edm::LogError("SiStripGainsPCLHarvester") << "Harvesting: could not find input histogram " << std::endl; + return; + } + + printf("Progressing Bar :0%% 20%% 40%% 60%% 80%% 100%%\n"); + printf("Fitting Charge Distribution :"); + int TreeStep = APVsColl.size() / 50; + + for (auto it = APVsColl.begin(); it != APVsColl.end(); it++, I++) { + if (I % TreeStep == 0) { + printf("."); + fflush(stdout); + } + std::shared_ptr APV = it->second; + if (APV->Bin < 0) + APV->Bin = Charge_Vs_Index->GetXaxis()->FindBin(APV->Index); + + Proj = (TH1F*)(Charge_Vs_Index->ProjectionY( + "", Charge_Vs_Index->GetXaxis()->FindBin(APV->Index), Charge_Vs_Index->GetXaxis()->FindBin(APV->Index), "e")); + if (!Proj) + continue; + + switch (fitMode_) { + case landau: + getPeakOfLandau(Proj, FitResults); + break; + case landauAroundMax: + getPeakOfLandauAroundMax(Proj, FitResults); + break; + case landauGauss: + getPeakOfLanGau(Proj, FitResults); + break; + case fake: + doFakeFit(Proj, FitResults); + break; + default: + throw std::invalid_argument("Invalid value provided for 'fitMode'"); + } + + APV->FitMPV = FitResults[0]; + APV->FitMPVErr = FitResults[1]; + APV->FitWidth = FitResults[2]; + APV->FitWidthErr = FitResults[3]; + APV->FitChi2 = FitResults[4]; + APV->FitNorm = FitResults[5]; + APV->NEntries = Proj->GetEntries(); + + for (const auto& mod : wantedmods) { + if (mod == APV->DetId) { + edm::LogInfo("ModuleFound") << " module " << mod << " found! Storing... " << std::endl; + histoMap_[std::make_pair(APV->APVId, APV->DetId)] = (TH1F*)Proj->Clone(Form("hClone_%s", Proj->GetName())); + } + } + + if (isGoodLandauFit(FitResults)) { + APV->Gain = APV->FitMPV / MPVmean; + if (APV->SubDet > 2) + GOOD++; + } else { + APV->Gain = APV->PreviousGain; + if (APV->SubDet > 2) + BAD++; + } + if (APV->Gain <= 0) + APV->Gain = 1; + + delete Proj; + } + printf("\n"); +} + +//********************************************************************************// +// ------------ method called once each job just before starting event loop ------------ +void SiStripApvGainInspector::checkBookAPVColls(const edm::EventSetup& es) { + tkGeom_ = es.getHandle(tkGeomToken_); + const TrackerGeometry* newBareTkGeomPtr = &(*tkGeom_); + if (newBareTkGeomPtr == bareTkGeomPtr_) + return; // already filled APVColls, nothing changed + + if (!bareTkGeomPtr_) { // pointer not yet set: called the first time => fill the APVColls + auto const& Det = newBareTkGeomPtr->dets(); + + unsigned int Index = 0; + + for (unsigned int i = 0; i < Det.size(); i++) { + DetId Detid = Det[i]->geographicalId(); + int SubDet = Detid.subdetId(); + + if (SubDet == StripSubdetector::TIB || SubDet == StripSubdetector::TID || SubDet == StripSubdetector::TOB || + SubDet == StripSubdetector::TEC) { + auto DetUnit = dynamic_cast(Det[i]); + if (!DetUnit) + continue; + + const StripTopology& Topo = DetUnit->specificTopology(); + unsigned int NAPV = Topo.nstrips() / 128; + + for (unsigned int j = 0; j < NAPV; j++) { + auto APV = std::make_shared(); + APV->Index = Index; + APV->Bin = -1; + APV->DetId = Detid.rawId(); + APV->APVId = j; + APV->SubDet = SubDet; + APV->FitMPV = -1; + APV->FitMPVErr = -1; + APV->FitWidth = -1; + APV->FitWidthErr = -1; + APV->FitChi2 = -1; + APV->FitNorm = -1; + APV->Gain = -1; + APV->PreviousGain = 1; + APV->PreviousGainTick = 1; + APV->x = DetUnit->position().basicVector().x(); + APV->y = DetUnit->position().basicVector().y(); + APV->z = DetUnit->position().basicVector().z(); + APV->Eta = DetUnit->position().basicVector().eta(); + APV->Phi = DetUnit->position().basicVector().phi(); + APV->R = DetUnit->position().basicVector().transverse(); + APV->Thickness = DetUnit->surface().bounds().thickness(); + APV->NEntries = 0; + APV->isMasked = false; + + APVsCollOrdered.push_back(APV); + APVsColl[(APV->DetId << 4) | APV->APVId] = APV; + Index++; + NStripAPVs++; + } // loop on APVs + } // if is Strips + } // loop on dets + + for (unsigned int i = 0; i < Det.size(); + i++) { //Make two loop such that the Pixel information is added at the end --> make transition simpler + DetId Detid = Det[i]->geographicalId(); + int SubDet = Detid.subdetId(); + if (SubDet == PixelSubdetector::PixelBarrel || SubDet == PixelSubdetector::PixelEndcap) { + auto DetUnit = dynamic_cast(Det[i]); + if (!DetUnit) + continue; + + const PixelTopology& Topo = DetUnit->specificTopology(); + unsigned int NROCRow = Topo.nrows() / (80.); + unsigned int NROCCol = Topo.ncolumns() / (52.); + + for (unsigned int j = 0; j < NROCRow; j++) { + for (unsigned int i = 0; i < NROCCol; i++) { + auto APV = std::make_shared(); + APV->Index = Index; + APV->Bin = -1; + APV->DetId = Detid.rawId(); + APV->APVId = (j << 3 | i); + APV->SubDet = SubDet; + APV->FitMPV = -1; + APV->FitMPVErr = -1; + APV->FitWidth = -1; + APV->FitWidthErr = -1; + APV->FitChi2 = -1; + APV->Gain = -1; + APV->PreviousGain = 1; + APV->PreviousGainTick = 1; + APV->x = DetUnit->position().basicVector().x(); + APV->y = DetUnit->position().basicVector().y(); + APV->z = DetUnit->position().basicVector().z(); + APV->Eta = DetUnit->position().basicVector().eta(); + APV->Phi = DetUnit->position().basicVector().phi(); + APV->R = DetUnit->position().basicVector().transverse(); + APV->Thickness = DetUnit->surface().bounds().thickness(); + APV->isMasked = false; //SiPixelQuality_->IsModuleBad(Detid.rawId()); + APV->NEntries = 0; + + APVsCollOrdered.push_back(APV); + APVsColl[(APV->DetId << 4) | APV->APVId] = APV; + Index++; + NPixelDets++; + + } // loop on ROC cols + } // loop on ROC rows + } // if Pixel + } // loop on Dets + } //if (!bareTkGeomPtr_) ... + bareTkGeomPtr_ = newBareTkGeomPtr; +} + +void SiStripApvGainInspector::storeOnTree(TFileService* tfs) { + unsigned int tree_Index; + unsigned int tree_Bin; + unsigned int tree_DetId; + unsigned char tree_APVId; + unsigned char tree_SubDet; + float tree_x; + float tree_y; + float tree_z; + float tree_Eta; + float tree_R; + float tree_Phi; + float tree_Thickness; + float tree_FitMPV; + float tree_FitMPVErr; + float tree_FitWidth; + float tree_FitWidthErr; + float tree_FitChi2NDF; + float tree_FitNorm; + double tree_Gain; + double tree_PrevGain; + double tree_PrevGainTick; + double tree_NEntries; + bool tree_isMasked; + + TTree* MyTree; + MyTree = tfs->make("APVGain", "APVGain"); + MyTree->Branch("Index", &tree_Index, "Index/i"); + MyTree->Branch("Bin", &tree_Bin, "Bin/i"); + MyTree->Branch("DetId", &tree_DetId, "DetId/i"); + MyTree->Branch("APVId", &tree_APVId, "APVId/b"); + MyTree->Branch("SubDet", &tree_SubDet, "SubDet/b"); + MyTree->Branch("x", &tree_x, "x/F"); + MyTree->Branch("y", &tree_y, "y/F"); + MyTree->Branch("z", &tree_z, "z/F"); + MyTree->Branch("Eta", &tree_Eta, "Eta/F"); + MyTree->Branch("R", &tree_R, "R/F"); + MyTree->Branch("Phi", &tree_Phi, "Phi/F"); + MyTree->Branch("Thickness", &tree_Thickness, "Thickness/F"); + MyTree->Branch("FitMPV", &tree_FitMPV, "FitMPV/F"); + MyTree->Branch("FitMPVErr", &tree_FitMPVErr, "FitMPVErr/F"); + MyTree->Branch("FitWidth", &tree_FitWidth, "FitWidth/F"); + MyTree->Branch("FitWidthErr", &tree_FitWidthErr, "FitWidthErr/F"); + MyTree->Branch("FitChi2NDF", &tree_FitChi2NDF, "FitChi2NDF/F"); + MyTree->Branch("FitNorm", &tree_FitNorm, "FitNorm/F"); + MyTree->Branch("Gain", &tree_Gain, "Gain/D"); + MyTree->Branch("PrevGain", &tree_PrevGain, "PrevGain/D"); + MyTree->Branch("PrevGainTick", &tree_PrevGainTick, "PrevGainTick/D"); + MyTree->Branch("NEntries", &tree_NEntries, "NEntries/D"); + MyTree->Branch("isMasked", &tree_isMasked, "isMasked/O"); + + uint32_t cachedId(0); + SiStripMiscalibrate::Entry gain_ratio; + SiStripMiscalibrate::Entry o_gain; + SiStripMiscalibrate::Entry n_gain; + SiStripMiscalibrate::Entry mpv; + SiStripMiscalibrate::Entry mpv_err; + SiStripMiscalibrate::Entry entries; + SiStripMiscalibrate::Entry fitChi2; + + for (unsigned int a = 0; a < APVsCollOrdered.size(); a++) { + std::shared_ptr APV = APVsCollOrdered[a]; + if (APV == nullptr) + continue; + // printf( "%i | %i | PreviousGain = %7.5f NewGain = %7.5f (#clusters=%8.0f)\n", APV->DetId,APV->APVId,APV->PreviousGain,APV->Gain, APV->NEntries); + //fprintf(Gains,"%i | %i | PreviousGain = %7.5f(tick) x %7.5f(particle) NewGain (particle) = %7.5f (#clusters=%8.0f)\n", APV->DetId,APV->APVId,APV->PreviousGainTick, APV->PreviousGain,APV->Gain, APV->NEntries); + + // do not fill the Pixel + if (APV->SubDet == PixelSubdetector::PixelBarrel || APV->SubDet == PixelSubdetector::PixelEndcap) + continue; + + tree_Index = APV->Index; + tree_Bin = Charge_Vs_Index->GetXaxis()->FindBin(APV->Index); + tree_DetId = APV->DetId; + tree_APVId = APV->APVId; + tree_SubDet = APV->SubDet; + tree_x = APV->x; + tree_y = APV->y; + tree_z = APV->z; + tree_Eta = APV->Eta; + tree_R = APV->R; + tree_Phi = APV->Phi; + tree_Thickness = APV->Thickness; + tree_FitMPV = APV->FitMPV; + tree_FitMPVErr = APV->FitMPVErr; + tree_FitWidth = APV->FitWidth; + tree_FitWidthErr = APV->FitWidthErr; + tree_FitChi2NDF = APV->FitChi2; + tree_FitNorm = APV->FitNorm; + tree_Gain = APV->Gain; + tree_PrevGain = APV->PreviousGain; + tree_PrevGainTick = APV->PreviousGainTick; + tree_NEntries = APV->NEntries; + tree_isMasked = APV->isMasked; + + // flush the counters + if (cachedId != 0 && tree_DetId != cachedId) { + //ratio_map->fill(cachedId,gain_ratio.mean()); + ratio_map->fill(cachedId, o_gain.mean() / n_gain.mean()); + old_payload_map->fill(cachedId, o_gain.mean()); + new_payload_map->fill(cachedId, n_gain.mean()); + + if (entries.mean() > 0) { + mpv_map->fill(cachedId, mpv.mean()); + mpv_err_map->fill(cachedId, mpv_err.mean()); + entries_map->fill(cachedId, log10(entries.mean())); + if (fitChi2.mean() > 0) { + fitChi2_map->fill(cachedId, log10(fitChi2.mean())); + } else { + fitChi2_map->fill(cachedId, -1); + } + } + + gain_ratio.reset(); + o_gain.reset(); + n_gain.reset(); + + mpv.reset(); + mpv_err.reset(); + entries.reset(); + fitChi2.reset(); + } + + cachedId = tree_DetId; + gain_ratio.add(tree_PrevGain / tree_Gain); + o_gain.add(tree_PrevGain); + n_gain.add(tree_Gain); + mpv.add(tree_FitMPV); + mpv_err.add(tree_FitMPVErr); + entries.add(tree_NEntries); + fitChi2.add(tree_FitChi2NDF); + + if (tree_DetId == 402673324) { + printf("%i | %i : %f --> %f (%f)\n", tree_DetId, tree_APVId, tree_PrevGain, tree_Gain, tree_NEntries); + } + + MyTree->Fill(); + } +} + +//********************************************************************************// +void SiStripApvGainInspector::checkAndRetrieveTopology(const edm::EventSetup& setup) { + if (!tTopo_) { + edm::ESHandle TopoHandle = setup.getHandle(tTopoToken_); + tTopo_ = TopoHandle.product(); + } +} + +//********************************************************************************// +void SiStripApvGainInspector::getPeakOfLandau(TH1* InputHisto, double* FitResults, double LowRange, double HighRange) { + FitResults[0] = -0.5; //MPV + FitResults[1] = 0; //MPV error + FitResults[2] = -0.5; //Width + FitResults[3] = 0; //Width error + FitResults[4] = -0.5; //Fit Chi2/NDF + FitResults[5] = 0; //Normalization + + if (InputHisto->GetEntries() < minNrEntries) + return; + + // perform fit with standard landau + TF1 MyLandau("MyLandau", "landau", LowRange, HighRange); + MyLandau.SetParameter(1, 300); + InputHisto->Fit(&MyLandau, "QR WW"); + + // MPV is parameter 1 (0=constant, 1=MPV, 2=Sigma) + FitResults[0] = MyLandau.GetParameter(1); //MPV + FitResults[1] = MyLandau.GetParError(1); //MPV error + FitResults[2] = MyLandau.GetParameter(2); //Width + FitResults[3] = MyLandau.GetParError(2); //Width error + FitResults[4] = MyLandau.GetChisquare() / MyLandau.GetNDF(); //Fit Chi2/NDF + FitResults[5] = MyLandau.GetParameter(0); +} + +void SiStripApvGainInspector::doFakeFit(TH1* InputHisto, double* FitResults) { + FitResults[0] = -0.5; //MPV + FitResults[1] = 0; //MPV error + FitResults[2] = -0.5; //Width + FitResults[3] = 0; //Width error + FitResults[4] = -0.5; //Fit Chi2/NDF + FitResults[5] = 0; //Normalization +} + +//********************************************************************************// +double SiStripApvGainInspector::langaufun(Double_t* x, Double_t* par) +//********************************************************************************// +{ + //Fit parameters: + //par[0]=Width (scale) parameter of Landau density + //par[1]=Most Probable (MP, location) parameter of Landau density + //par[2]=Total area (integral -inf to inf, normalization constant) + //par[3]=Width (sigma) of convoluted Gaussian function + // + //In the Landau distribution (represented by the CERNLIB approximation), + //the maximum is located at x=-0.22278298 with the location parameter=0. + //This shift is corrected within this function, so that the actual + //maximum is identical to the MP parameter. + + // Numeric constants + Double_t invsq2pi = 0.3989422804014; // (2 pi)^(-1/2) + Double_t mpshift = -0.22278298; // Landau maximum location + + // Control constants + Double_t np = 100.0; // number of convolution steps + Double_t sc = 5.0; // convolution extends to +-sc Gaussian sigmas + + // Variables + Double_t xx; + Double_t mpc; + Double_t fland; + Double_t sum = 0.0; + Double_t xlow, xupp; + Double_t step; + Double_t i; + + // MP shift correction + mpc = par[1] - mpshift * par[0]; + + // Range of convolution integral + xlow = x[0] - sc * par[3]; + xupp = x[0] + sc * par[3]; + + step = (xupp - xlow) / np; + + // Convolution integral of Landau and Gaussian by sum + for (i = 1.0; i <= np / 2; i++) { + xx = xlow + (i - .5) * step; + fland = TMath::Landau(xx, mpc, par[0]) / par[0]; + sum += fland * TMath::Gaus(x[0], xx, par[3]); + + xx = xupp - (i - .5) * step; + fland = TMath::Landau(xx, mpc, par[0]) / par[0]; + sum += fland * TMath::Gaus(x[0], xx, par[3]); + } + + return (par[2] * step * sum * invsq2pi / par[3]); +} + +//********************************************************************************// +void SiStripApvGainInspector::getPeakOfLanGau(TH1* InputHisto, double* FitResults, double LowRange, double HighRange) { + FitResults[0] = -0.5; //MPV + FitResults[1] = 0; //MPV error + FitResults[2] = -0.5; //Width + FitResults[3] = 0; //Width error + FitResults[4] = -0.5; //Fit Chi2/NDF + FitResults[5] = 0; //Normalization + + if (InputHisto->GetEntries() < minNrEntries) + return; + + // perform fit with standard landau + TF1 MyLandau("MyLandau", "landau", LowRange, HighRange); + MyLandau.SetParameter(1, 300); + InputHisto->Fit(&MyLandau, "QR WW"); + + double startvalues[4] = {100, 300, 10000, 100}; + double parlimitslo[4] = {0, 250, 10, 0}; + double parlimitshi[4] = {200, 350, 1000000, 200}; + + TF1 MyLangau("MyLanGau", langaufun, LowRange, HighRange, 4); + + MyLangau.SetParameters(startvalues); + MyLangau.SetParNames("Width", "MP", "Area", "GSigma"); + + for (unsigned int i = 0; i < 4; i++) { + MyLangau.SetParLimits(i, parlimitslo[i], parlimitshi[i]); + } + + InputHisto->Fit("MyLanGau", "QRB0"); // fit within specified range, use ParLimits, do not plot + + // MPV is parameter 1 (0=constant, 1=MPV, 2=Sigma) + FitResults[0] = MyLangau.GetParameter(1); //MPV + FitResults[1] = MyLangau.GetParError(1); //MPV error + FitResults[2] = MyLangau.GetParameter(0); //Width + FitResults[3] = MyLangau.GetParError(0); //Width error + FitResults[4] = MyLangau.GetChisquare() / MyLangau.GetNDF(); //Fit Chi2/NDF + FitResults[5] = MyLangau.GetParameter(3); +} + +//********************************************************************************// +void SiStripApvGainInspector::getPeakOfLandauAroundMax(TH1* InputHisto, + double* FitResults, + double LowRange, + double HighRange) { + FitResults[0] = -0.5; //MPV + FitResults[1] = 0; //MPV error + FitResults[2] = -0.5; //Width + FitResults[3] = 0; //Width error + FitResults[4] = -0.5; //Fit Chi2/NDF + FitResults[5] = 0; //Normalization + + if (InputHisto->GetEntries() < minNrEntries) + return; + + int maxbin = InputHisto->GetMaximumBin(); + int maxbin2 = -9999.; + + if (InputHisto->GetBinContent(maxbin - 1) > InputHisto->GetBinContent(maxbin + 1)) { + maxbin2 = maxbin - 1; + } else { + maxbin2 = maxbin + 1; + } + + float maxbincenter = (InputHisto->GetBinCenter(maxbin) + InputHisto->GetBinCenter(maxbin2)) / 2; + + TF1 MyLandau("MyLandau", "[2]*TMath::Landau(x,[0],[1],0)", maxbincenter - LowRange, maxbincenter + HighRange); + // TF1 MyLandau("MyLandau", "landau", LowRange, HighRange); + // MyLandau.SetParameter(1, 300); + InputHisto->Fit(&MyLandau, "QR WW"); + + MyLandau.SetParameter(0, maxbincenter); + MyLandau.SetParameter(1, maxbincenter / 10.); + MyLandau.SetParameter(2, InputHisto->GetMaximum()); + + float mpv = MyLandau.GetParameter(1); + MyLandau.SetParameter(1, mpv); + //InputHisto->Rebin(3); + InputHisto->Fit(&MyLandau, "QOR", "", mpv - 50, mpv + 100); + + InputHisto->Fit(&MyLandau, "QOR", "", maxbincenter - LowRange, maxbincenter + HighRange); + InputHisto->Fit(&MyLandau, "QOR", "", maxbincenter - LowRange, maxbincenter + HighRange); + + // MPV is parameter 1 (0=constant, 1=MPV, 2=Sigma) + FitResults[0] = MyLandau.GetParameter(1); //MPV + FitResults[1] = MyLandau.GetParError(1); //MPV error + FitResults[2] = MyLandau.GetParameter(2); //Width + FitResults[3] = MyLandau.GetParError(2); //Width error + FitResults[4] = MyLandau.GetChisquare() / MyLandau.GetNDF(); //Fit Chi2/NDF + FitResults[5] = MyLandau.GetParameter(0); +} + +//********************************************************************************// +bool SiStripApvGainInspector::isGoodLandauFit(double* FitResults) { + if (FitResults[0] <= 0) + return false; + // if(FitResults[1] > MaxMPVError )return false; + // if(FitResults[4] > MaxChi2OverNDF)return false; + return true; +} + +/*--------------------------------------------------------------------*/ +void SiStripApvGainInspector::makeNicePlotStyle(TH1F* plot) +/*--------------------------------------------------------------------*/ +{ + plot->GetXaxis()->CenterTitle(true); + plot->GetYaxis()->CenterTitle(true); + plot->GetXaxis()->SetTitleFont(42); + plot->GetYaxis()->SetTitleFont(42); + plot->GetXaxis()->SetTitleSize(0.05); + plot->GetYaxis()->SetTitleSize(0.05); + plot->GetXaxis()->SetTitleOffset(0.9); + plot->GetYaxis()->SetTitleOffset(1.3); + plot->GetXaxis()->SetLabelFont(42); + plot->GetYaxis()->SetLabelFont(42); + plot->GetYaxis()->SetLabelSize(.05); + plot->GetXaxis()->SetLabelSize(.05); +} + +//********************************************************************************// +std::unique_ptr SiStripApvGainInspector::getNewObject() { + std::unique_ptr obj = std::make_unique(); + + std::vector theSiStripVector; + unsigned int PreviousDetId = 0; + for (unsigned int a = 0; a < APVsCollOrdered.size(); a++) { + std::shared_ptr APV = APVsCollOrdered[a]; + if (APV == nullptr) { + printf("Bug\n"); + continue; + } + if (APV->SubDet <= 2) + continue; + if (APV->DetId != PreviousDetId) { + if (!theSiStripVector.empty()) { + SiStripApvGain::Range range(theSiStripVector.begin(), theSiStripVector.end()); + if (!obj->put(PreviousDetId, range)) + printf("Bug to put detId = %i\n", PreviousDetId); + } + theSiStripVector.clear(); + PreviousDetId = APV->DetId; + } + theSiStripVector.push_back(APV->Gain); + + LogDebug("SiStripGainsPCLHarvester") << " DetId: " << APV->DetId << " APV: " << APV->APVId + << " Gain: " << APV->Gain << std::endl; + } + if (!theSiStripVector.empty()) { + SiStripApvGain::Range range(theSiStripVector.begin(), theSiStripVector.end()); + if (!obj->put(PreviousDetId, range)) + printf("Bug to put detId = %i\n", PreviousDetId); + } + + return obj; +} + +// ------------ method called once each job just before starting event loop ------------ +void SiStripApvGainInspector::beginJob() { + TFileDirectory control_dir = tfs->mkdir("Control"); + //DA.cd(); + hControl = this->bookQualityMonitor(control_dir); +} + +// ------------ method called once each job just after ending the event loop ------------ +void SiStripApvGainInspector::endJob() { + edm::LogVerbatim("SelectedModules") << "Selected APVs:" << histoMap_.size() << std::endl; + for (const auto& plot : histoMap_) { + TCanvas* c1 = new TCanvas(Form("c1_%i_%i", plot.first.second, plot.first.first), + Form("c1_%i_%i", plot.first.second, plot.first.first), + 800, + 600); + // Define common things for the different fits + + gStyle->SetOptFit(1011); + c1->Clear(); + + c1->SetLeftMargin(0.15); + c1->SetRightMargin(0.10); + plot.second->SetTitle(Form("Cluster Charge (%i,%i)", plot.first.second, plot.first.first)); + plot.second->GetXaxis()->SetTitle("Normalized Cluster Charge [ADC counts/mm]"); + plot.second->GetYaxis()->SetTitle("On-track clusters"); + plot.second->GetXaxis()->SetRangeUser(0., 1000.); + + this->makeNicePlotStyle(plot.second); + plot.second->Draw(); + edm::LogVerbatim("SelectedModules") << " DetId: " << plot.first.second << " (" << plot.first.first << ")" + << std::endl; + ; + + c1->Print(Form("c1_%i_%i.png", plot.first.second, plot.first.first)); + c1->Print(Form("c1_%i_%i.pdf", plot.first.second, plot.first.first)); + } + + tfs = edm::Service().operator->(); + storeOnTree(tfs); + + auto range = SiStripMiscalibrate::getTruncatedRange(ratio_map.get()); + + ratio_map->save(true, range.first, range.second, "G2_gain_ratio_map.pdf"); + ratio_map->save(true, range.first, range.second, "G2_gain_ratio_map.png"); + + range = SiStripMiscalibrate::getTruncatedRange(old_payload_map.get()); + + old_payload_map->save(true, range.first, range.second, "starting_G2_gain_payload_map.pdf"); + old_payload_map->save(true, range.first, range.second, "starting_G2_gain_payload_map.png"); + + range = SiStripMiscalibrate::getTruncatedRange(new_payload_map.get()); + + new_payload_map->save(true, range.first, range.second, "new_G2_gain_payload_map.pdf"); + new_payload_map->save(true, range.first, range.second, "new_G2_gain_payload_map.png"); + + mpv_map->save(true, 250, 350., "mpv_map.pdf"); + mpv_map->save(true, 250, 350., "mpv_map.png"); + + mpv_err_map->save(true, 0., 3., "mpv_err_map.pdf"); + mpv_err_map->save(true, 0., 3., "mpv_err_map.png"); + + entries_map->save(true, 0, 0, "entries_map.pdf"); + entries_map->save(true, 0, 0, "entries_map.png"); + + fitChi2_map->save(true, 0., 0., "fitChi2_map.pdf"); + fitChi2_map->save(true, 0., 0., "fitChi2_map.png"); + + fillQualityMonitor(); + + std::unique_ptr theAPVGains = this->getNewObject(); + + // write out the APVGains record + edm::Service poolDbService; + + if (poolDbService.isAvailable()) + poolDbService->writeOneIOV(theAPVGains.get(), poolDbService->currentTime(), "SiStripApvGainRcd"); + else + throw std::runtime_error("PoolDBService required."); +} + +std::map SiStripApvGainInspector::bookQualityMonitor(const TFileDirectory& dir) { + int MPVbin = 300; + float MPVmin = 0.; + float MPVmax = 600.; + + TH1F::SetDefaultSumw2(kTRUE); + std::map h; + + h["MPV_Vs_EtaTIB"] = dir.make("MPVvsEtaTIB", "MPV vs Eta TIB", 50, -3.0, 3.0, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_EtaTID"] = dir.make("MPVvsEtaTID", "MPV vs Eta TID", 50, -3.0, 3.0, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_EtaTOB"] = dir.make("MPVvsEtaTOB", "MPV vs Eta TOB", 50, -3.0, 3.0, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_EtaTEC"] = dir.make("MPVvsEtaTEC", "MPV vs Eta TEC", 50, -3.0, 3.0, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_EtaTECthin"] = dir.make("MPVvsEtaTEC1", "MPV vs Eta TEC-thin", 50, -3.0, 3.0, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_EtaTECthick"] = + dir.make("MPVvsEtaTEC2", "MPV vs Eta TEC-thick", 50, -3.0, 3.0, MPVbin, MPVmin, MPVmax); + + h["MPV_Vs_PhiTIB"] = dir.make("MPVvsPhiTIB", "MPV vs Phi TIB", 50, -3.4, 3.4, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_PhiTID"] = dir.make("MPVvsPhiTID", "MPV vs Phi TID", 50, -3.4, 3.4, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_PhiTOB"] = dir.make("MPVvsPhiTOB", "MPV vs Phi TOB", 50, -3.4, 3.4, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_PhiTEC"] = dir.make("MPVvsPhiTEC", "MPV vs Phi TEC", 50, -3.4, 3.4, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_PhiTECthin"] = + dir.make("MPVvsPhiTEC1", "MPV vs Phi TEC-thin ", 50, -3.4, 3.4, MPVbin, MPVmin, MPVmax); + h["MPV_Vs_PhiTECthick"] = + dir.make("MPVvsPhiTEC2", "MPV vs Phi TEC-thick", 50, -3.4, 3.4, MPVbin, MPVmin, MPVmax); + + h["NoMPVfit"] = dir.make("NoMPVfit", "Modules with bad Landau Fit", 350, -350, 350, 240, 0, 120); + h["NoMPVmasked"] = dir.make("NoMPVmasked", "Masked Modules", 350, -350, 350, 240, 0, 120); + + h["Gains"] = dir.make("Gains", "Gains", 300, 0, 2); + h["MPVs"] = dir.make("MPVs", "MPVs", MPVbin, MPVmin, MPVmax); + h["MPVs320"] = dir.make("MPV_320", "MPV 320 thickness", MPVbin, MPVmin, MPVmax); + h["MPVs500"] = dir.make("MPV_500", "MPV 500 thickness", MPVbin, MPVmin, MPVmax); + h["MPVsTIB"] = dir.make("MPV_TIB", "MPV TIB", MPVbin, MPVmin, MPVmax); + h["MPVsTID"] = dir.make("MPV_TID", "MPV TID", MPVbin, MPVmin, MPVmax); + h["MPVsTIDP"] = dir.make("MPV_TIDP", "MPV TIDP", MPVbin, MPVmin, MPVmax); + h["MPVsTIDM"] = dir.make("MPV_TIDM", "MPV TIDM", MPVbin, MPVmin, MPVmax); + h["MPVsTOB"] = dir.make("MPV_TOB", "MPV TOB", MPVbin, MPVmin, MPVmax); + h["MPVsTEC"] = dir.make("MPV_TEC", "MPV TEC", MPVbin, MPVmin, MPVmax); + h["MPVsTECP"] = dir.make("MPV_TECP", "MPV TECP", MPVbin, MPVmin, MPVmax); + h["MPVsTECM"] = dir.make("MPV_TECM", "MPV TECM", MPVbin, MPVmin, MPVmax); + h["MPVsTECthin"] = dir.make("MPV_TEC1", "MPV TEC thin", MPVbin, MPVmin, MPVmax); + h["MPVsTECthick"] = dir.make("MPV_TEC2", "MPV TEC thick", MPVbin, MPVmin, MPVmax); + h["MPVsTECP1"] = dir.make("MPV_TECP1", "MPV TECP thin ", MPVbin, MPVmin, MPVmax); + h["MPVsTECP2"] = dir.make("MPV_TECP2", "MPV TECP thick", MPVbin, MPVmin, MPVmax); + h["MPVsTECM1"] = dir.make("MPV_TECM1", "MPV TECM thin", MPVbin, MPVmin, MPVmax); + h["MPVsTECM2"] = dir.make("MPV_TECM2", "MPV TECM thick", MPVbin, MPVmin, MPVmax); + + h["MPVError"] = dir.make("MPVError", "MPV Error", 150, 0, 150); + h["MPVErrorVsMPV"] = dir.make("MPVErrorVsMPV", "MPV Error vs MPV", 300, 0, 600, 150, 0, 150); + h["MPVErrorVsEta"] = dir.make("MPVErrorVsEta", "MPV Error vs Eta", 50, -3.0, 3.0, 150, 0, 150); + h["MPVErrorVsPhi"] = dir.make("MPVErrorVsPhi", "MPV Error vs Phi", 50, -3.4, 3.4, 150, 0, 150); + h["MPVErrorVsN"] = dir.make("MPVErrorVsN", "MPV Error vs N", 500, 0, 1000, 150, 0, 150); + + h["DiffWRTPrevGainTIB"] = dir.make("DiffWRTPrevGainTIB", "Diff w.r.t. PrevGain TIB", 250, 0.5, 1.5); + h["DiffWRTPrevGainTID"] = dir.make("DiffWRTPrevGainTID", "Diff w.r.t. PrevGain TID", 250, 0.5, 1.5); + h["DiffWRTPrevGainTOB"] = dir.make("DiffWRTPrevGainTOB", "Diff w.r.t. PrevGain TOB", 250, 0.5, 1.5); + h["DiffWRTPrevGainTEC"] = dir.make("DiffWRTPrevGainTEC", "Diff w.r.t. PrevGain TEC", 250, 0.5, 1.5); + + h["GainVsPrevGainTIB"] = dir.make("GainVsPrevGainTIB", "Gain vs PrevGain TIB", 100, 0, 2, 100, 0, 2); + h["GainVsPrevGainTID"] = dir.make("GainVsPrevGainTID", "Gain vs PrevGain TID", 100, 0, 2, 100, 0, 2); + h["GainVsPrevGainTOB"] = dir.make("GainVsPrevGainTOB", "Gain vs PrevGain TOB", 100, 0, 2, 100, 0, 2); + h["GainVsPrevGainTEC"] = dir.make("GainVsPrevGainTEC", "Gain vs PrevGain TEC", 100, 0, 2, 100, 0, 2); + + return h; +} + +void SiStripApvGainInspector::fillQualityMonitor() { + for (unsigned int a = 0; a < APVsCollOrdered.size(); a++) { + std::shared_ptr APV = APVsCollOrdered[a]; + if (APV == nullptr) + continue; + + //unsigned int Index = APV->Index; + //unsigned int DetId = APV->DetId; + unsigned int SubDet = APV->SubDet; + float z = APV->z; + float Eta = APV->Eta; + float R = APV->R; + float Phi = APV->Phi; + float Thickness = APV->Thickness; + double FitMPV = APV->FitMPV; + double FitMPVErr = APV->FitMPVErr; + double Gain = APV->Gain; + double NEntries = APV->NEntries; + double PreviousGain = APV->PreviousGain; + + if (SubDet < 3) + continue; // avoid to loop over Pixel det id + + if (FitMPV <= 0.) { // No fit of MPV + if (APV->isMasked) + fill2D(hControl, "NoMPVmasked", z, R); + else + fill2D(hControl, "NoMPVfit", z, R); + } else { // Fit of MPV + if (FitMPV > 0.) + fill1D(hControl, "Gains", Gain); + + fill1D(hControl, "MPVs", FitMPV); + if (Thickness < 0.04) + fill1D(hControl, "MPVs320", FitMPV); + if (Thickness > 0.04) + fill1D(hControl, "MPVs500", FitMPV); + + fill1D(hControl, "MPVError", FitMPVErr); + fill2D(hControl, "MPVErrorVsMPV", FitMPV, FitMPVErr); + fill2D(hControl, "MPVErrorVsEta", Eta, FitMPVErr); + fill2D(hControl, "MPVErrorVsPhi", Phi, FitMPVErr); + fill2D(hControl, "MPVErrorVsN", NEntries, FitMPVErr); + + if (SubDet == 3) { + fill2D(hControl, "MPV_Vs_EtaTIB", Eta, FitMPV); + fill2D(hControl, "MPV_Vs_PhiTIB", Phi, FitMPV); + fill1D(hControl, "MPVsTIB", FitMPV); + + } else if (SubDet == 4) { + fill2D(hControl, "MPV_Vs_EtaTID", Eta, FitMPV); + fill2D(hControl, "MPV_Vs_PhiTID", Phi, FitMPV); + fill1D(hControl, "MPVsTID", FitMPV); + if (Eta < 0.) + fill1D(hControl, "MPVsTIDM", FitMPV); + if (Eta > 0.) + fill1D(hControl, "MPVsTIDP", FitMPV); + + } else if (SubDet == 5) { + fill2D(hControl, "MPV_Vs_EtaTOB", Eta, FitMPV); + fill2D(hControl, "MPV_Vs_PhiTOB", Phi, FitMPV); + fill1D(hControl, "MPVsTOB", FitMPV); + + } else if (SubDet == 6) { + fill2D(hControl, "MPV_Vs_EtaTEC", Eta, FitMPV); + fill2D(hControl, "MPV_Vs_PhiTEC", Phi, FitMPV); + fill1D(hControl, "MPVsTEC", FitMPV); + if (Eta < 0.) + fill1D(hControl, "MPVsTECM", FitMPV); + if (Eta > 0.) + fill1D(hControl, "MPVsTECP", FitMPV); + if (Thickness < 0.04) { + fill2D(hControl, "MPV_Vs_EtaTECthin", Eta, FitMPV); + fill2D(hControl, "MPV_Vs_PhiTECthin", Phi, FitMPV); + fill1D(hControl, "MPVsTECthin", FitMPV); + if (Eta > 0.) + fill1D(hControl, "MPVsTECP1", FitMPV); + if (Eta < 0.) + fill1D(hControl, "MPVsTECM1", FitMPV); + } + if (Thickness > 0.04) { + fill2D(hControl, "MPV_Vs_EtaTECthick", Eta, FitMPV); + fill2D(hControl, "MPV_Vs_PhiTECthick", Phi, FitMPV); + fill1D(hControl, "MPVsTECthick", FitMPV); + if (Eta > 0.) + fill1D(hControl, "MPVsTECP2", FitMPV); + if (Eta < 0.) + fill1D(hControl, "MPVsTECM2", FitMPV); + } + } + } + + if (SubDet == 3 && PreviousGain != 0.) + fill1D(hControl, "DiffWRTPrevGainTIB", Gain / PreviousGain); + else if (SubDet == 4 && PreviousGain != 0.) + fill1D(hControl, "DiffWRTPrevGainTID", Gain / PreviousGain); + else if (SubDet == 5 && PreviousGain != 0.) + fill1D(hControl, "DiffWRTPrevGainTOB", Gain / PreviousGain); + else if (SubDet == 6 && PreviousGain != 0.) + fill1D(hControl, "DiffWRTPrevGainTEC", Gain / PreviousGain); + + if (SubDet == 3) + fill2D(hControl, "GainVsPrevGainTIB", PreviousGain, Gain); + else if (SubDet == 4) + fill2D(hControl, "GainVsPrevGainTID", PreviousGain, Gain); + else if (SubDet == 5) + fill2D(hControl, "GainVsPrevGainTOB", PreviousGain, Gain); + else if (SubDet == 6) + fill2D(hControl, "GainVsPrevGainTEC", PreviousGain, Gain); + + } // loop on the APV collections +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void SiStripApvGainInspector::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked("inputFile", {}); + desc.addUntracked("minNrEntries", 20); + desc.add("fitMode", 2) + ->setComment("fit mode. Available options: 1: landau\n 2: landau around max\n 3:landau&gaus convo\n 4: fake"); + desc.addUntracked>("selectedModules", {}); + descriptions.addWithDefaultLabel(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(SiStripApvGainInspector); diff --git a/CondTools/SiStrip/plugins/SiStripGainPayloadCopyAndExclude.cc b/CondTools/SiStrip/plugins/SiStripGainPayloadCopyAndExclude.cc new file mode 100644 index 0000000000000..bac00aa99d3b0 --- /dev/null +++ b/CondTools/SiStrip/plugins/SiStripGainPayloadCopyAndExclude.cc @@ -0,0 +1,195 @@ +// -*- C++ -*- +// +// Package: CondTools/SiStrip +// Class: SiStripGainPayloadCopyAndExclude +// +/* + *\class SiStripGainPayloadCopyAndExclude SiStripGainPayloadCopyAndExclude.cc CondTools/SiStrip/plugins/SiStripGainPayloadCopyAndExclude.cc + + Description: This module is meant to copy the content of a SiStrip APV Gain payload (either G1 or G2) from a local sqlite file (that should be feeded to the Event Setup via the SiStripApvGain3Rcd and put in another local sqlite file, excepted for the modules specified in the excludedModules parameter. If the doReverse parameter is true, the opposite action is performed. + + Implementation: The implemenation takes advantage of the convenience record SiStripApvGain3Rcd in the EventSetup to be able to hold at the same time two instances of the Strip Gains in the same job. + +*/ +// +// Original Author: Marco Musich +// Created: Fri, 08 Jun 2018 08:28:01 GMT +// +// + +// system include files +#include +#include + +// user include files +#include "CLHEP/Random/RandGauss.h" +#include "CalibFormats/SiStripObjects/interface/SiStripGain.h" +#include "CalibTracker/Records/interface/SiStripGainRcd.h" +#include "CommonTools/TrackerMap/interface/TrackerMap.h" +#include "CondCore/DBOutputService/interface/PoolDBOutputService.h" +#include "CondFormats/DataRecord/interface/SiStripApvGainRcd.h" +#include "CondFormats/SiStripObjects/interface/SiStripApvGain.h" +#include "CondFormats/SiStripObjects/interface/SiStripSummary.h" +#include "DataFormats/SiStripDetId/interface/SiStripDetId.h" +#include "DataFormats/SiStripDetId/interface/StripSubdetector.h" +#include "DataFormats/TrackerCommon/interface/TrackerTopology.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Framework/interface/one/EDAnalyzer.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ServiceRegistry/interface/Service.h" +#include "Geometry/Records/interface/TrackerTopologyRcd.h" + +// +// class declaration +// +class SiStripGainPayloadCopyAndExclude : public edm::one::EDAnalyzer { +public: + explicit SiStripGainPayloadCopyAndExclude(const edm::ParameterSet&); + ~SiStripGainPayloadCopyAndExclude() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void analyze(const edm::Event&, const edm::EventSetup&) override; + std::unique_ptr getNewObject(const std::map, float>& theMap); + + // ----------member data --------------------------- + const edm::ESGetToken m_gainToken; + const edm::ESGetToken m_gain3Token; + std::vector m_excludedMods; + const std::string m_Record; + const uint32_t m_gainType; + const bool m_reverseSelect; +}; + +// +// constructors and destructor +// +SiStripGainPayloadCopyAndExclude::SiStripGainPayloadCopyAndExclude(const edm::ParameterSet& iConfig) + : m_gainToken{esConsumes()}, + m_gain3Token{esConsumes()}, + m_excludedMods{iConfig.getUntrackedParameter>("excludedModules")}, + m_Record{iConfig.getUntrackedParameter("record", "SiStripApvGainRcd")}, + m_gainType{iConfig.getUntrackedParameter("gainType", 1)}, + m_reverseSelect{iConfig.getUntrackedParameter("reverseSelection", false)} { + usesResource(cond::service::PoolDBOutputService::kSharedResource); + + //now do what ever initialization is needed + sort(m_excludedMods.begin(), m_excludedMods.end()); + + edm::LogInfo("ExcludedModules") << "Selected module list"; + for (std::vector::const_iterator mod = m_excludedMods.begin(); mod != m_excludedMods.end(); mod++) { + edm::LogVerbatim("ExcludedModules") << *mod; + } +} + +// +// member functions +// + +// ------------ method called for each event ------------ +void SiStripGainPayloadCopyAndExclude::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + + // gain to be validated + edm::ESHandle gNew = iSetup.getHandle(m_gain3Token); + edm::ESHandle gOld = iSetup.getHandle(m_gainToken); + + std::map, float> theMap, oldPayloadMap; + + std::vector detid; + gNew->getDetIds(detid); + for (const auto& d : detid) { + SiStripApvGain::Range range_new = gNew->getRange(d); + SiStripApvGain::Range range_old = gOld->getRange(d, m_gainType); + float nAPV = 0; + + for (int it = 0; it < range_new.second - range_new.first; it++) { + nAPV += 1; + float Gain = gNew->getApvGain(it, range_new); + float patchGain = gOld->getApvGain(it, range_old); + std::pair index = std::make_pair(d, nAPV); + + oldPayloadMap[index] = Gain; + + bool found(false); + for (const auto& mod : m_excludedMods) { + if (d == mod) { + edm::LogInfo("ModuleFound") << " module " << mod << " found! Excluded... " << std::endl; + found = true; + break; + } + } + + if (m_reverseSelect) + found = (!found); + + if (!found) { + theMap[index] = Gain; + } else { + theMap[index] = patchGain; + } + + } // loop over APVs + } // loop over DetIds + + std::unique_ptr theAPVGains = this->getNewObject(theMap); + + // write out the APVGains record + edm::Service poolDbService; + + if (poolDbService.isAvailable()) + poolDbService->writeOneIOV(theAPVGains.get(), poolDbService->currentTime(), m_Record); + else + throw std::runtime_error("PoolDBService required."); +} + +//********************************************************************************// +std::unique_ptr SiStripGainPayloadCopyAndExclude::getNewObject( + const std::map, float>& theMap) { + std::unique_ptr obj = std::make_unique(); + + std::vector theSiStripVector; + uint32_t PreviousDetId = 0; + for (const auto& element : theMap) { + uint32_t DetId = element.first.first; + if (DetId != PreviousDetId) { + if (!theSiStripVector.empty()) { + SiStripApvGain::Range range(theSiStripVector.begin(), theSiStripVector.end()); + if (!obj->put(PreviousDetId, range)) + printf("Bug to put detId = %i\n", PreviousDetId); + } + theSiStripVector.clear(); + PreviousDetId = DetId; + } + theSiStripVector.push_back(element.second); + + edm::LogInfo("SiStripGainPayloadCopyAndExclude") + << " DetId: " << DetId << " APV: " << element.first.second << " Gain: " << element.second << std::endl; + } + + if (!theSiStripVector.empty()) { + SiStripApvGain::Range range(theSiStripVector.begin(), theSiStripVector.end()); + if (!obj->put(PreviousDetId, range)) + printf("Bug to put detId = %i\n", PreviousDetId); + } + + return obj; +} + +// ------------ method fills 'descriptions' with the allowed parameters for the module ------------ +void SiStripGainPayloadCopyAndExclude::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked>("excludedModules", {}); + desc.addUntracked("record", "SiStripApvGainRcd"); + desc.addUntracked("gainType", 1); + desc.addUntracked("reverseSelection", false); + descriptions.addWithDefaultLabel(desc); +} + +//define this as a plug-in +DEFINE_FWK_MODULE(SiStripGainPayloadCopyAndExclude); diff --git a/CondTools/SiStrip/test/BuildFile.xml b/CondTools/SiStrip/test/BuildFile.xml index fd0ab2a0a150e..571b47f8e6c9e 100644 --- a/CondTools/SiStrip/test/BuildFile.xml +++ b/CondTools/SiStrip/test/BuildFile.xml @@ -4,3 +4,4 @@ + diff --git a/CondTools/SiStrip/test/SiStripApvGainInspector_cfg.py b/CondTools/SiStrip/test/SiStripApvGainInspector_cfg.py new file mode 100644 index 0000000000000..75d4490a4ed26 --- /dev/null +++ b/CondTools/SiStrip/test/SiStripApvGainInspector_cfg.py @@ -0,0 +1,52 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("Demo") +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.source = cms.Source("EmptyIOVSource", + firstValue = cms.uint64(317340), + lastValue = cms.uint64(317340), + timetype = cms.string('runnumber'), + interval = cms.uint64(1) + ) + + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) + +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '101X_dataRun2_Express_v7', '') + +process.load("Configuration.Geometry.GeometryRecoDB_cff") + +#################################################################### +# Output file +#################################################################### +process.TFileService = cms.Service("TFileService", + fileName=cms.string("APVGainsTree.root") + ) + + +## +## Output database (in this case local sqlite file) +## +process.load("CondCore.CondDB.CondDB_cfi") +process.CondDB.connect = "sqlite_file:updatedGains.db" +process.PoolDBOutputService = cms.Service("PoolDBOutputService", + process.CondDB, + timetype = cms.untracked.string('runnumber'), + toPut = cms.VPSet(cms.PSet(record = cms.string('SiStripApvGainRcd'), + tag = cms.string('modifiedGains')) + )) + +process.demo = cms.EDAnalyzer('SiStripApvGainInspector', + fitMode = cms.int32(2), # landau around max + #inputFile = cms.untracked.string("DQM_V0001_R000999999__StreamExpress__Run2018B-PromptCalibProdSiStripGainsAAG-Express-v1-317279-317340__ALCAPROMPT.root"), + inputFile = cms.untracked.string("root://eoscms.cern.ch//eos/cms/store/group/alca_global/multiruns/results/prod//slc6_amd64_gcc630/CMSSW_10_1_5/86791_1p_0f/DQM_V0001_R000999999__StreamExpress__Run2018B-PromptCalibProdSiStripGainsAAG-Express-v1-317382-317488__ALCAPROMPT.root"), + ### FED 387 + selectedModules = cms.untracked.vuint32(436281608,436281604,436281592,436281624,436281620,436281644,436281640,436281648,436281668,436281680,436281684,436281688,436281720,436281700,436281708,436281556,436281552,436281704,436281764,436281768,436281572,436281576,436281748,436281744,436281740,436281780,436281784,436281612,436281616,436281588,436281580,436281584,436281636,436281656,436281652,436281676,436281672,436281732,436281736,436281716,436281712,436281776,436281772,436281548,436281544,436281540,436281752,436281560) + #### FED 434 + ###selectedModules = cms.untracked.vuint32(436266168,436266028,436266020,436266024,436266160,436266164,436266000,436266004,436266008,436265976,436265972,436266064,436266060,436266068,436265964,436265960,436265968,436265988,436266088,436266084,436266040,436266128,436266116,436266132,436266136,436266156,436266152,436266100,436266032,436266036,436266096,436266052,436266056,436265956,436266092,436265992,436265996,436266104,436266072,436266124,436266120,436266148) + ) + +process.p = cms.Path(process.demo) diff --git a/CondTools/SiStrip/test/SiStripGainPayloadCopyAndExclude_cfg.py b/CondTools/SiStrip/test/SiStripGainPayloadCopyAndExclude_cfg.py new file mode 100644 index 0000000000000..63a7b129e5183 --- /dev/null +++ b/CondTools/SiStrip/test/SiStripGainPayloadCopyAndExclude_cfg.py @@ -0,0 +1,98 @@ +''' +This file is an example configuration of the SiStripPayloadCopyAndExclude module. +This module is meant to copy the content of a SiStrip APV Gain payload (either G1 or G2) +from a local sqlite file (that should be feeded to the Event Setup via the SiStripApvGain3Rcd +and put in another local sqlite file, excepted for the modules specified in the excludedModules +parameter. If the doReverse parameter is true, the opposite action is performed. +''' + +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +process = cms.Process("SiStripPayloadCopyAndExclude") + +options = VarParsing.VarParsing("analysis") + +options.register ('globalTag', + "101X_dataRun2_Express_v7", + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.string, # string, int, or float + "GlobalTag") + +options.register ('runNumber', + 317478, + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.int, # string, int, or float + "run number") + +options.register ('doReverse', + False, + VarParsing.VarParsing.multiplicity.singleton, # singleton or list + VarParsing.VarParsing.varType.bool, # string, int, or float + "reverse the selection") + +options.parseArguments() + + +if(options.doReverse): + print("====================================================================================================================================") + print("%MSG-i DoReverse: : Going to revert the selection. All modules will be taken from GT, unless they are specified in the modules list!") + print("====================================================================================================================================") + +## +## Messages +## +process.load("FWCore.MessageService.MessageLogger_cfi") + +## +## Event Source +## +process.source = cms.Source("EmptyIOVSource", + firstValue = cms.uint64(options.runNumber), + lastValue = cms.uint64(options.runNumber), + timetype = cms.string('runnumber'), + interval = cms.uint64(1) + ) + +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(1) ) + +## +## Conditions inputs +## +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag,options.globalTag, '') +process.GlobalTag.toGet = cms.VPSet( + cms.PSet(record = cms.string("SiStripApvGain3Rcd"), + tag = cms.string("SiStripApvGainAAG_pcl"), + #connect = cms.string("sqlite_file:/eos/cms/store/group/alca_global/multiruns/results/prod//slc6_amd64_gcc630/CMSSW_10_1_5/86791_1p_0f/promptCalibConditions86791.db") + connect = cms.string("sqlite_file:promptCalibConditions86791.db") # locally copied file for unit test + ) + ) + +## +## Worker module +## +process.SiStripGainPayloadCopyAndExclude = cms.EDAnalyzer('SiStripGainPayloadCopyAndExclude', + ### FED 387 + excludedModules = cms.untracked.vuint32(436281608,436281604,436281592,436281624,436281620,436281644,436281640,436281648,436281668,436281680,436281684,436281688,436281720,436281700,436281708,436281556,436281552,436281704,436281764,436281768,436281572,436281576,436281748,436281744,436281740,436281780,436281784,436281612,436281616,436281588,436281580,436281584,436281636,436281656,436281652,436281676,436281672,436281732,436281736,436281716,436281712,436281776,436281772,436281548,436281544,436281540,436281752,436281560), + reverseSelection = cms.untracked.bool(options.doReverse), # if True it will take everything from GT, but the execludedModules from the Gain3 tag + record = cms.untracked.string("SiStripApvGainRcd"), + gainType = cms.untracked.uint32(1) # 0 for G1, 1 for G2 +) + +## +## Output database (in this case local sqlite file) +## +process.load("CondCore.CondDB.CondDB_cfi") +process.CondDB.connect = "sqlite_file:modifiedGains_"+process.GlobalTag.globaltag._value+'_IOV_'+str(options.runNumber)+("_reverse.db" if options.doReverse else ".db") +process.PoolDBOutputService = cms.Service("PoolDBOutputService", + process.CondDB, + timetype = cms.untracked.string('runnumber'), + toPut = cms.VPSet(cms.PSet(record = cms.string('SiStripApvGainRcd'), + tag = cms.string('modifiedGains') + ) + ) +) + +process.p = cms.Path(process.SiStripGainPayloadCopyAndExclude) diff --git a/CondTools/SiStrip/test/testSiStripGainManipulation.sh b/CondTools/SiStrip/test/testSiStripGainManipulation.sh new file mode 100755 index 0000000000000..270f7a9aff942 --- /dev/null +++ b/CondTools/SiStrip/test/testSiStripGainManipulation.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +function die { echo $1: status $2 ; exit $2; } + +if [ "${SCRAM_TEST_NAME}" != "" ] ; then + mkdir ${SCRAM_TEST_NAME} + cd ${SCRAM_TEST_NAME} +fi + +echo -e "===== testing SiStripApV Gain manipulations =====\n\n" + +entries=("SiStripGainPayloadCopyAndExclude_cfg.py" "SiStripApvGainInspector_cfg.py") + +echo -e "===== copying IOV 317478 from tag SiStripApvGainAfterAbortGap_PCL_multirun_v0_prompt on dev DB =====" + +conddb --yes --db dev copy SiStripApvGainAfterAbortGap_PCL_multirun_v0_prompt SiStripApvGainAAG_pcl --from 317478 --to 317478 --destdb promptCalibConditions86791.db + +for entry in "${entries[@]}"; +do + echo -e "===== executing cmsRun "${SCRAM_TEST_PATH}/$entry" ======\n" + (cmsRun "${SCRAM_TEST_PATH}/"$entry) || die "Failure using cmsRun $entry" $? + echo -e "===== executed $entry test ======\n" +done + +echo -e "\n\n ===== Done with the Gain manipulations tests! =====\n\n" diff --git a/Configuration/Applications/python/ConfigBuilder.py b/Configuration/Applications/python/ConfigBuilder.py index d372c67de61c8..db4d521b111d8 100644 --- a/Configuration/Applications/python/ConfigBuilder.py +++ b/Configuration/Applications/python/ConfigBuilder.py @@ -1500,7 +1500,7 @@ def prepare_GEN(self, stepSpec = None): #register to the genstepfilter the name of the path (static right now, but might evolve) self.executeAndRemember('process.genstepfilter.triggerConditions=cms.vstring("generation_step")') - if 'reGEN' in self.stepMap: + if 'reGEN' in self.stepMap or stepSpec == 'pgen_smear': #stop here return diff --git a/Configuration/Eras/python/ModifierChain_run2_2017_noTrackingModifier_cff.py b/Configuration/Eras/python/ModifierChain_run2_2017_noTrackingModifier_cff.py index 1fb8676d4e31e..ec54890989029 100644 --- a/Configuration/Eras/python/ModifierChain_run2_2017_noTrackingModifier_cff.py +++ b/Configuration/Eras/python/ModifierChain_run2_2017_noTrackingModifier_cff.py @@ -3,5 +3,7 @@ from Configuration.Eras.Era_Run2_2017_cff import Run2_2017 from Configuration.Eras.Modifier_trackingPhase1_cff import trackingPhase1 from Configuration.Eras.ModifierChain_trackingMkFitProd_cff import trackingMkFitProd +from Configuration.ProcessModifiers.seedingDeepCore_cff import seedingDeepCore +from Configuration.ProcessModifiers.displacedRegionalTracking_cff import displacedRegionalTracking -run2_2017_noTrackingModifier = Run2_2017.copyAndExclude([trackingPhase1,trackingMkFitProd]) +run2_2017_noTrackingModifier = Run2_2017.copyAndExclude([trackingPhase1,trackingMkFitProd,seedingDeepCore,displacedRegionalTracking]) diff --git a/Configuration/Eras/python/Modifier_ctpps_directSim_cff.py b/Configuration/Eras/python/Modifier_ctpps_directSim_cff.py new file mode 100644 index 0000000000000..6d010cdcb308e --- /dev/null +++ b/Configuration/Eras/python/Modifier_ctpps_directSim_cff.py @@ -0,0 +1,3 @@ +import FWCore.ParameterSet.Config as cms + +ctpps_directSim = cms.Modifier() diff --git a/Configuration/Eras/python/Modifier_phase2_ecalTP_devel_cff.py b/Configuration/Eras/python/Modifier_phase2_ecalTP_devel_cff.py new file mode 100644 index 0000000000000..cd60a1aa06ca6 --- /dev/null +++ b/Configuration/Eras/python/Modifier_phase2_ecalTP_devel_cff.py @@ -0,0 +1,4 @@ +import FWCore.ParameterSet.Config as cms + +phase2_ecalTP_devel = cms.Modifier() + diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py index 68864e9d560a6..e0935db605d55 100644 --- a/Configuration/Geometry/python/dict2026Geometry.py +++ b/Configuration/Geometry/python/dict2026Geometry.py @@ -771,7 +771,7 @@ 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', - 'Geometry/HGCalSimData/data/hgcsensv17n.xml', + 'Geometry/HGCalSimData/data/hgcsensv15.xml', ], 4 : [ 'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml', diff --git a/Configuration/ProcessModifiers/python/Era_Run3_CTPPS_directSim_cff.py b/Configuration/ProcessModifiers/python/Era_Run3_CTPPS_directSim_cff.py new file mode 100644 index 0000000000000..67c085ea3cc9b --- /dev/null +++ b/Configuration/ProcessModifiers/python/Era_Run3_CTPPS_directSim_cff.py @@ -0,0 +1,6 @@ +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim + +Run3_CTPPS_directSim = cms.ModifierChain(Run3,ctpps_directSim) diff --git a/Configuration/PyReleaseValidation/README.md b/Configuration/PyReleaseValidation/README.md index 9c9cb96cd7792..f89ae6370f102 100644 --- a/Configuration/PyReleaseValidation/README.md +++ b/Configuration/PyReleaseValidation/README.md @@ -69,6 +69,9 @@ The offsets currently in use are: * 0.612: ECAL `phase2_ecal_devel` era, with automatic offload to GPU if available * 0.631: ECAL component-method based digis * 0.632: ECAL component-method based finely-sampled waveforms +* 0.633: ECAL phase2 Trigger Primitive +* 0.634: ECAL phase2 Trigger Primitive + component-method based digis +* 0.635: ECAL phase2 Trigger Primitive + component-method based finely-sampled waveforms * 0.75: Phase-2 HLT * 0.91: Track DNN modifier * 0.97: Premixing stage1 diff --git a/Configuration/PyReleaseValidation/python/relval_2017.py b/Configuration/PyReleaseValidation/python/relval_2017.py index 094f0bccbeabb..2f641e5005ff4 100644 --- a/Configuration/PyReleaseValidation/python/relval_2017.py +++ b/Configuration/PyReleaseValidation/python/relval_2017.py @@ -46,7 +46,10 @@ # (Patatrack HCAL-only: TTbar - on CPU) # (Patatrack pixel-only: ZMM - on CPU: quadruplets, triplets) # (TTbar FastSim, TTbar FastSim PU, MinBiasFS for mixing)) +# (ZEE) +# (Nu Gun) # 2024 (TTbar, TTbar PU, TTbar PU premix) + numWFIB = [10001.0,10002.0,10003.0,10004.0,10005.0,10006.0,10007.0,10008.0,10009.0,10059.0,10071.0, 10042.0,10024.0,10025.0,10026.0,10023.0,10224.0,10225.0,10424.0, 10024.1,10024.2,10024.3,10024.4,10024.5, @@ -83,7 +86,9 @@ 12434.521, 12450.501,12450.505, 14034.0,14234.0,14040.303, - 12834.0,13034.0,13034.99,] + 12446.0, + 12461.0, + 12834.0,13034.0,13034.99,] for numWF in numWFIB: if not numWF in _upgrade_workflows: diff --git a/Configuration/PyReleaseValidation/python/relval_2026.py b/Configuration/PyReleaseValidation/python/relval_2026.py index 7dc42987a84b3..156dbfb35b803 100644 --- a/Configuration/PyReleaseValidation/python/relval_2026.py +++ b/Configuration/PyReleaseValidation/python/relval_2026.py @@ -16,7 +16,6 @@ numWFIB = [] numWFIB.extend([20034.0]) #2026D86 numWFIB.extend([20834.0]) #2026D88 -numWFIB.extend([20834.501,20834.502]) #2026D88 Patatrack local reconstruction on CPU, Patatrack local reconstruction on GPU (to remove when available in D98) numWFIB.extend([22034.0]) #2026D91 numWFIB.extend([22434.0]) #2026D92 numWFIB.extend([22834.0]) #2026D93 @@ -27,6 +26,7 @@ numWFIB.extend([24834.0,24834.911,24834.103]) #2026D98 DDD XML, DD4hep XML, aging numWFIB.extend([25061.97]) #2026D98 premixing stage1 (NuGun+PU) numWFIB.extend([24834.5,24834.9]) #2026D98 pixelTrackingOnly, vector hits +numWFIB.extend([24834.501,24834.502]) #2026D98 Patatrack local reconstruction on CPU, Patatrack local reconstruction on GPU numWFIB.extend([25034.99,25034.999]) #2026D98 premixing combined stage1+stage2 (ttbar+PU200, ttbar+PU50 for PR test) numWFIB.extend([24834.21,25034.21,25034.9921]) #2026D98 prodlike, prodlike PU, prodlike premix stage1+stage2 numWFIB.extend([25034.114]) #2026D98 PU, with 10% OT ineffiency @@ -42,6 +42,8 @@ #CloseByPGun for HGCAL numWFIB.extend([24896.0]) #CE_E_Front_120um D98 numWFIB.extend([24900.0]) #CE_H_Coarse_Scint D98 +# NuGun +numWFIB.extend([24861.0]) #Nu Gun 2026D98 for numWF in numWFIB: workflows[numWF] = _upgrade_workflows[numWF] diff --git a/Configuration/PyReleaseValidation/python/relval_gpu.py b/Configuration/PyReleaseValidation/python/relval_gpu.py index d53c326662370..3eeabf9d3c43a 100644 --- a/Configuration/PyReleaseValidation/python/relval_gpu.py +++ b/Configuration/PyReleaseValidation/python/relval_gpu.py @@ -23,6 +23,8 @@ # Patatrack pixel-only triplets, ECAL, HCAL: TTbar - on GPU (optional), GPU-vs-CPU validation, profiling (to be implemented) # full reco with Patatrack pixel-only quadruplets: TTbar - on GPU (optional), GPU-vs-CPU validation # full reco with Patatrack pixel-only triplets: TTbar - on GPU (optional), GPU-vs-CPU validation +# Patatrack Single Nu E10 on GPU (optional) +# mc 2026 Patatrack Single Nu E10 on GPU (optional) numWFIB = [ # 2023 12450.502, 12450.503, 12450.504, @@ -35,6 +37,8 @@ 12434.586, 12434.587, # 12434.588, 12434.592, 12434.593, 12434.596, 12434.597, + 12461.502, + 24861.502 ] for numWF in numWFIB: diff --git a/Configuration/PyReleaseValidation/python/relval_standard.py b/Configuration/PyReleaseValidation/python/relval_standard.py index 2da9cd87d6a15..7dc031d0f64f1 100644 --- a/Configuration/PyReleaseValidation/python/relval_standard.py +++ b/Configuration/PyReleaseValidation/python/relval_standard.py @@ -440,58 +440,58 @@ workflows[139.005] = ['',['AlCaPhiSym2021','RECOALCAECALPHISYMDR3','ALCAECALPHISYM']] ### run3 (2022) ### -workflows[140.001] = ['',['RunMinimumBias2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.002] = ['',['RunSingleMuon2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.001] = ['',['RunMinimumBias2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.002] = ['',['RunSingleMuon2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] workflows[140.003] = ['',['RunZeroBias2022A','HLTDR3_2022','RECONANORUN3_ZB_reHLT_2022','HARVESTRUN3_ZB_2022']] -workflows[140.004] = ['',['RunBTagMu2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.005] = ['',['RunJetHT2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.006] = ['',['RunDisplacedJet2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.007] = ['',['RunMET2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.008] = ['',['RunEGamma2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.009] = ['',['RunTau2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.010] = ['',['RunDoubleMuon2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.011] = ['',['RunMuonEG2022A','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] - -workflows[140.021] = ['',['RunMinimumBias2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.022] = ['',['RunSingleMuon2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.004] = ['',['RunBTagMu2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.005] = ['',['RunJetHT2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.006] = ['',['RunDisplacedJet2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.007] = ['',['RunMET2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.008] = ['',['RunEGamma2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.009] = ['',['RunTau2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.010] = ['',['RunDoubleMuon2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.011] = ['',['RunMuonEG2022A','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] + +workflows[140.021] = ['',['RunMinimumBias2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.022] = ['',['RunSingleMuon2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] workflows[140.023] = ['',['RunZeroBias2022B','HLTDR3_2022','RECONANORUN3_ZB_reHLT_2022','HARVESTRUN3_ZB_2022']] -workflows[140.024] = ['',['RunBTagMu2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.025] = ['',['RunJetHT2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.026] = ['',['RunDisplacedJet2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.027] = ['',['RunMET2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.028] = ['',['RunEGamma2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.029] = ['',['RunTau2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.030] = ['',['RunDoubleMuon2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.031] = ['',['RunMuonEG2022B','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] - -workflows[140.042] = ['',['RunSingleMuon2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.024] = ['',['RunBTagMu2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.025] = ['',['RunJetHT2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.026] = ['',['RunDisplacedJet2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.027] = ['',['RunMET2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.028] = ['',['RunEGamma2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.029] = ['',['RunTau2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.030] = ['',['RunDoubleMuon2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.031] = ['',['RunMuonEG2022B','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] + +workflows[140.042] = ['',['RunSingleMuon2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] workflows[140.043] = ['',['RunZeroBias2022C','HLTDR3_2022','RECONANORUN3_ZB_reHLT_2022','HARVESTRUN3_ZB_2022']] -workflows[140.044] = ['',['RunBTagMu2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.045] = ['',['RunJetHT2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.046] = ['',['RunDisplacedJet2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.047] = ['',['RunMET2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.048] = ['',['RunEGamma2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.049] = ['',['RunTau2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.050] = ['',['RunDoubleMuon2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.051] = ['',['RunMuonEG2022C','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] - -workflows[140.062] = ['',['RunMuon2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.044] = ['',['RunBTagMu2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.045] = ['',['RunJetHT2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.046] = ['',['RunDisplacedJet2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.047] = ['',['RunMET2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.048] = ['',['RunEGamma2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.049] = ['',['RunTau2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.050] = ['',['RunDoubleMuon2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.051] = ['',['RunMuonEG2022C','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] + +workflows[140.062] = ['',['RunMuon2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] workflows[140.063] = ['',['RunZeroBias2022D','HLTDR3_2022','RECONANORUN3_ZB_reHLT_2022','HARVESTRUN3_ZB_2022']] -workflows[140.064] = ['',['RunBTagMu2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.065] = ['',['RunJetMET2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.066] = ['',['RunDisplacedJet2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.067] = ['',['RunEGamma2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.068] = ['',['RunTau2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.069] = ['',['RunMuonEG2022D','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] - -workflows[140.071] = ['',['RunMuon2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.064] = ['',['RunBTagMu2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.065] = ['',['RunJetMET2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.066] = ['',['RunDisplacedJet2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.067] = ['',['RunEGamma2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.068] = ['',['RunTau2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.069] = ['',['RunMuonEG2022D','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] + +workflows[140.071] = ['',['RunMuon2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] workflows[140.072] = ['',['RunZeroBias2022E','HLTDR3_2022','RECONANORUN3_ZB_reHLT_2022','HARVESTRUN3_ZB_2022']] -workflows[140.073] = ['',['RunBTagMu2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.074] = ['',['RunJetMET2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.075] = ['',['RunDisplacedJet2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.076] = ['',['RunEGamma2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.077] = ['',['RunTau2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] -workflows[140.078] = ['',['RunMuonEG2022E','HLTDR3_2022','RECONANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.073] = ['',['RunBTagMu2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.074] = ['',['RunJetMET2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.075] = ['',['RunDisplacedJet2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.076] = ['',['RunEGamma2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.077] = ['',['RunTau2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] +workflows[140.078] = ['',['RunMuonEG2022E','HLTDR3_2022','AODNANORUN3_reHLT_2022','HARVESTRUN3_2022']] ### run3 (2022) skims ### workflows[140.101] = ['',['RunZeroBias2022D','HLTDR3_2022','SKIMZEROBIASRUN3_reHLT_2022','HARVESTRUN3_ZB_2022']] @@ -513,39 +513,39 @@ workflows[140.202] = ['',['RunJetMET2022D_reMINI', 'REMININANO_data2022']] ### run3 (2023) ### -workflows[141.001] = ['',['RunMuon2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.001] = ['',['RunMuon2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] workflows[141.002] = ['',['RunZeroBias2023B','HLTDR3_2023B','RECONANORUN3_ZB_reHLT_2023B','HARVESTRUN3_ZB_2023B']] -workflows[141.003] = ['',['RunBTagMu2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.004] = ['',['RunNoBPTX2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.005] = ['',['RunHcalNZS2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.006] = ['',['RunHLTPhysics2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.007] = ['',['RunCommissioning2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.008] = ['',['RunJetMET2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.009] = ['',['RunCosmics2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.010] = ['',['RunDisplacedJet2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.011] = ['',['RunEGamma2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.012] = ['',['RunTau2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] -workflows[141.013] = ['',['RunMuonEG2023B','HLTDR3_2023B','RECONANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] - -workflows[141.031] = ['',['RunMuon2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.003] = ['',['RunBTagMu2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.004] = ['',['RunNoBPTX2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.005] = ['',['RunHcalNZS2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.006] = ['',['RunHLTPhysics2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.007] = ['',['RunCommissioning2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.008] = ['',['RunJetMET2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.009] = ['',['RunCosmics2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.010] = ['',['RunDisplacedJet2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.011] = ['',['RunEGamma2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.012] = ['',['RunTau2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] +workflows[141.013] = ['',['RunMuonEG2023B','HLTDR3_2023B','AODNANORUN3_reHLT_2023B','HARVESTRUN3_2023B']] + +workflows[141.031] = ['',['RunMuon2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] workflows[141.032] = ['',['RunZeroBias2023C','HLTDR3_2023','RECONANORUN3_ZB_reHLT_2023','HARVESTRUN3_ZB_2023']] -workflows[141.033] = ['',['RunBTagMu2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.034] = ['',['RunJetMET2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.035] = ['',['RunDisplacedJet2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.036] = ['',['RunEGamma2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.037] = ['',['RunTau2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.038] = ['',['RunMuonEG2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.039] = ['',['RunParkingDoubleMuonLowMass2023C','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] - -workflows[141.041] = ['',['RunMuon2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.033] = ['',['RunBTagMu2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.034] = ['',['RunJetMET2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.035] = ['',['RunDisplacedJet2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.036] = ['',['RunEGamma2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.037] = ['',['RunTau2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.038] = ['',['RunMuonEG2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.039] = ['',['RunParkingDoubleMuonLowMass2023C','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] + +workflows[141.041] = ['',['RunMuon2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] workflows[141.042] = ['',['RunZeroBias2023D','HLTDR3_2023','RECONANORUN3_ZB_reHLT_2023','HARVESTRUN3_ZB_2023']] -workflows[141.043] = ['',['RunBTagMu2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.044] = ['',['RunJetMET2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.045] = ['',['RunDisplacedJet2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.046] = ['',['RunEGamma2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.047] = ['',['RunTau2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.048] = ['',['RunMuonEG2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] -workflows[141.049] = ['',['RunParkingDoubleMuonLowMass2023D','HLTDR3_2023','RECONANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.043] = ['',['RunBTagMu2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.044] = ['',['RunJetMET2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.045] = ['',['RunDisplacedJet2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.046] = ['',['RunEGamma2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.047] = ['',['RunTau2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.048] = ['',['RunMuonEG2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] +workflows[141.049] = ['',['RunParkingDoubleMuonLowMass2023D','HLTDR3_2023','AODNANORUN3_reHLT_2023','HARVESTRUN3_2023']] ### run3 (2023) skims ### workflows[141.101] = ['',['RunZeroBias2023C','HLTDR3_2023','SKIMZEROBIASRUN3_reHLT_2023','HARVESTRUN3_ZB_2023']] diff --git a/Configuration/PyReleaseValidation/python/relval_steps.py b/Configuration/PyReleaseValidation/python/relval_steps.py index c04b975191f00..495d97da0bf71 100644 --- a/Configuration/PyReleaseValidation/python/relval_steps.py +++ b/Configuration/PyReleaseValidation/python/relval_steps.py @@ -2947,12 +2947,17 @@ def gen2023HiMix(fragment,howMuch): steps['RECONANORUN3_ZB_reHLT_2022']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@rerecoZeroBiasFakeHLT+@miniAODDQM+@nanoAODDQM'},steps['RECONANORUN3_reHLT_2022']]) steps['RECOCOSMRUN3_reHLT_2022']=merge([{'--scenario':'cosmics','-s':'RAW2DIGI,L1Reco,RECO,DQM','--datatier':'RECO,DQMIO','--eventcontent':'RECO,DQM'},steps['RECONANORUN3_reHLT_2022']]) +steps['AODNANORUN3_reHLT_2022']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@standardDQMFakeHLT+@miniAODDQM+@nanoAODDQM','--datatier':'AOD,MINIAOD,NANOAOD,DQMIO','--eventcontent':'AOD,MINIAOD,NANOEDMAOD,DQM'},steps['RECODR3_reHLT_2022']]) + steps['RECONANORUN3_reHLT_2023']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@standardDQM+@miniAODDQM+@nanoAODDQM','--datatier':'RECO,MINIAOD,NANOAOD,DQMIO','--eventcontent':'RECO,MINIAOD,NANOEDMAOD,DQM'},steps['RECODR3_reHLT_2023']]) steps['RECONANORUN3_reHLT_2023B']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@standardDQM+@miniAODDQM+@nanoAODDQM','--datatier':'RECO,MINIAOD,NANOAOD,DQMIO','--eventcontent':'RECO,MINIAOD,NANOEDMAOD,DQM'},steps['RECODR3_reHLT_2023B']]) steps['RECONANORUN3_ZB_reHLT_2023B']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@rerecoZeroBias+@miniAODDQM+@nanoAODDQM'},steps['RECONANORUN3_reHLT_2023B']]) steps['RECONANORUN3_ZB_reHLT_2023']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@rerecoZeroBias+@miniAODDQM+@nanoAODDQM'},steps['RECONANORUN3_reHLT_2023']]) steps['RECOCOSMRUN3_reHLT_2023']=merge([{'--scenario':'cosmics','-s':'RAW2DIGI,L1Reco,RECO,DQM','--datatier':'RECO,DQMIO','--eventcontent':'RECO,DQM'},steps['RECONANORUN3_reHLT_2023']]) +steps['AODNANORUN3_reHLT_2023']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@standardDQM+@miniAODDQM+@nanoAODDQM','--datatier':'AOD,MINIAOD,NANOAOD,DQMIO','--eventcontent':'AOD,MINIAOD,NANOEDMAOD,DQM'},steps['RECODR3_reHLT_2023']]) +steps['AODNANORUN3_reHLT_2023B']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,NANO,DQM:@standardDQM+@miniAODDQM+@nanoAODDQM','--datatier':'AOD,MINIAOD,NANOAOD,DQMIO','--eventcontent':'AOD,MINIAOD,NANOEDMAOD,DQM'},steps['RECODR3_reHLT_2023B']]) + steps['RECOHIRUN3_reHLT_2023']=merge([{'-s':'RAW2DIGI,L1Reco,RECO,PAT,DQM:@standardDQM','--datatier':'RECO,MINIAOD,DQMIO','--eventcontent':'RECO,MINIAOD,DQM','--era':'Run3_pp_on_PbPb_approxSiStripClusters_2023','--conditions':'auto:run3_data_HIon'},steps['RECODR3_reHLT_2023']]) # patatrack validation in data diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py index ea6041c9d2822..ef7525a26b540 100644 --- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py +++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py @@ -782,10 +782,13 @@ def condition(self, fragment, stepList, key, hasHarvest): # - 2018 conditions, TTbar # - 2018 conditions, Z->mumu # - 2022 conditions (labelled "2021"), TTbar +# - 2022 conditions (labelled "2021"), NuGun # - 2022 conditions (labelled "2021"), Z->mumu # - 2023 conditions, TTbar +# - 2023 conditions, NuGun # - 2023 conditions, Z->mumu # - 2026 conditions, TTbar +# - 2026 conditions, NuGu class PatatrackWorkflow(UpgradeWorkflow): def __init__(self, digi = {}, reco = {}, mini = {}, harvest = {}, **kwargs): # adapt the parameters for the UpgradeWorkflow init method @@ -843,10 +846,12 @@ def condition(self, fragment, stepList, key, hasHarvest): ('2018' in key and fragment == "TTbar_13"), ('2021' in key and fragment == "TTbar_14TeV" and 'FS' not in key), ('2023' in key and fragment == "TTbar_14TeV" and 'FS' not in key), + ('2021' in key and fragment == "NuGun"), + ('2023' in key and fragment == "NuGun"), ('2018' in key and fragment == "ZMM_13"), ('2021' in key and fragment == "ZMM_14" and 'FS' not in key), ('2023' in key and fragment == "ZMM_14" and 'FS' not in key), - ('2026' in key and fragment == "TTbar_14TeV"), + ('2026' in key and (fragment == "TTbar_14TeV" or fragment=="NuGun")), (('HI' in key) and 'Hydjet' in fragment and "PixelOnly" in self.suffix ) ] result = any(selected) and hasHarvest @@ -1884,7 +1889,7 @@ def condition(self, fragment, stepList, key, hasHarvest): # ECAL component class UpgradeWorkflow_ECalComponent(UpgradeWorkflow): - def __init__(self, suffix, offset, ecalMod, + def __init__(self, suffix, offset, ecalTPPh2, ecalMod, steps = [ 'GenSim', 'GenSimHLBeamSpot', @@ -1892,6 +1897,9 @@ def __init__(self, suffix, offset, ecalMod, 'GenSimHLBeamSpotHGCALCloseBy', 'Digi', 'DigiTrigger', + 'RecoGlobal', + 'HARVESTGlobal', + 'ALCAPhase2', ], PU = [ 'GenSim', @@ -1900,14 +1908,35 @@ def __init__(self, suffix, offset, ecalMod, 'GenSimHLBeamSpotHGCALCloseBy', 'Digi', 'DigiTrigger', + 'RecoGlobal', + 'HARVESTGlobal', + 'ALCAPhase2', ]): super(UpgradeWorkflow_ECalComponent, self).__init__(steps, PU, suffix, offset) + self.__ecalTPPh2 = ecalTPPh2 self.__ecalMod = ecalMod - + def setup_(self, step, stepName, stepDict, k, properties): - if 'Sim' in step or 'Digi' in step: + stepDict[stepName][k] = deepcopy(stepDict[step][k]) + if 'Sim' in step: + if self.__ecalMod is not None: + stepDict[stepName][k] = merge([{'--procModifiers':self.__ecalMod},stepDict[step][k]]) + if 'Digi' in step: if self.__ecalMod is not None: stepDict[stepName][k] = merge([{'--procModifiers':self.__ecalMod},stepDict[step][k]]) + if self.__ecalTPPh2 is not None: + mods = {'--era': stepDict[step][k]['--era']+',phase2_ecal_devel,phase2_ecalTP_devel'} + mods['-s'] = 'DIGI:pdigi_valid,DIGI2RAW,HLT:@fake2' + stepDict[stepName][k] = merge([mods, stepDict[step][k]]) + if 'RecoGlobal' in step: + stepDict[stepName][k] = merge([{'-s': 'RAW2DIGI,RECO,RECOSIM,PAT', + '--datatier':'GEN-SIM-RECO', + '--eventcontent':'FEVTDEBUGHLT', + }, stepDict[step][k]]) + if 'HARVESTGlobal' in step: + stepDict[stepName][k] = None + if 'ALCAPhase2' in step: + stepDict[stepName][k] = None def condition(self, fragment, stepList, key, hasHarvest): return ('2021' in key or '2023' in key or '2026' in key) @@ -1915,12 +1944,35 @@ def condition(self, fragment, stepList, key, hasHarvest): upgradeWFs['ECALComponent'] = UpgradeWorkflow_ECalComponent( suffix = '_ecalComponent', offset = 0.631, + ecalTPPh2 = None, ecalMod = 'ecal_component', ) upgradeWFs['ECALComponentFSW'] = UpgradeWorkflow_ECalComponent( suffix = '_ecalComponentFSW', offset = 0.632, + ecalTPPh2 = None, + ecalMod = 'ecal_component_finely_sampled_waveforms', +) + +upgradeWFs['ECALTPPh2'] = UpgradeWorkflow_ECalComponent( + suffix = '_ecalTPPh2', + offset = 0.633, + ecalTPPh2 = 'phase2_ecal_devel,phase2_ecalTP_devel', + ecalMod = None, +) + +upgradeWFs['ECALTPPh2Component'] = UpgradeWorkflow_ECalComponent( + suffix = '_ecalTPPh2Component', + offset = 0.634, + ecalTPPh2 = 'phase2_ecal_devel,phase2_ecalTP_devel', + ecalMod = 'ecal_component', +) + +upgradeWFs['ECALTPPh2ComponentFSW'] = UpgradeWorkflow_ECalComponent( + suffix = '_ecalTPPh2ComponentFSW', + offset = 0.635, + ecalTPPh2 = 'phase2_ecal_devel,phase2_ecalTP_devel', ecalMod = 'ecal_component_finely_sampled_waveforms', ) @@ -2822,7 +2874,7 @@ def condition(self, fragment, stepList, key, hasHarvest): 'Geom' : 'Extended2026D104', 'HLTmenu': '@relval2026', 'GT' : 'auto:phase2_realistic_T33', - 'Era' : 'Phase2C17I13M9', + 'Era' : 'Phase2C22I13M9', 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'], }, '2026D105' : { diff --git a/Configuration/PyReleaseValidation/scripts/README.md b/Configuration/PyReleaseValidation/scripts/README.md index 24bfb66db9670..a4850843a16e9 100644 --- a/Configuration/PyReleaseValidation/scripts/README.md +++ b/Configuration/PyReleaseValidation/scripts/README.md @@ -289,3 +289,102 @@ matrix> All commands come with dynamic TAB-completion. There's also a transient history of the commands issued within a single session. Transient means that, after a session is closed, the history is lost. + +### Limited Matrix for (also) PR Testing + +The "limited" predefined set of workflows is used in PR integration testing. Here the workflows run. + +MC workflows for pp collisions: + +| **WF** | **Fragment/Input** | **Conditions** | **Era** | **Notes** | +|--- |--- |--- |--- |--- | +| | | | | | +| **Run1** | | | | | +| | | | | | +| 5.1 | TTbar_8TeV_TuneCUETP8M1 | run1_mc | | *FastSim* | +| 8 | RelValBeamHalo | run1_mc | | Cosmics | +| 9.0 | RelValHiggs200ChargedTaus | run1_mc | | | +| 25 | RelValTTbar | run1_mc | | | +| 101.0 | SingleElectronE120EHCAL | run1_mc | | + ECALHCAL.customise + fullMixCustomize_cff.setCrossingFrameOn | +| | | | | | +| **Run2** | | | | | +| | | | | | +| 7.3 | UndergroundCosmicSPLooseMu | run2_2018 | | | +| 1306.0 | RelValSingleMuPt1_UP15 | run2_mc | Run2_2016 | with miniAOD | +| 1330 | RelValZMM_13 | run2_mc | Run2_2016 | | +| 135.4 | ZEE_13TeV_TuneCUETP8M1 | run2_mc | Run2_2016 | *FastSim* | +| 25202.0 | RelValTTbar_13 | run2_mc | Run2_2016 | AVE_35_BX_25ns | +| 250202.181 | RelValTTbar_13 (PREMIX) | phase1_2018_realistic | Run2_2018 | | | +| | | | | | +| **Run3** | | | | | +| | | | | | +| 11634.0 | TTbar_14TeV | phase1_2022_realistic | Run3 | | +| 13234.0 | RelValTTbar_14TeV | phase1_2022_realistic | Run3_FastSim | *FastSim* | +| 12434.0 | RelValTTbar_14TeV | phase1_2023_realistic | Run3_2023 | | +| 12446.0 | RelValZEE_14 | phase1_2023_realistic | Run3_2023 | | +| 12634.0 | RelValTTbar_14TeV | phase1_2023_realistic | Run3_2023 | Run3_Flat55To75_PoissonOOTPU | +| 12434.7 | RelValTTbar_14TeV | phase1_2023_realistic | Run3_2023 | mkFit | +| 14034.0 | RelValTTbar_14TeV | phase1_2023_realistic | Run3_2023_FastSim | *FastSim* | +| 14234.0 | RelValTTbar_14TeV | phase1_2023_realistic | Run3_2023_FastSim | *FastSim* Run3_Flat55To75_PoissonOOTPU | +| 2500.4 | RelValTTbar_14TeV | phase1_2022_realistic | Run3 | NanoAOD from existing MINI | +| | | | | | +| **Phase2** | | | | **Geometry** | +| | | | | | +| 24834.0 | RelValTTbar_14TeV | phase2_realistic_T25 | Phase2C17I13M9 | Extended2026D98 | (Phase-2 baseline) +| 24834.911 | TTbar_14TeV_TuneCP5 | phase2_realistic_T25 | Phase2C17I13M9 | DD4hepExtended2026D98 | DD4Hep (HLLHC14TeV BeamSpot) +| 25034.999 | RelValTTbar_14TeV (PREMIX) | phase2_realistic_T25 | Phase2C17I13M9 | Extended2026D98 | AVE_50_BX_25ns_m3p3 +| 24896.0 | RelValCloseByPGun_CE_E_Front_120um | phase2_realistic_T25 | Phase2C17I13M9 | Extended2026D98 | +| 24900.0 | RelValCloseByPGun_CE_H_Coarse_Scint | phase2_realistic_T25 | Phase2C17I13M9 | Extended2026D98 | +| 23234.0 | TTbar_14TeV_TuneCP5 | phase2_realistic_T21 | Phase2C20I13M9 | Extended2026D94 | (exercise with HFNose) + +pp Data reRECO workflows: + +| Data | | | | | +|--- |--- |--- |--- |--- | +| **WF** | **Input** | **Conditions** | **Era** | **Notes** | +| | | | | | +| **Run1** | | | | | +| | | | | | +| 4.22 | Run2011A Cosmics | run1_data | | *Cosmics* | +| 4.53 | Run2012B Photon | run1_hlt_Fake | | + miniAODs | +| 1000 | Run2011A MinimumBias Prompt | run1_data | | + RecoTLR.customisePrompt | +| 1001 | Run2011A MinimumBias | run1_data | | Data+Express | +| | | | | | +| **Run2** | | | | | +| | | | | | +| 136.731 | Run2016B SinglePhoton | | | | +| 136.7611 | Run2016E JetHT (reMINIAOD) | run2_data | Run2_2016_HIPM | + run2_miniAOD_80XLegacy custom | +| 136.8311 | Run2017F JetHT (reMINIAOD) | run2_data | Run2_2017 | + run2_miniAOD_94XFall17 custom | +| 136.88811 | Run2018D JetHT (reMINIAOD) | run2_data | Run2_2018 | + run2_miniAOD_UL_preSummer20 (UL MINI) custom | +| 136.793 | Run2017C DoubleEG | run2_hlt_relval | Run2_2017 | HLT:@relval2017| +| 136.874 | Run2018C EGamma | run2_hlt_relval | Run2_2018 | HLT@relval2018 | +| | | | | | +| **Run3** | | | | | +| | | | | | +| 2021 | | | | | +| 139.001 | Run2021 MinimumBias | run3_hlt_relval | Run3 | HLT@relval2022 (Commissioning2021) | +| 2022 | | | | | +| 140.023 | Run2022B ZeroBias | run3_hlt_relval | Run3 | HLT:@relval2022 | +| 140.043 | Run2022C ZeroBias | run3_hlt_relval | Run3 | HLT:@relval2022 | +| 140.063 | Run2022D ZeroBias | run3_hlt_relval | Run3 | HLT:@relval2022 | +| 2023 | | | | | +| 141.044 | Run2023D JetMET0 | run3_hlt_relval | Run3_2023 | HLT@relval2024 | +| 141.042 | Run2023D ZeroBias | run3_hlt_relval | Run3_2023 | HLT@relval2024 | +| 141.046 | Run2023D EGamma0 | run3_hlt_relval | Run3_2023 | HLT@relval2024 | + + +And Heavy Ion workflows: + +| **HIon** | | | | | +|--- |--- |--- |--- |--- | +| **WF** | **Fragment/Input** | **Conditions** | **Era** | **Notes** | +| | | | | | +| **Data** | | | | | +| | | | | | +| 140.53 | HIRun2011 HIMinBiasUPC | run1_data | | +| 140.56 | HIRun2018A HIHardProbes | run2_data_promptlike_hi | Run2_2018_pp_on_AA | +| | | | | | +| **MC** | | | | | +| | | | | | +| 158.01 | RelValHydjetQ_B12_5020GeV_2018_ppReco (reMINIAOD) | phase1_2018_realistic_hi | Run2_2018_pp_on_AA | (HI MC with pp-like reco) | +| 312.0 | Pyquen_ZeemumuJets_pt10_2760GeV | phase1_2022_realistic_hi | Run3_pp_on_PbPb | PU = HiMixGEN | diff --git a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py index 610460b31f02d..4138e276b5454 100755 --- a/Configuration/PyReleaseValidation/scripts/runTheMatrix.py +++ b/Configuration/PyReleaseValidation/scripts/runTheMatrix.py @@ -58,55 +58,83 @@ def runSelected(opt): #this can get out of here predefinedSet={ - 'limited' : [5.1, #FastSim ttbar - 7.3, #CosmicsSPLoose_UP17 - 8, #BH/Cosmic MC - 25, #MC ttbar - 4.22, #cosmic data - 4.53, #run1 data + miniAOD - 9.0, #Higgs200 charged taus - 1000, #data+prompt - 1001, #data+express - 101.0, #SingleElectron120E120EHCAL - 136.731, #2016B Photon data - 136.7611, #2016E JetHT reMINIAOD from 80X legacy - 136.8311, #2017F JetHT reMINIAOD from 94X reprocessing - 136.88811,#2018D JetHT reMINIAOD from UL processing - 136.793, #2017C DoubleEG - 136.874, #2018C EGamma - 138.4, #2021 MinimumBias prompt reco - 138.5, #2021 MinimumBias express - 139.001, #2021 MinimumBias offline with HLT step - 140.53, #2011 HI data - 140.56, #2018 HI data - 158.01, #reMiniAOD of 2018 HI MC with pp-like reco - 312.0, #2021/Run3 HI MC Pyquen_ZeemumuJets_pt10 with pp-like reco - 1306.0, #SingleMu Pt1 UP15 - 2500.4, #test NanoAOD from existing MINI - 1330, #Run2 2015/2016 MC Zmm - 135.4, #Run 2 2015/2016 Zee ttbar fastsim - 10042.0, #2017 ZMM - 10024.0, #2017 ttbar - 10824.0, #2018 ttbar - 2018.1, #2018 ttbar fastsim - 11634.911, #2021 DD4hep ttbar reading geometry from XML - 11634.914, #2021 DDD ttbar reading geometry from the DB - 11634.0, #2021 ttbar (switching to DD4hep by default) - 13234.0, #2021 ttbar fastsim - 12434.0, #2023 ttbar - 12634.0, #2023 ttbar PU - 12434.7, #2023 ttbar mkFit - 14034.0, #2023 ttbar fastsim - 14234.0, #2023 ttbar PU fastsim - 24834.0, #2026D98 ttbar (Phase-2 baseline) - 24834.911, #2026D98 ttbar DD4hep XML - 25034.999, #2026D98 ttbar premixing stage1+stage2, PU50 - 24896.0, #CE_E_Front_120um D98 - 24900.0, #CE_H_Coarse_Scint D98 - 23234.0, #2026D94 ttbar (exercise with HFNose) - 25202.0, #2016 ttbar UP15 PU - 250202.181, #2018 ttbar stage1 + stage2 premix - 141.044 # 2023D JetMET PD + 'limited' : [ + # See README for further details + ###### MC (generated from scratch or from RelVals) + ### FullSim + # Run1 + 5.1, # TTbar_8TeV_TuneCUETP8M1 FastSim + 8, # RelValBeamHalo Cosmics + 9.0, # RelValHiggs200ChargedTaus + 25, # RelValTTbar + 101.0, # SingleElectronE120EHCAL + ECALHCAL.customise + fullMixCustomize_cff.setCrossingFrameOn + + # Run2 + 7.3, # UndergroundCosmicSPLooseMu + 1306.0, # RelValSingleMuPt1_UP15 + 1330, # RelValZMM_13 + 135.4, # ZEE_13TeV_TuneCUETP8M1 + 25202.0, # RelValTTbar_13 PU = AVE_35_BX_25ns + 250202.181, # RelValTTbar_13 PREMIX + + # Run3 + 11634.0, # TTbar_14TeV + 13234.0, # RelValTTbar_14TeV FastsSim + 12434.0, # RelValTTbar_14TeV + 12446.0, # RelValZEE_13 + 12634.0, # RelValTTbar_14TeV PU = Run3_Flat55To75_PoissonOOTPU + 12434.7, # RelValTTbar_14TeV mkFit + 14034.0, # RelValTTbar_14TeV Run3_2023_FastSim + 14234.0, # RelValTTbar_14TeV Run3_2023_FastSim PU = Run3_Flat55To75_PoissonOOTPU + 2500.4, # RelValTTbar_14TeV NanoAOD from existing MINI + + # Phase2 + 24834.0, # RelValTTbar_14TeV phase2_realistic_T25 Extended2026D98 (Phase-2 baseline) + 24834.911, # TTbar_14TeV_TuneCP5 phase2_realistic_T25 DD4hepExtended2026D98 DD4Hep (HLLHC14TeV BeamSpot) + 25034.999, # RelValTTbar_14TeV (PREMIX) phase2_realistic_T25 Extended2026D98 AVE_50_BX_25ns_m3p3 + 24896.0, # RelValCloseByPGun_CE_E_Front_120um phase2_realistic_T25 Extended2026D98 + 24900.0, # RelValCloseByPGun_CE_H_Coarse_Scint phase2_realistic_T25 Extended2026D98 + 23234.0, # TTbar_14TeV_TuneCP5 phase2_realistic_T21 Extended2026D94 (exercise with HFNose) + + + ###### pp Data + ## Run1 + 4.22, # Run2011A Cosmics + 4.53, # Run2012B Photon miniAODs + 1000, # Run2011A MinimumBias Prompt RecoTLR.customisePrompt + 1001, # Run2011A MinimumBias Data+Express + ## Run2 + 136.731, # Run2016B SinglePhoton + 136.7611, # Run2016E JetHT (reMINIAOD) Run2_2016_HIPM + run2_miniAOD_80XLegacy + 136.8311, # Run2017F JetHT (reMINIAOD) run2_miniAOD_94XFall17 + 136.88811, # Run2018D JetHT (reMINIAOD) run2_miniAOD_UL_preSummer20 (UL MINI) + 136.793, # Run2017C DoubleEG + 136.874, # Run2018C EGamma + + ## Run3 + # 2021 + 139.001, # Run2021 MinimumBias Commissioning2021 + + # 2022 + 140.023, # Run2022B ZeroBias + 140.043, # Run2022C ZeroBias + 140.063, # Run2022D ZeroBias + + # 2023 + 141.044, # Run2023D JetMET0 + 141.042, # Run2023D ZeroBias + 141.046, # Run2023D EGamma0 + + ###### Heavy Ions + ## Data + # Run1 + 140.53, # HIRun2011 HIMinBiasUPC + # Run2 + 140.56, # HIRun2018A HIHardProbes Run2_2018_pp_on_AA + ## MC + 158.01, # RelValHydjetQ_B12_5020GeV_2018_ppReco (reMINIAOD) (HI MC with pp-like reco) + 312.0, # Pyquen_ZeemumuJets_pt10_2760GeV PU : HiMixGEN + ], 'jetmc': [5.1, 13, 15, 25, 38, 39], #MC 'metmc' : [5.1, 15, 25, 37, 38, 39], #MC diff --git a/Configuration/StandardSequences/python/Eras.py b/Configuration/StandardSequences/python/Eras.py index 061953eaa835c..9c875e8fba998 100644 --- a/Configuration/StandardSequences/python/Eras.py +++ b/Configuration/StandardSequences/python/Eras.py @@ -61,7 +61,8 @@ def __init__(self): 'Phase2C11I13T25M9', 'Phase2C11I13T26M9', 'Phase2C17I13M9', - 'Phase2C20I13M9' + 'Phase2C20I13M9', + 'Phase2C22I13M9' ] internalUseMods = ['run2_common', 'run2_25ns_specific', @@ -76,7 +77,7 @@ def __init__(self): 'phase2_common', 'phase2_tracker', 'phase2_muon', 'phase2_GEM', 'phase2_GE0', 'phase2_hgcal', 'phase2_timing', 'phase2_hfnose', 'phase2_hgcalV10', 'phase2_hgcalV11', 'phase2_hgcalV12', - 'phase2_timing_layer', 'phase2_etlV4', 'phase2_hcal', 'phase2_ecal','phase2_ecal_devel', + 'phase2_timing_layer', 'phase2_etlV4', 'phase2_hcal', 'phase2_ecal','phase2_ecal_devel', 'phase2_ecalTP_devel', 'phase2_trigger', 'phase2_squarePixels', 'phase2_3DPixels', 'trackingLowPU', 'trackingPhase1', diff --git a/DPGAnalysis/HcalNanoAOD/plugins/HcalUHTRTableProducer.cc b/DPGAnalysis/HcalNanoAOD/plugins/HcalUHTRTableProducer.cc index 423cd96763dd5..3f66ccb559f15 100644 --- a/DPGAnalysis/HcalNanoAOD/plugins/HcalUHTRTableProducer.cc +++ b/DPGAnalysis/HcalNanoAOD/plugins/HcalUHTRTableProducer.cc @@ -56,12 +56,9 @@ class HcalUHTRTableProducer : public edm::stream::EDProducer<> { */ private: - void beginRun(edm::Run const&, edm::EventSetup const&) override; void produce(edm::Event&, edm::EventSetup const&) override; }; -void HcalUHTRTableProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {} - void HcalUHTRTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { std::vector crate; std::vector slot; diff --git a/DPGAnalysis/HcalNanoAOD/plugins/HcalUMNioTableProducer.cc b/DPGAnalysis/HcalNanoAOD/plugins/HcalUMNioTableProducer.cc index 2f2d499239260..566b7ba8cc749 100644 --- a/DPGAnalysis/HcalNanoAOD/plugins/HcalUMNioTableProducer.cc +++ b/DPGAnalysis/HcalNanoAOD/plugins/HcalUMNioTableProducer.cc @@ -40,12 +40,9 @@ class HcalUMNioTableProducer : public edm::stream::EDProducer<> { */ private: - void beginRun(edm::Run const&, edm::EventSetup const&) override; void produce(edm::Event&, edm::EventSetup const&) override; }; -void HcalUMNioTableProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {} - void HcalUMNioTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { edm::Handle uMNioDigi; iEvent.getByToken(tokenUMNio_, uMNioDigi); diff --git a/DPGAnalysis/Skims/python/Skims_DPG_cff.py b/DPGAnalysis/Skims/python/Skims_DPG_cff.py index 222bca5ee7fe4..6dea86124f6dc 100644 --- a/DPGAnalysis/Skims/python/Skims_DPG_cff.py +++ b/DPGAnalysis/Skims/python/Skims_DPG_cff.py @@ -416,6 +416,20 @@ ##################### +from DPGAnalysis.Skims.TeVJetSkim_cff import * +teVJetPath = cms.Path( teVJetSequence ) + +SKIMStreamTeVJet = cms.FilteredStream( + responsible = 'L1 DPG/JME POG', + name = 'TeVJet', + paths = ( teVJetPath ), + content = skimContent.outputCommands, + selectEvents = cms.untracked.PSet(), + dataTier = cms.untracked.string('RAW-RECO') + ) + +##################### + from DPGAnalysis.Skims.HighMETSkim_cff import * condPath = cms.Path(CondMETSelSeq) #pfPath = cms.Path(pfMETSelSeq) diff --git a/DPGAnalysis/Skims/python/TeVJetSkim_cff.py b/DPGAnalysis/Skims/python/TeVJetSkim_cff.py new file mode 100644 index 0000000000000..8c67bf0b8e2d0 --- /dev/null +++ b/DPGAnalysis/Skims/python/TeVJetSkim_cff.py @@ -0,0 +1,31 @@ +import FWCore.ParameterSet.Config as cms + + +# run on MIONAOD +RUN_ON_MINIAOD = False + + +# cuts +JET_CUT=("pt > 1000 && abs(eta)<5.0") + +# single lepton selectors +if RUN_ON_MINIAOD: + teVJets = cms.EDFilter("CandViewRefSelector", + src = cms.InputTag("slimmedJets"), + cut = cms.string(JET_CUT) + ) +else: + teVJets = cms.EDFilter("CandViewRefSelector", + src = cms.InputTag("ak4PFJets"), + cut = cms.string(JET_CUT) + ) + +teVJetsCountFilter = cms.EDFilter("CandViewCountFilter", + src = cms.InputTag("teVJets"), + minNumber = cms.uint32(1) + ) + + + +#sequences +teVJetSequence = cms.Sequence(teVJets*teVJetsCountFilter ) diff --git a/DQM/EcalCommon/interface/MESet.h b/DQM/EcalCommon/interface/MESet.h index 2abd1ff9056e3..052f69bc7af27 100644 --- a/DQM/EcalCommon/interface/MESet.h +++ b/DQM/EcalCommon/interface/MESet.h @@ -275,11 +275,10 @@ namespace ecaldqm { const_iterator(EcalElectronicsMapping const *, MESet const &_meSet, unsigned _iME = 0, int _iBin = 1) : bin_(_meSet, _iME, _iBin) {} const_iterator(EcalElectronicsMapping const *, MESet const &, DetId const &); - const_iterator(const_iterator const &_orig) : bin_(_orig.bin_) {} - const_iterator &operator=(const_iterator const &_rhs) { - bin_ = _rhs.bin_; - return *this; - } + const_iterator(const_iterator const &_orig) = default; + const_iterator(const_iterator &&_orig) = default; + const_iterator &operator=(const_iterator const &_orig) = default; + const_iterator &operator=(const_iterator &&_orig) = default; bool operator==(const_iterator const &_rhs) const { return bin_ == _rhs.bin_; } bool operator!=(const_iterator const &_rhs) const { return !(bin_ == _rhs.bin_); } ConstBin const *operator->() const { return &bin_; } @@ -304,7 +303,8 @@ namespace ecaldqm { : const_iterator(electronicsMap, _meSet, _id), bin_(_meSet) { bin_.ConstBin::operator=(const_iterator::bin_); } - iterator(iterator const &_orig) : const_iterator(_orig), bin_(_orig.bin_) {} + iterator(iterator const &_orig) = default; + iterator &operator=(iterator const &) = default; iterator &operator=(const_iterator const &_rhs) { const_iterator::operator=(_rhs); bin_.ConstBin::operator=(const_iterator::bin_); diff --git a/DQM/HLTEvF/plugins/HLTObjectMonitor.cc b/DQM/HLTEvF/plugins/HLTObjectMonitor.cc index d4223fcad86cb..f05ff73a84891 100644 --- a/DQM/HLTEvF/plugins/HLTObjectMonitor.cc +++ b/DQM/HLTEvF/plugins/HLTObjectMonitor.cc @@ -84,17 +84,12 @@ class HLTObjectMonitor : public DQMEDAnalyzer { public: explicit HLTObjectMonitor(const edm::ParameterSet&); - ~HLTObjectMonitor() override; - - // static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void analyze(const edm::Event&, const edm::EventSetup&) override; void bookHistograms(DQMStore::IBooker& i, edm::Run const&, edm::EventSetup const&) override; void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override; vector plotList; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; double dxyFinder(double, double, edm::Handle, edm::Handle); double get_wall_time(void); // ----------member data --------------------------- @@ -346,11 +341,6 @@ HLTObjectMonitor::HLTObjectMonitor(const edm::ParameterSet& iConfig) csvPfJetsToken_ = consumes>(edm::InputTag("hltPFJetForBtag", "", processName_)); } -HLTObjectMonitor::~HLTObjectMonitor() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // diff --git a/DQM/HLTEvF/plugins/HLTObjectMonitorProtonLead.cc b/DQM/HLTEvF/plugins/HLTObjectMonitorProtonLead.cc index 0c37de07debd0..bb4e16b92e471 100644 --- a/DQM/HLTEvF/plugins/HLTObjectMonitorProtonLead.cc +++ b/DQM/HLTEvF/plugins/HLTObjectMonitorProtonLead.cc @@ -83,7 +83,6 @@ class HLTObjectMonitorProtonLead : public DQMEDAnalyzer { public: explicit HLTObjectMonitorProtonLead(const edm::ParameterSet&); - ~HLTObjectMonitorProtonLead() override; // static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); @@ -92,8 +91,6 @@ class HLTObjectMonitorProtonLead : public DQMEDAnalyzer { void bookHistograms(DQMStore::IBooker& i, edm::Run const&, edm::EventSetup const&) override; void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override; vector plotList; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; double get_wall_time(void); // ----------member data --------------------------- @@ -327,11 +324,6 @@ HLTObjectMonitorProtonLead::HLTObjectMonitorProtonLead(const edm::ParameterSet& aodTriggerToken_ = consumes(iConfig.getParameter("triggerEvent")); } -HLTObjectMonitorProtonLead::~HLTObjectMonitorProtonLead() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // diff --git a/DQM/L1TMonitorClient/src/L1TOccupancyClient.cc b/DQM/L1TMonitorClient/src/L1TOccupancyClient.cc index 52a7a1b6a436c..9abb66db22879 100644 --- a/DQM/L1TMonitorClient/src/L1TOccupancyClient.cc +++ b/DQM/L1TMonitorClient/src/L1TOccupancyClient.cc @@ -247,14 +247,6 @@ void L1TOccupancyClient::dqmEndJob(DQMStore::IBooker& ibooker, DQMStore::IGetter delete hservice_; } -//____________________________________________________________________________ -// Function: beginLuminosityBlock -// Description: This is will be run at the begining of each luminosity block -// Inputs: -// * const LuminosityBlock& lumiSeg = Luminosity Block information -// * const EventSetup& context = Event Setup information -//____________________________________________________________________________ - //____________________________________________________________________________ // Function: endLuminosityBlock // Description: This is will be run at the end of each luminosity block diff --git a/DQM/TrackingMonitorSource/plugins/ShortenedTrackResolution.cc b/DQM/TrackingMonitorSource/plugins/ShortenedTrackResolution.cc new file mode 100644 index 0000000000000..ab6dbc45e8411 --- /dev/null +++ b/DQM/TrackingMonitorSource/plugins/ShortenedTrackResolution.cc @@ -0,0 +1,139 @@ +// user includes +#include "DQMServices/Core/interface/DQMEDAnalyzer.h" +#include "DQMServices/Core/interface/DQMStore.h" +#include "DQMServices/Core/interface/MonitorElement.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/Utilities/interface/transform.h" // for edm::vector_transform + +// ROOT includes +#include "TLorentzVector.h" + +// standard includes +#include + +class ShortenedTrackResolution : public DQMEDAnalyzer { +public: + ShortenedTrackResolution(const edm::ParameterSet &); + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +protected: + void analyze(edm::Event const &iEvent, edm::EventSetup const &iSetup) override; + void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override; + +private: + const std::string folderName_; + const std::vector hitsRemain_; + const double minTracksEta_; + const double maxTracksEta_; + const double minTracksPt_; + const double maxTracksPt_; + + const double maxDr_; + const edm::InputTag tracksTag_; + const std::vector tracksRerecoTag_; + const edm::EDGetTokenT> tracksToken_; + const std::vector>> tracksRerecoToken_; + + std::vector histsPtAll_; +}; + +// ----------------------------- +// constructors and destructor +// ----------------------------- +ShortenedTrackResolution::ShortenedTrackResolution(const edm::ParameterSet &ps) + : folderName_(ps.getUntrackedParameter("folderName", "TrackRefitting")), + hitsRemain_(ps.getUntrackedParameter>("hitsRemainInput")), + minTracksEta_(ps.getUntrackedParameter("minTracksEtaInput", 0.0)), + maxTracksEta_(ps.getUntrackedParameter("maxTracksEtaInput", 2.2)), + minTracksPt_(ps.getUntrackedParameter("minTracksPtInput", 15.0)), + maxTracksPt_(ps.getUntrackedParameter("maxTracksPtInput", 99999.9)), + maxDr_(ps.getUntrackedParameter("maxDrInput", 0.01)), + tracksTag_(ps.getUntrackedParameter("tracksInputTag", edm::InputTag("generalTracks", "", "DQM"))), + tracksRerecoTag_(ps.getUntrackedParameter>("tracksRerecoInputTag")), + tracksToken_(consumes>(tracksTag_)), + tracksRerecoToken_(edm::vector_transform( + tracksRerecoTag_, [this](edm::InputTag const &tag) { return consumes>(tag); })) { + histsPtAll_.clear(); +} + +//__________________________________________________________________________________ +void ShortenedTrackResolution::bookHistograms(DQMStore::IBooker &iBook, + edm::Run const &iRun, + edm::EventSetup const &iSetup) { + std::string currentFolder = folderName_ + "/"; + iBook.setCurrentFolder(currentFolder); + + for (int i = 0; i < int(hitsRemain_.size()); ++i) { + histsPtAll_.push_back(iBook.book1D( + fmt::sprintf("trackPtRatio_%s", hitsRemain_[i]).c_str(), + fmt::sprintf("Short Track p_{T} / Full Track p_{T} - %s layers;p_{T}^{short}/p_{T}^{full};n. tracks", + hitsRemain_[i]) + .c_str(), + 101, + -0.05, + 2.05)); + } +} + +//__________________________________________________________________________________ +void ShortenedTrackResolution::analyze(edm::Event const &iEvent, edm::EventSetup const &iSetup) { + const auto &tracks = iEvent.getHandle(tracksToken_); + + if (!tracks.isValid()) { + edm::LogError("ShortenedTrackResolution") << "Missing input track collection " << tracksTag_.encode() << std::endl; + return; + } + + for (const auto &track : *tracks) { + const reco::HitPattern &hp = track.hitPattern(); + if (int(int(hp.numberOfValidHits()) - int(hp.numberOfAllHits(reco::HitPattern::TRACK_HITS))) != 0) { + break; + } + + TLorentzVector tvec; + tvec.SetPtEtaPhiM(track.pt(), track.eta(), track.phi(), 0.0); + + int i = 0; // token index + for (const auto &token : tracksRerecoToken_) { + const auto &tracks_rereco = iEvent.getHandle(token); + + for (const auto &track_rereco : *tracks_rereco) { + TLorentzVector trerecovec; + trerecovec.SetPtEtaPhiM(track_rereco.pt(), track_rereco.eta(), track_rereco.phi(), 0.0); + double deltaR = tvec.DeltaR(trerecovec); + + if (deltaR < maxDr_) { + if (track_rereco.pt() >= minTracksPt_ && track_rereco.pt() <= maxTracksPt_ && + std::abs(track_rereco.eta()) >= minTracksEta_ && std::abs(track_rereco.eta()) <= maxTracksEta_) { + histsPtAll_[i]->Fill(1.0 * track_rereco.pt() / track.pt()); + } + } + } + ++i; + } + } +} + +//__________________________________________________________________________________ +void ShortenedTrackResolution::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.addUntracked("folderName", "TrackRefitting"); + desc.addUntracked>("hitsRemainInput", {}); + desc.addUntracked("minTracksEtaInput", 0.0); + desc.addUntracked("maxTracksEtaInput", 2.2); + desc.addUntracked("minTracksPtInput", 15.0); + desc.addUntracked("maxTracksPtInput", 99999.9); + desc.addUntracked("maxDrInput", 0.01); + desc.addUntracked("tracksInputTag", edm::InputTag("generalTracks", "", "DQM")); + desc.addUntracked>("tracksRerecoInputTag", {}); + descriptions.addWithDefaultLabel(desc); +} + +// Define this as a plug-in +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(ShortenedTrackResolution); diff --git a/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py b/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py index 02d3da248a109..faef9e465b492 100644 --- a/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py +++ b/DQM/TrackingMonitorSource/python/TrackingSourceConfig_Tier0_cff.py @@ -397,6 +397,8 @@ def _copyIfExists(mod, pset, name): TrackingDQMSourceTier0 += TrackSeedMonSequence +from DQM.TrackingMonitorSource.shortTrackResolution_cff import * + # MessageLog for module in selectedModules : label = str(module)+'LogMessageMonCommon' @@ -404,6 +406,7 @@ def _copyIfExists(mod, pset, name): TrackingDQMSourceTier0 += voMonitoringSequence TrackingDQMSourceTier0 += voWcutMonitoringSequence TrackingDQMSourceTier0 += primaryVertexResolution +TrackingDQMSourceTier0 += shortTrackResolution3to8 TrackingDQMSourceTier0 += dqmInfoTracking @@ -426,6 +429,7 @@ def _copyIfExists(mod, pset, name): TrackingDQMSourceTier0Common += voMonitoringCommonSequence TrackingDQMSourceTier0Common += voWcutMonitoringCommonSequence TrackingDQMSourceTier0Common += primaryVertexResolution +TrackingDQMSourceTier0Common += shortTrackResolution3to8 TrackingDQMSourceTier0Common += dqmInfoTracking TrackingDQMSourceTier0MinBias = cms.Sequence(cms.ignore(trackingDQMgoodOfflinePrimaryVertices)) diff --git a/DQM/TrackingMonitorSource/python/shortTrackResolution_cff.py b/DQM/TrackingMonitorSource/python/shortTrackResolution_cff.py new file mode 100644 index 0000000000000..b07c24d88cb99 --- /dev/null +++ b/DQM/TrackingMonitorSource/python/shortTrackResolution_cff.py @@ -0,0 +1,74 @@ +import FWCore.ParameterSet.Config as cms +from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer + +from RecoTracker.FinalTrackSelectors.SingleLongTrackProducer_cfi import * + +from RecoTracker.FinalTrackSelectors.trackerTrackHitFilter_cfi import trackerTrackHitFilter as _trackerTrackHitFilter +ShortTrackCandidates = _trackerTrackHitFilter.clone(src = "SingleLongTrackProducer", + truncateTracks = True, + replaceWithInactiveHits = True, + rejectBadStoNHits = True, + usePixelQualityFlag = True) + +from Configuration.Eras.Modifier_phase2_tracker_cff import phase2_tracker +phase2_tracker.toModify(ShortTrackCandidates, + isPhase2 = True) + +ShortTrackCandidates3 = ShortTrackCandidates.clone(minimumHits = 3, + layersRemaining = 3) + +ShortTrackCandidates4 = ShortTrackCandidates.clone(minimumHits = 4, + layersRemaining = 4) + +ShortTrackCandidates5 = ShortTrackCandidates.clone(minimumHits = 5, + layersRemaining = 5) + +ShortTrackCandidates6 = ShortTrackCandidates.clone(minimumHits = 6, + layersRemaining = 6) + +ShortTrackCandidates7 = ShortTrackCandidates.clone(minimumHits = 7, + layersRemaining = 7) + +ShortTrackCandidates8 = ShortTrackCandidates.clone(minimumHits = 8, + layersRemaining = 8) + +import RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff +RefittedShortTracks = RecoTracker.TrackProducer.CTFFinalFitWithMaterial_cff.ctfWithMaterialTracks.clone(src = 'ShortTrackCandidates') + +RefittedShortTracks3 = RefittedShortTracks.clone(src = 'ShortTrackCandidates3') +RefittedShortTracks4 = RefittedShortTracks.clone(src = 'ShortTrackCandidates4') +RefittedShortTracks5 = RefittedShortTracks.clone(src = 'ShortTrackCandidates5') +RefittedShortTracks6 = RefittedShortTracks.clone(src = 'ShortTrackCandidates6') +RefittedShortTracks7 = RefittedShortTracks.clone(src = 'ShortTrackCandidates7') +RefittedShortTracks8 = RefittedShortTracks.clone(src = 'ShortTrackCandidates8') + +from DQM.TrackingMonitorSource.shortenedTrackResolution_cfi import shortenedTrackResolution as _shortenedTrackResolution +trackingResolution = _shortenedTrackResolution.clone(folderName = "Tracking/ShortTrackResolution", + hitsRemainInput = ["3","4","5","6","7","8"], + minTracksEtaInput = 0.0, + maxTracksEtaInput = 2.2, + minTracksPtInput = 15.0, + maxTracksPtInput = 99999.9, + maxDrInput = 0.01, + tracksInputTag = "SingleLongTrackProducer", + tracksRerecoInputTag = ["RefittedShortTracks3", + "RefittedShortTracks4", + "RefittedShortTracks5", + "RefittedShortTracks6", + "RefittedShortTracks7", + "RefittedShortTracks8"]) + +shortTrackResolution3to8 = cms.Sequence(SingleLongTrackProducer * + ShortTrackCandidates3 * + ShortTrackCandidates4 * + ShortTrackCandidates5 * + ShortTrackCandidates6 * + ShortTrackCandidates7 * + ShortTrackCandidates8 * + RefittedShortTracks3 * + RefittedShortTracks4 * + RefittedShortTracks5 * + RefittedShortTracks6 * + RefittedShortTracks7 * + RefittedShortTracks8 * + trackingResolution) diff --git a/DQM/TrackingMonitorSource/test/BuildFile.xml b/DQM/TrackingMonitorSource/test/BuildFile.xml index 80f374037d92c..5d606b7bfcc91 100644 --- a/DQM/TrackingMonitorSource/test/BuildFile.xml +++ b/DQM/TrackingMonitorSource/test/BuildFile.xml @@ -1 +1,2 @@ + diff --git a/DQM/TrackingMonitorSource/test/testTrackResolutionHarvesting_cfg.py b/DQM/TrackingMonitorSource/test/testTrackResolutionHarvesting_cfg.py new file mode 100644 index 0000000000000..3a399aae2523f --- /dev/null +++ b/DQM/TrackingMonitorSource/test/testTrackResolutionHarvesting_cfg.py @@ -0,0 +1,91 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +options = VarParsing.VarParsing() +options.register('maxEvents', + -1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "maximum events") +options.register('globalTag', + '125X_mcRun3_2022_design_v6', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "conditions") +options.register('inputFile', + 'step1_DQM_LayerRot_9p43e-6_fromRECO.root', + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "input file") +options.parseArguments() + +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process('HARVESTING',Run3) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.DQMSaverAtRunEnd_cff') +process.load('Configuration.StandardSequences.Harvesting_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.maxEvents), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("DQMRootSource", + fileNames = cms.untracked.vstring('file:'+options.inputFile) + ) + +process.options = cms.untracked.PSet( + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring('ProductNotFound'), + accelerators = cms.untracked.vstring('*'), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), + dumpOptions = cms.untracked.bool(False), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + allowAnyLabel_=cms.required.untracked.uint32 + ), + numberOfConcurrentIOVs = cms.untracked.uint32(0) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, options.globalTag, '') + +process.dqmsave_step = cms.Path(process.DQMSaver) + +# Schedule definition +process.schedule = cms.Schedule(process.alcaHarvesting,process.dqmsave_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion diff --git a/DQM/TrackingMonitorSource/test/testTrackResolution_cfg.py b/DQM/TrackingMonitorSource/test/testTrackResolution_cfg.py new file mode 100644 index 0000000000000..49ef4149d18de --- /dev/null +++ b/DQM/TrackingMonitorSource/test/testTrackResolution_cfg.py @@ -0,0 +1,157 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.Utilities.FileUtils as FileUtils +from FWCore.ParameterSet.VarParsing import VarParsing + +options = VarParsing('analysis') +options.register('inputTag', + 'LayerRot_9p43e-6', + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "input tag") +options.register('inputFile', + '/store/relval/CMSSW_14_0_0_pre1/RelValZMM_14/GEN-SIM-RECO/133X_mcRun3_2023_realistic_v3-v1/2590000/586487a4-71be-4b23-b5a4-5662fab803c9.root', + VarParsing.multiplicity.singleton, + VarParsing.varType.string, + "input file") +options.register('isAlCaReco', + False, + VarParsing.multiplicity.singleton, + VarParsing.varType.bool, + "is alcareco input file?") +options.register('isUnitTest', + False, + VarParsing.multiplicity.singleton, + VarParsing.varType.bool, + "is this configuration run in unit test?") +options.parseArguments() + +from Configuration.Eras.Era_Run3_cff import Run3 +process = cms.Process("TrackingResolution", Run3) + +##################################################################### +# import of standard configurations +##################################################################### +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.MessageLogger.cerr.FwkReport.reportEvery = (100 if options.isUnitTest else 100000) +process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('DQMOffline.Configuration.DQMOffline_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +##################################################################### +## BeamSpot from database (i.e. GlobalTag), needed for Refitter +##################################################################### +process.load("RecoVertex.BeamSpotProducer.BeamSpot_cfi") + +##################################################################### +# Load and Configure Measurement Tracker Event +##################################################################### +process.load("RecoTracker.MeasurementDet.MeasurementTrackerEventProducer_cfi") +if(options.isAlCaReco): + # customize MeasurementTrackerEvent for ALCARECO + process.MeasurementTrackerEvent.pixelClusterProducer = "ALCARECOTkAlDiMuon" + process.MeasurementTrackerEvent.stripClusterProducer = "ALCARECOTkAlDiMuon" + process.MeasurementTrackerEvent.inactivePixelDetectorLabels = cms.VInputTag() + process.MeasurementTrackerEvent.inactiveStripDetectorLabels = cms.VInputTag() + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(10 if options.isUnitTest else -1) +) + +##################################################################### +# Input source +##################################################################### +#filelist = FileUtils.loadListFromFile("listOfFiles_idealMC_GEN-SIM-RECO.txt") +#filelist = FileUtils.loadListFromFile("listOfFiles_idealMC_TkAlDiMuonAndVertex.txt") +#readFiles = cms.untracked.vstring( *filelist) + +readFiles = cms.untracked.vstring(options.inputFile) +process.source = cms.Source("PoolSource",fileNames = readFiles) + +process.options = cms.untracked.PSet() + +##################################################################### +# Output +##################################################################### +process.DQMoutput = cms.OutputModule("DQMRootOutputModule", + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('DQMIO'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:step1_DQM_'+options.inputTag+'_'+('fromALCA' if options.isAlCaReco else 'fromRECO' )+'.root'), + outputCommands = process.DQMEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +##################################################################### +# Other statements +##################################################################### +from Configuration.AlCa.GlobalTag import GlobalTag +#process.GlobalTag = GlobalTag(process.GlobalTag,"133X_mcRun3_2023_realistic_v3", '') +process.GlobalTag = GlobalTag(process.GlobalTag, "125X_mcRun3_2022_design_v6", '') +process.GlobalTag.toGet = cms.VPSet(cms.PSet(connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS"), + record = cms.string('TrackerAlignmentRcd'), + tag = cms.string(options.inputTag))) + +##################################################################### +# The DQM analysis sequence +##################################################################### +process.load("DQM.TrackingMonitorSource.shortTrackResolution_cff") +process.load("RecoTracker.TrackProducer.TrackRefitters_cff") +import RecoTracker.TrackProducer.TrackRefitters_cff +process.LongTracksRefit = process.TrackRefitter.clone( + src = 'SingleLongTrackProducer', + TrajectoryInEvent = True, + TTRHBuilder = "WithAngleAndTemplate", + NavigationSchool = '' +) + +process.ShortTrackCandidates3.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates4.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates5.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates6.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates7.src = cms.InputTag("LongTracksRefit") +process.ShortTrackCandidates8.src = cms.InputTag("LongTracksRefit") + +process.SingleLongTrackProducer.matchMuons = cms.InputTag("muons") +if(options.isAlCaReco): + process.SingleLongTrackProducer.requiredDr = cms.double(-9999.) # do not require any matchings + process.SingleLongTrackProducer.allTracks = cms.InputTag("ALCARECOTkAlDiMuon") + +##################################################################### +# Path +##################################################################### +process.analysis_step = cms.Path(process.offlineBeamSpot * + process.MeasurementTrackerEvent * + process.SingleLongTrackProducer * + process.LongTracksRefit * + process.ShortTrackCandidates3 * + process.ShortTrackCandidates4 * + process.ShortTrackCandidates5 * + process.ShortTrackCandidates6 * + process.ShortTrackCandidates7 * + process.ShortTrackCandidates8 * + process.RefittedShortTracks3 * + process.RefittedShortTracks4 * + process.RefittedShortTracks5 * + process.RefittedShortTracks6 * + process.RefittedShortTracks7 * + process.RefittedShortTracks8 * + process.trackingResolution) + +##################################################################### +# Path and EndPath definitions +##################################################################### +process.endjob_step = cms.EndPath(process.endOfProcess) +process.DQMoutput_step = cms.EndPath(process.DQMoutput) + +process.schedule = cms.Schedule(process.analysis_step, process.endjob_step, process.DQMoutput_step) + +################################################################### +# Set the process to run multi-threaded +################################################################### +process.options.numberOfThreads = 8 diff --git a/DQM/TrackingMonitorSource/test/testTrackingResolution.sh b/DQM/TrackingMonitorSource/test/testTrackingResolution.sh new file mode 100755 index 0000000000000..25c44a8fdc3d7 --- /dev/null +++ b/DQM/TrackingMonitorSource/test/testTrackingResolution.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +function die { echo $1: status $2 ; exit $2; } + +echo -e "TESTING step1 with RECO inputs ...\n\n" +cmsRun ${SCRAM_TEST_PATH}/testTrackResolution_cfg.py isUnitTest=True || die "Failure running testTrackResolution_cfg.py isUnitTest=True" $? + +echo -e "TESTING step1 with ALCARECO inputs ...\n\n" +cmsRun ${SCRAM_TEST_PATH}/testTrackResolution_cfg.py isUnitTest=True isAlCaReco=True inputFile=/store/mc/Run3Winter23Reco/DYJetsToMuMu_M-50_TuneCP5_13p6TeV-madgraphMLM-pythia8/ALCARECO/TkAlDiMuonAndVertex-TRKDesignNoPU_AlcaRecoTRKMu_designGaussSigmaZ4cm_125X_mcRun3_2022_design_v6-v1/60000/93401af5-0da6-40ce-82e4-d5571c93dd97.root || die "Failure running testTrackResolution_cfg.py isUnitTest=True isAlCaReco=True" $? + +echo -e "TESTING harvesting with RECO inputs ...\n\n" +cmsRun ${SCRAM_TEST_PATH}/testTrackResolutionHarvesting_cfg.py || die "Failure running testTrackResolutionHarvesting_cfg.py" $? + +echo -e "TESTING harvesting with ALCARECO inputs ...\n\n" +cmsRun ${SCRAM_TEST_PATH}/testTrackResolutionHarvesting_cfg.py inputFile=step1_DQM_LayerRot_9p43e-6_fromALCA.root || die "Failure running testTrackResolutionHarvesting_cfg.py inputFile=step1_DQM_LayerRot_9p43e-6_fromALCA.root" $? diff --git a/DQM/TrigXMonitorClient/interface/L1ScalersClient.h b/DQM/TrigXMonitorClient/interface/L1ScalersClient.h index 7de0c878afa82..b6e51dd4e84f2 100644 --- a/DQM/TrigXMonitorClient/interface/L1ScalersClient.h +++ b/DQM/TrigXMonitorClient/interface/L1ScalersClient.h @@ -28,15 +28,9 @@ class L1ScalersClient /// Constructors L1ScalersClient(const edm::ParameterSet &ps); - /// Destructor - ~L1ScalersClient() override{}; - /// BeginJob void beginJob(void) override; - // /// Endjob - // void endJob(void); - /// BeginRun void beginRun(const edm::Run &run, const edm::EventSetup &c) override; diff --git a/DQMOffline/Alignment/python/ALCARECOTkAlDQM_cff.py b/DQMOffline/Alignment/python/ALCARECOTkAlDQM_cff.py index 1f61d6dfadb88..fdeb39277793c 100644 --- a/DQMOffline/Alignment/python/ALCARECOTkAlDQM_cff.py +++ b/DQMOffline/Alignment/python/ALCARECOTkAlDQM_cff.py @@ -78,7 +78,11 @@ muonTracks = 'ALCARECO'+__trackCollName, vertices = 'offlinePrimaryVertices', FolderName = "AlCaReco/"+__selectionName, - maxSVdist = 50 + maxSVdist = 50, + SVDistConfig = dict(maxDeltaEta = 3.7, title = 'PV - Z Vertex distance'), + SVDistSigConfig = dict(maxDeltaEta = 3.7, title = 'PV - Z Vertex distance significance'), + SVDist3DConfig = dict(maxDeltaEta = 3.7, title = 'PV - Z Vertex 3D distance'), + SVDist3DSigConfig = dict(maxDeltaEta = 3.7, title = 'PV - Z Vertex 3D distance significance') ) ALCARECOTkAlDiMuonMassBiasDQM = DQMOffline.Alignment.DiMuonMassBiasMonitor_cfi.DiMuonMassBiasMonitor.clone( @@ -166,10 +170,10 @@ FolderName = "AlCaReco/"+__selectionName, maxSVdist = 50, CosPhi3DConfig = dict(maxDeltaEta = 1.3), - SVDistConfig = dict(maxDeltaEta = 1.3), - SVDistSigConfig = dict(maxDeltaEta = 1.3), - SVDist3DConfig = dict(maxDeltaEta = 1.3), - SVDist3DSigConfig = dict(maxDeltaEta = 1.3) + SVDistConfig = dict(maxDeltaEta = 1.3, title = 'PV - J/#psi Vertex distance'), + SVDistSigConfig = dict(maxDeltaEta = 1.3, title = 'PV - J/#psi Vertex distance significance'), + SVDist3DConfig = dict(maxDeltaEta = 1.3, title = 'PV - J/#psi Vertex 3D distance'), + SVDist3DSigConfig = dict(maxDeltaEta = 1.3, title = 'PV - J/#psi Vertex 3D distance significance') ) ALCARECOTkAlJpsiMassBiasDQM = DQMOffline.Alignment.DiMuonMassBiasMonitor_cfi.DiMuonMassBiasMonitor.clone( @@ -241,10 +245,10 @@ FolderName = "AlCaReco/"+__selectionName, maxSVdist = 50, CosPhi3DConfig = dict(maxDeltaEta = 1.6), - SVDistConfig = dict(maxDeltaEta = 1.6), - SVDistSigConfig = dict(maxDeltaEta = 1.6), - SVDist3DConfig = dict(maxDeltaEta = 1.6), - SVDist3DSigConfig = dict(maxDeltaEta = 1.6) + SVDistConfig = dict(maxDeltaEta = 1.6, title = 'PV - #Upsilon Vertex distance'), + SVDistSigConfig = dict(maxDeltaEta = 1.6, title = 'PV - #Upsilon Vertex distance significance'), + SVDist3DConfig = dict(maxDeltaEta = 1.6, title = 'PV - #Upsilon Vertex 3D distance'), + SVDist3DSigConfig = dict(maxDeltaEta = 1.6, title = 'PV - #Upsilon Vertex 3D distance significance') ) ALCARECOTkAlUpsilonMassBiasDQM = DQMOffline.Alignment.DiMuonMassBiasMonitor_cfi.DiMuonMassBiasMonitor.clone( diff --git a/DQMOffline/Configuration/test/BuildFile.xml b/DQMOffline/Configuration/test/BuildFile.xml index 4334126214c15..7e3889dabe548 100644 --- a/DQMOffline/Configuration/test/BuildFile.xml +++ b/DQMOffline/Configuration/test/BuildFile.xml @@ -4,12 +4,12 @@ - + - + diff --git a/DQMOffline/Configuration/test/runrest.sh b/DQMOffline/Configuration/test/runrest.sh new file mode 100755 index 0000000000000..83394ce77d5a8 --- /dev/null +++ b/DQMOffline/Configuration/test/runrest.sh @@ -0,0 +1,12 @@ +#!/bin/bash -ex +ERR=0 +PYTHONUNBUFFERED=1 cmsswSequenceInfo.py --runTheMatrix --steps DQM,VALIDATION --infile $1 --offset $2 --dbfile sequences$2.db --threads 1 >run.log 2>&1 || ERR=1 +cat run.log +seqs=$(grep 'Analyzing [0-9][0-9]* seqs' run.log | sed 's|.*Analyzing *||;s| .*||') +echo "Sequences run by final DQMOfflineConfiguration: $seqs" +if [ "$seqs" -gt 0 ] ; then + echo "Final DQMOfflineConfiguration should not run any sequences." + echo "Please update parameters for TestDQMOfflineConfiguration unittest to run the extra sequences." + exit 1 +fi +exit $ERR diff --git a/DQMOffline/EGamma/plugins/PhotonOfflineClient.h b/DQMOffline/EGamma/plugins/PhotonOfflineClient.h index d86448b6dccde..586402cbd1699 100644 --- a/DQMOffline/EGamma/plugins/PhotonOfflineClient.h +++ b/DQMOffline/EGamma/plugins/PhotonOfflineClient.h @@ -63,15 +63,8 @@ class PhotonOfflineClient : public DQMEDHarvester { explicit PhotonOfflineClient(const edm::ParameterSet& pset); ~PhotonOfflineClient() override; - // virtual void analyze(const edm::Event&, const edm::EventSetup& ) ; - // virtual void beginJob() ; - //virtual void endJob() ; void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; - // virtual void endLuminosityBlock( const edm::LuminosityBlock& , const edm::EventSetup& ) ; - //virtual void endRun(const edm::Run& , const edm::EventSetup& ) ; - //virtual void runClient(); - virtual void runClient(DQMStore::IBooker& iBooker, DQMStore::IGetter& iGetter); MonitorElement* bookHisto( DQMStore::IBooker& iBooker, std::string histoName, std::string title, int bin, double min, double max); diff --git a/DQMOffline/Muon/interface/DiMuonHistograms.h b/DQMOffline/Muon/interface/DiMuonHistograms.h index 94feb93bde699..ae8c762494a17 100644 --- a/DQMOffline/Muon/interface/DiMuonHistograms.h +++ b/DQMOffline/Muon/interface/DiMuonHistograms.h @@ -64,10 +64,10 @@ class DiMuonHistograms : public DQMEDAnalyzer { double etaECMax; //Defining the relevant invariant mass regions - double LowMassMin; - double LowMassMax; - double HighMassMin; - double HighMassMax; + double lowMassMin; + double lowMassMax; + double highMassMin; + double highMassMax; std::vector GlbGlbMuon_LM; std::vector GlbGlbMuon_HM; diff --git a/DQMOffline/Muon/python/diMuonHistograms_cfi.py b/DQMOffline/Muon/python/diMuonHistograms_cfi.py index f0fcb59ddc4d0..70431269e6baf 100644 --- a/DQMOffline/Muon/python/diMuonHistograms_cfi.py +++ b/DQMOffline/Muon/python/diMuonHistograms_cfi.py @@ -17,10 +17,10 @@ etaECMin = cms.double(0.9), etaECMax = cms.double(2.4), - LowMassMin = cms.double(2.0), - LowMassMax = cms.double(12.0), - HighMassMin = cms.double(70.0), - HighMassMax = cms.double(110.0), + lowMassMin = cms.double(2.0), + lowMassMax = cms.double(12.0), + highMassMin = cms.double(70.0), + highMassMax = cms.double(110.0), folder = cms.string("Muons/diMuonHistograms") ) diMuonHistos_miniAOD = DQMEDAnalyzer('DiMuonHistograms', @@ -37,10 +37,10 @@ etaECMin = cms.double(0.9), etaECMax = cms.double(2.4), - LowMassMin = cms.double(2.0), - LowMassMax = cms.double(12.0), - HighMassMin = cms.double(70.0), - HighMassMax = cms.double(110.0), + lowMassMin = cms.double(2.0), + lowMassMax = cms.double(12.0), + highMassMin = cms.double(70.0), + highMassMax = cms.double(110.0), folder = cms.string("Muons_miniAOD/diMuonHistograms") ) @@ -50,8 +50,8 @@ etaBBin = 350, etaEBin = 350, - LowMassMin = 2.0, - LowMassMax = 51.0, - HighMassMin = 55.0, - HighMassMax = 125.0 + lowMassMin = 2.0, + lowMassMax = 51.0, + highMassMin = 55.0, + highMassMax = 125.0 ) diff --git a/DQMOffline/Muon/src/DiMuonHistograms.cc b/DQMOffline/Muon/src/DiMuonHistograms.cc index 35e1ae21cf9d1..f89cacabf8e9e 100644 --- a/DQMOffline/Muon/src/DiMuonHistograms.cc +++ b/DQMOffline/Muon/src/DiMuonHistograms.cc @@ -53,10 +53,10 @@ DiMuonHistograms::DiMuonHistograms(const edm::ParameterSet& pSet) { etaECMin = parameters.getParameter("etaECMin"); etaECMax = parameters.getParameter("etaECMax"); - LowMassMin = parameters.getParameter("LowMassMin"); - LowMassMax = parameters.getParameter("LowMassMax"); - HighMassMin = parameters.getParameter("HighMassMin"); - HighMassMax = parameters.getParameter("HighMassMax"); + lowMassMin = parameters.getParameter("lowMassMin"); + lowMassMax = parameters.getParameter("lowMassMax"); + highMassMin = parameters.getParameter("highMassMin"); + highMassMax = parameters.getParameter("highMassMax"); theFolder = parameters.getParameter("folder"); } @@ -78,51 +78,51 @@ void DiMuonHistograms::bookHistograms(DQMStore::IBooker& ibooker, GlbGlbMuon_LM.push_back(ibooker.book1D("GlbGlbMuon_LM" + EtaName[iEtaRegion], "InvMass_{GLB,GLB}" + EtaName[iEtaRegion], nBin[iEtaRegion], - LowMassMin, - LowMassMax)); + lowMassMin, + lowMassMax)); TrkTrkMuon_LM.push_back(ibooker.book1D("TrkTrkMuon_LM" + EtaName[iEtaRegion], "InvMass_{TRK,TRK}" + EtaName[iEtaRegion], nBin[iEtaRegion], - LowMassMin, - LowMassMax)); + lowMassMin, + lowMassMax)); StaTrkMuon_LM.push_back(ibooker.book1D("StaTrkMuon_LM" + EtaName[iEtaRegion], "InvMass_{STA,TRK}" + EtaName[iEtaRegion], nBin[iEtaRegion], - LowMassMin, - LowMassMax)); + lowMassMin, + lowMassMax)); GlbGlbMuon_HM.push_back(ibooker.book1D("GlbGlbMuon_HM" + EtaName[iEtaRegion], "InvMass_{GLB,GLB}" + EtaName[iEtaRegion], nBin[iEtaRegion], - HighMassMin, - HighMassMax)); + highMassMin, + highMassMax)); TrkTrkMuon_HM.push_back(ibooker.book1D("TrkTrkMuon_HM" + EtaName[iEtaRegion], "InvMass_{TRK,TRK}" + EtaName[iEtaRegion], nBin[iEtaRegion], - HighMassMin, - HighMassMax)); + highMassMin, + highMassMax)); StaTrkMuon_HM.push_back(ibooker.book1D("StaTrkMuon_HM" + EtaName[iEtaRegion], "InvMass_{STA,TRK}" + EtaName[iEtaRegion], nBin[iEtaRegion], - HighMassMin, - HighMassMax)); + highMassMin, + highMassMax)); // arround the Z peak TightTightMuon.push_back(ibooker.book1D("TightTightMuon" + EtaName[iEtaRegion], "InvMass_{Tight,Tight}" + EtaName[iEtaRegion], nBin[iEtaRegion], - LowMassMin, - LowMassMax)); + highMassMin, + highMassMax)); MediumMediumMuon.push_back(ibooker.book1D("MediumMediumMuon" + EtaName[iEtaRegion], "InvMass_{Medium,Medium}" + EtaName[iEtaRegion], nBin[iEtaRegion], - LowMassMin, - LowMassMax)); + highMassMin, + highMassMax)); LooseLooseMuon.push_back(ibooker.book1D("LooseLooseMuon" + EtaName[iEtaRegion], "InvMass_{Loose,Loose}" + EtaName[iEtaRegion], nBin[iEtaRegion], - LowMassMin, - LowMassMax)); + highMassMin, + highMassMax)); //Fraction of bad hits in the tracker track to the total TightTightMuonBadFrac.push_back(ibooker.book1D( "TightTightMuonBadFrac" + EtaName[iEtaRegion], "BadFrac_{Tight,Tight}" + EtaName[iEtaRegion], 10, 0, 0.4)); @@ -222,9 +222,9 @@ void DiMuonHistograms::analyze(const edm::Event& iEvent, const edm::EventSetup& fabs(recoCombinedGlbTrack1->eta()) < EtaCutMax[iEtaRegion] && fabs(recoCombinedGlbTrack2->eta()) > EtaCutMin[iEtaRegion] && fabs(recoCombinedGlbTrack2->eta()) < EtaCutMax[iEtaRegion]) { - if (InvMass < LowMassMax) + if (InvMass < lowMassMax) GlbGlbMuon_LM[iEtaRegion]->Fill(InvMass); - if (InvMass > HighMassMin) + if (InvMass > highMassMin) GlbGlbMuon_HM[iEtaRegion]->Fill(InvMass); } } @@ -300,9 +300,9 @@ void DiMuonHistograms::analyze(const edm::Event& iEvent, const edm::EventSetup& if (fabs(recoStaTrack->eta()) > EtaCutMin[iEtaRegion] && fabs(recoStaTrack->eta()) < EtaCutMax[iEtaRegion] && fabs(recoTrack->eta()) > EtaCutMin[iEtaRegion] && fabs(recoTrack->eta()) < EtaCutMax[iEtaRegion]) { - if (InvMass < LowMassMax) + if (InvMass < lowMassMax) StaTrkMuon_LM[iEtaRegion]->Fill(InvMass); - if (InvMass > HighMassMin) + if (InvMass > highMassMin) StaTrkMuon_HM[iEtaRegion]->Fill(InvMass); } } @@ -322,9 +322,9 @@ void DiMuonHistograms::analyze(const edm::Event& iEvent, const edm::EventSetup& if (fabs(recoStaTrack->eta()) > EtaCutMin[iEtaRegion] && fabs(recoStaTrack->eta()) < EtaCutMax[iEtaRegion] && fabs(recoTrack->eta()) > EtaCutMin[iEtaRegion] && fabs(recoTrack->eta()) < EtaCutMax[iEtaRegion]) { - if (InvMass < LowMassMax) + if (InvMass < lowMassMax) StaTrkMuon_LM[iEtaRegion]->Fill(InvMass); - if (InvMass > HighMassMin) + if (InvMass > highMassMin) StaTrkMuon_HM[iEtaRegion]->Fill(InvMass); } } @@ -345,9 +345,9 @@ void DiMuonHistograms::analyze(const edm::Event& iEvent, const edm::EventSetup& for (unsigned int iEtaRegion = 0; iEtaRegion < 3; iEtaRegion++) { if (fabs(recoTrack1->eta()) > EtaCutMin[iEtaRegion] && fabs(recoTrack1->eta()) < EtaCutMax[iEtaRegion] && fabs(recoTrack2->eta()) > EtaCutMin[iEtaRegion] && fabs(recoTrack2->eta()) < EtaCutMax[iEtaRegion]) { - if (InvMass < LowMassMax) + if (InvMass < lowMassMax) TrkTrkMuon_LM[iEtaRegion]->Fill(InvMass); - if (InvMass > HighMassMin) + if (InvMass > highMassMin) TrkTrkMuon_HM[iEtaRegion]->Fill(InvMass); } } diff --git a/DQMOffline/Trigger/interface/EgHLTOffHelper.h b/DQMOffline/Trigger/interface/EgHLTOffHelper.h index 8dd397fdcdd62..6c61be5e0aead 100644 --- a/DQMOffline/Trigger/interface/EgHLTOffHelper.h +++ b/DQMOffline/Trigger/interface/EgHLTOffHelper.h @@ -49,6 +49,9 @@ #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/ConsumesCollector.h" +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" + class EgammaHLTTrackIsolation; class HLTConfigProvider; class EcalSeverityLevelAlgo; @@ -200,6 +203,8 @@ namespace egHLT { template static bool getHandle(const edm::Event& event, const edm::EDGetTokenT& token, edm::Handle& handle); + + const EcalPFRecHitThresholds* thresholds = nullptr; }; template diff --git a/DQMOffline/Trigger/interface/EgHLTOfflineClient.h b/DQMOffline/Trigger/interface/EgHLTOfflineClient.h index 38b8b4f33703b..bc1434a297223 100644 --- a/DQMOffline/Trigger/interface/EgHLTOfflineClient.h +++ b/DQMOffline/Trigger/interface/EgHLTOfflineClient.h @@ -33,7 +33,6 @@ class EgHLTOfflineClient : public DQMEDHarvester { private: - // DQMStore* dbe_; //dbe seems to be the standard name for this, I dont know why. We of course dont own it std::string dirName_; std::vector eleHLTFilterNames_; //names of the filters monitored using electrons to make plots for @@ -71,15 +70,8 @@ class EgHLTOfflineClient : public DQMEDHarvester { explicit EgHLTOfflineClient(const edm::ParameterSet&); ~EgHLTOfflineClient() override; - // virtual void beginJob(); - // virtual void analyze(const edm::Event&, const edm::EventSetup&); //dummy - // virtual void endJob(); void beginRun(const edm::Run& run, const edm::EventSetup& c) override; - // virtual void endRun(const edm::Run& run, const edm::EventSetup& c); - - // virtual void beginLuminosityBlock(const edm::LuminosityBlock& lumiSeg,const edm::EventSetup& context){} // DQM Client Diagnostic - // virtual void endLuminosityBlock(const edm::LuminosityBlock& lumiSeg,const edm::EventSetup& c); void dqmEndJob(DQMStore::IBooker&, DQMStore::IGetter&) override; //performed in the endJob void dqmEndLuminosityBlock(DQMStore::IBooker&, DQMStore::IGetter&, diff --git a/DQMOffline/Trigger/interface/FSQDiJetAve.h b/DQMOffline/Trigger/interface/FSQDiJetAve.h index 4a9d475dcba95..18e21545a5ea2 100644 --- a/DQMOffline/Trigger/interface/FSQDiJetAve.h +++ b/DQMOffline/Trigger/interface/FSQDiJetAve.h @@ -66,8 +66,6 @@ class FSQDiJetAve : public DQMEDAnalyzer { void bookHistograms(DQMStore::IBooker&, edm::Run const& run, edm::EventSetup const& c) override; void dqmBeginRun(edm::Run const& run, edm::EventSetup const& c) override; - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- // diff --git a/DQMOffline/Trigger/plugins/FSQDiJetAve.cc b/DQMOffline/Trigger/plugins/FSQDiJetAve.cc index 40edc9ad5df1f..7543c5d2d018f 100644 --- a/DQMOffline/Trigger/plugins/FSQDiJetAve.cc +++ b/DQMOffline/Trigger/plugins/FSQDiJetAve.cc @@ -852,28 +852,6 @@ void FSQDiJetAve::bookHistograms(DQMStore::IBooker& booker, edm::Run const& run, } } //*/ -// ------------ method called when ending the processing of a run ------------ -/* -void -FSQDiJetAve::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -FSQDiJetAve::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -FSQDiJetAve::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{} -// */ // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void FSQDiJetAve::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { diff --git a/DQMOffline/Trigger/src/EgHLTOffHelper.cc b/DQMOffline/Trigger/src/EgHLTOffHelper.cc index a8a31a7f625b5..2ab709ef01819 100644 --- a/DQMOffline/Trigger/src/EgHLTOffHelper.cc +++ b/DQMOffline/Trigger/src/EgHLTOffHelper.cc @@ -309,7 +309,7 @@ void OffHelper::fillIsolData(const reco::GsfElectron& ele, OffEle::IsolData& iso } else isolData.hltTrksPho = 0.; if (calHLTEmIsol_) - isolData.hltEm = ecalIsolAlgoEB.getEtSum(&ele) + ecalIsolAlgoEE.getEtSum(&ele); + isolData.hltEm = ecalIsolAlgoEB.getEtSum(&ele, *thresholds) + ecalIsolAlgoEE.getEtSum(&ele, *thresholds); else isolData.hltEm = 0.; } @@ -475,7 +475,7 @@ void OffHelper::fillIsolData(const reco::Photon& pho, OffPho::IsolData& isolData } else isolData.hltTrks = 0.; if (calHLTEmIsol_) - isolData.hltEm = ecalIsolAlgoEB.getEtSum(&pho) + ecalIsolAlgoEE.getEtSum(&pho); + isolData.hltEm = ecalIsolAlgoEB.getEtSum(&pho, *thresholds) + ecalIsolAlgoEE.getEtSum(&pho, *thresholds); else isolData.hltEm = 0.; } diff --git a/DQMServices/Core/interface/DQMStore.h b/DQMServices/Core/interface/DQMStore.h index 7413255a48f58..a1ec64fc1c601 100644 --- a/DQMServices/Core/interface/DQMStore.h +++ b/DQMServices/Core/interface/DQMStore.h @@ -554,7 +554,8 @@ namespace dqm { DQMStore* store_ = nullptr; MonitorElementData::Scope scope_ = MonitorElementData::Scope::JOB; - uint64_t moduleID_ = 0; + static constexpr uint64_t kInvalidModuleID = std::numeric_limits::max(); + uint64_t moduleID_ = kInvalidModuleID; edm::LuminosityBlockID runlumi_ = edm::LuminosityBlockID(); }; @@ -684,8 +685,8 @@ namespace dqm { oldid_ = booker_.setModuleID(newid); oldscope_ = booker_.setScope(newscope); oldrunlumi_ = booker_.setRunLumi(newrunlumi); - assert(newid != 0 || !"moduleID must be set for normal booking transaction"); - assert(oldid_ == 0 || !"Nested booking transaction?"); + assert(newid != kInvalidModuleID || !"moduleID must be set for normal booking transaction"); + assert(oldid_ == kInvalidModuleID || !"Nested booking transaction?"); } ~ModuleIdScope() { booker_.setModuleID(oldid_); diff --git a/DQMServices/FwkIO/plugins/DQMRootSource.cc b/DQMServices/FwkIO/plugins/DQMRootSource.cc index b2019ddf00cb9..fc99dd7745882 100644 --- a/DQMServices/FwkIO/plugins/DQMRootSource.cc +++ b/DQMServices/FwkIO/plugins/DQMRootSource.cc @@ -330,7 +330,7 @@ class DQMRootSource : public edm::PuttableSourceBase, DQMTTreeIO { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - edm::InputSource::ItemType getNextItemType() override; + edm::InputSource::ItemTypeInfo getNextItemType() override; std::shared_ptr readFile_() override; std::shared_ptr readRunAuxiliary_() override; @@ -440,7 +440,7 @@ DQMRootSource::DQMRootSource(edm::ParameterSet const& iPSet, const edm::InputSou {"LUMI", MonitorElementData::Scope::LUMI}, {"RUN", MonitorElementData::Scope::RUN}, {"JOB", MonitorElementData::Scope::JOB}}[iPSet.getUntrackedParameter("reScope", "JOB")]), - m_nextItemType(edm::InputSource::IsFile), + m_nextItemType(edm::InputSource::ItemType::IsFile), m_treeReaders(kNIndicies, std::shared_ptr()), m_currentIndex(0), m_openFiles(std::vector()), @@ -448,7 +448,7 @@ DQMRootSource::DQMRootSource(edm::ParameterSet const& iPSet, const edm::InputSou edm::sortAndRemoveOverlaps(m_lumisToProcess); if (m_catalog.fileNames(0).empty()) { - m_nextItemType = edm::InputSource::IsStop; + m_nextItemType = edm::InputSource::ItemType::IsStop; } else { m_treeReaders[kIntIndex].reset(new TreeSimpleReader(MonitorElementData::Kind::INT, m_rescope)); m_treeReaders[kFloatIndex].reset(new TreeSimpleReader(MonitorElementData::Kind::REAL, m_rescope)); @@ -483,7 +483,7 @@ DQMRootSource::~DQMRootSource() { // member functions // -edm::InputSource::ItemType DQMRootSource::getNextItemType() { return m_nextItemType; } +edm::InputSource::ItemTypeInfo DQMRootSource::getNextItemType() { return m_nextItemType; } // We will read the metadata of all files and fill m_fileMetadatas vector std::shared_ptr DQMRootSource::readFile_() { @@ -630,9 +630,9 @@ std::shared_ptr DQMRootSource::readFile_() { // Stop if there's nothing to process. Otherwise start the run. if (m_fileMetadatas.empty()) - m_nextItemType = edm::InputSource::IsStop; + m_nextItemType = edm::InputSource::ItemType::IsStop; else - m_nextItemType = edm::InputSource::IsRun; + m_nextItemType = edm::InputSource::ItemType::IsRun; // We have to return something but not sure why return std::make_shared(); @@ -728,18 +728,18 @@ bool DQMRootSource::isRunOrLumiTransition() const { void DQMRootSource::readNextItemType() { if (m_currentIndex == 0) { - m_nextItemType = edm::InputSource::IsRun; + m_nextItemType = edm::InputSource::ItemType::IsRun; } else if (m_currentIndex > m_fileMetadatas.size() - 1) { // We reached the end - m_nextItemType = edm::InputSource::IsStop; + m_nextItemType = edm::InputSource::ItemType::IsStop; } else { FileMetadata previousMetadata = m_fileMetadatas[m_currentIndex - 1]; FileMetadata metadata = m_fileMetadatas[m_currentIndex]; if (previousMetadata.m_run != metadata.m_run) { - m_nextItemType = edm::InputSource::IsRun; + m_nextItemType = edm::InputSource::ItemType::IsRun; } else if (previousMetadata.m_lumi != metadata.m_lumi) { - m_nextItemType = edm::InputSource::IsLumi; + m_nextItemType = edm::InputSource::ItemType::IsLumi; } } } diff --git a/DQMServices/StreamerIO/plugins/DQMProtobufReader.cc b/DQMServices/StreamerIO/plugins/DQMProtobufReader.cc index e7cfb42014a73..3e761778d60b4 100644 --- a/DQMServices/StreamerIO/plugins/DQMProtobufReader.cc +++ b/DQMServices/StreamerIO/plugins/DQMProtobufReader.cc @@ -38,7 +38,7 @@ DQMProtobufReader::DQMProtobufReader(edm::ParameterSet const& pset, edm::InputSo produces("DQMGenerationRecoLumi"); } -edm::InputSource::ItemType DQMProtobufReader::getNextItemType() { +edm::InputSource::ItemTypeInfo DQMProtobufReader::getNextItemType() { typedef DQMFileIterator::State State; typedef DQMFileIterator::LumiEntry LumiEntry; @@ -49,23 +49,23 @@ edm::InputSource::ItemType DQMProtobufReader::getNextItemType() { if (edm::shutdown_flag.load()) { fiterator_.logFileAction("Shutdown flag was set, shutting down."); - return InputSource::IsStop; + return InputSource::ItemType::IsStop; } // check for end of run file and force quit if (flagEndOfRunKills_ && (fiterator_.state() != State::OPEN)) { - return InputSource::IsStop; + return InputSource::ItemType::IsStop; } // check for end of run and quit if everything has been processed. // this is the clean exit if ((!fiterator_.lumiReady()) && (fiterator_.state() == State::EOR)) { - return InputSource::IsStop; + return InputSource::ItemType::IsStop; } // skip to the next file if we have no files openned yet if (fiterator_.lumiReady()) { - return InputSource::IsLumi; + return InputSource::ItemType::IsLumi; } fiterator_.delay(); @@ -73,7 +73,7 @@ edm::InputSource::ItemType DQMProtobufReader::getNextItemType() { // IsSynchronize state // // comment out in order to block at this level - // return InputSource::IsSynchronize; + // return InputSource::ItemType::IsSynchronize; } // this is unreachable diff --git a/DQMServices/StreamerIO/plugins/DQMProtobufReader.h b/DQMServices/StreamerIO/plugins/DQMProtobufReader.h index acea989ac9fa4..59b459246d84d 100644 --- a/DQMServices/StreamerIO/plugins/DQMProtobufReader.h +++ b/DQMServices/StreamerIO/plugins/DQMProtobufReader.h @@ -21,7 +21,7 @@ namespace dqmservices { private: void load(DQMStore* store, std::string filename); - edm::InputSource::ItemType getNextItemType() override; + edm::InputSource::ItemTypeInfo getNextItemType() override; std::shared_ptr readRunAuxiliary_() override; std::shared_ptr readLuminosityBlockAuxiliary_() override; void readRun_(edm::RunPrincipal& rpCache) override; diff --git a/DataFormats/EcalDigi/interface/EBDataFrame_Ph2.h b/DataFormats/EcalDigi/interface/EBDataFrame_Ph2.h new file mode 100644 index 0000000000000..aaaf3f8f8ef1b --- /dev/null +++ b/DataFormats/EcalDigi/interface/EBDataFrame_Ph2.h @@ -0,0 +1,28 @@ +#ifndef DataFormats_EcalDigi_EBDataFrame_Ph2_h +#define DataFormats_EcalDigi_EBDataFrame_Ph2_h + +#include "DataFormats/EcalDetId/interface/EBDetId.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h" +#include + +/** \class EBDataFrame + +*/ +class EBDataFrame_Ph2 : public EcalDataFrame_Ph2 { +public: + typedef EBDetId key_type; + typedef EcalDataFrame_Ph2 Base; + + EBDataFrame_Ph2() {} + + EBDataFrame_Ph2(edm::DataFrame const& base) : Base(base) {} + EBDataFrame_Ph2(EcalDataFrame_Ph2 const& base) : Base(base) {} + + ~EBDataFrame_Ph2() override {} + + key_type id() const { return Base::id(); } +}; + +std::ostream& operator<<(std::ostream&, const EBDataFrame_Ph2&); + +#endif diff --git a/DataFormats/EcalDigi/interface/EcalDigiCollections.h b/DataFormats/EcalDigi/interface/EcalDigiCollections.h index f9a79f9830972..6e4a04066a1f3 100644 --- a/DataFormats/EcalDigi/interface/EcalDigiCollections.h +++ b/DataFormats/EcalDigi/interface/EcalDigiCollections.h @@ -2,12 +2,14 @@ #define DIGIECAL_ECALDIGICOLLECTION_H #include "DataFormats/EcalDigi/interface/EBDataFrame.h" +#include "DataFormats/EcalDigi/interface/EBDataFrame_Ph2.h" #include "DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h" #include "DataFormats/EcalDigi/interface/EEDataFrame.h" #include "DataFormats/EcalDigi/interface/ESDataFrame.h" #include "DataFormats/EcalDigi/interface/EcalTimeDigi.h" #include "DataFormats/EcalDigi/interface/EcalTriggerPrimitiveDigi.h" #include "DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveDigi.h" +#include "DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveDigi.h" #include "DataFormats/EcalDigi/interface/EcalTrigPrimCompactColl.h" #include "DataFormats/EcalDigi/interface/EcalPseudoStripInputDigi.h" #include "DataFormats/EcalDigi/interface/EBSrFlag.h" @@ -120,6 +122,7 @@ inline void swap(EBDigiCollectionPh2& lhs, EBDigiCollectionPh2& rhs) { lhs.swap( typedef edm::SortedCollection EcalTimeDigiCollection; typedef edm::SortedCollection EcalTrigPrimDigiCollection; typedef edm::SortedCollection EcalEBTrigPrimDigiCollection; +typedef edm::SortedCollection EcalEBPhase2TrigPrimDigiCollection; typedef edm::SortedCollection EcalPSInputDigiCollection; typedef edm::SortedCollection EBSrFlagCollection; diff --git a/DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveDigi.h b/DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveDigi.h new file mode 100644 index 0000000000000..82293612f16d7 --- /dev/null +++ b/DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveDigi.h @@ -0,0 +1,63 @@ +#ifndef DataFormats_EcalDigi_EcalEBPhase2TriggerPrimitiveDigi_h +#define DataFormats_EcalDigi_EcalEBPhase2TriggerPrimitiveDigi_h + +#include +#include +#include "DataFormats/EcalDetId/interface/EBDetId.h" +#include "DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveSample.h" + +/** \class EcalEBPhase2TriggerPrimitiveDigi +\author N. Marinelli - Univ. of Notre Dame + + +*/ + +class EcalEBPhase2TriggerPrimitiveDigi { +public: + typedef EBDetId key_type; ///< For the sorted collection + + EcalEBPhase2TriggerPrimitiveDigi(); // for persistence + EcalEBPhase2TriggerPrimitiveDigi(const EBDetId& id); + + void swap(EcalEBPhase2TriggerPrimitiveDigi& rh) { + std::swap(id_, rh.id_); + std::swap(size_, rh.size_); + std::swap(data_, rh.data_); + } + + const EBDetId& id() const { return id_; } + int size() const { return size_; } + + const EcalEBPhase2TriggerPrimitiveSample& operator[](int i) const { return data_[i]; } + const EcalEBPhase2TriggerPrimitiveSample& sample(int i) const { return data_[i]; } + + void setSize(int size); + void setSample(int i, const EcalEBPhase2TriggerPrimitiveSample& sam); + void setSampleValue(int i, uint16_t value) { data_[i].setValue(value); } + + /// get the 12 bits Et of interesting sample + int encodedEt() const; + + /// Spike flag + bool l1aSpike() const; + + /// Time info + int time() const; + + /// True if debug mode (# of samples > 1) + bool isDebug() const; + + /// Gets the interesting sample + int sampleOfInterest() const; + +private: + EBDetId id_; + int size_; + std::vector data_; +}; + +inline void swap(EcalEBPhase2TriggerPrimitiveDigi& lh, EcalEBPhase2TriggerPrimitiveDigi& rh) { lh.swap(rh); } + +std::ostream& operator<<(std::ostream& s, const EcalEBPhase2TriggerPrimitiveDigi& digi); + +#endif diff --git a/DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveSample.h b/DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveSample.h new file mode 100644 index 0000000000000..3cc7806b1b275 --- /dev/null +++ b/DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveSample.h @@ -0,0 +1,49 @@ +#ifndef DataFormats_EcalDig_EcalEBPhase2TriggerPrimitiveSample_h +#define DataFormats_EcalDig_EcalEBPhase2TriggerPrimitiveSample_h + +#include +#include + +/** \class EcalEBPhase2TriggerPrimitiveSample +\author N. Marinelli - Univ of Notre Dame + +*/ + +class EcalEBPhase2TriggerPrimitiveSample { +public: + EcalEBPhase2TriggerPrimitiveSample(); + EcalEBPhase2TriggerPrimitiveSample(uint32_t data); + EcalEBPhase2TriggerPrimitiveSample(int encodedEt); + EcalEBPhase2TriggerPrimitiveSample(int encodedEt, bool isASpike); + EcalEBPhase2TriggerPrimitiveSample(int encodedEt, bool isASpike, int timing); + + ///Set data + void setValue(uint32_t data) { theSample_ = data; } + // The sample is a 18 bit word defined as: + // + // o o o o o o o o o o o o o o o o o o + // |________| |_______________________| + // ~60ps res spike Et + // time info flag + // + + /// get the raw word + uint32_t raw() const { return theSample_ & 0x3ffff; } + + /// get the encoded Et (12 bits) + int encodedEt() const { return (theSample_ & 0x3ffff) & 0xFFF; } + + bool l1aSpike() const { return (theSample_ & 0x3ffff & 0x1000) != 0; } + + int time() const { return (theSample_ & 0x3ffff) >> 13; } + + /// for streaming + uint32_t operator()() { return theSample_ & 0x3ffff; } + +private: + uint32_t theSample_; +}; + +std::ostream& operator<<(std::ostream& s, const EcalEBPhase2TriggerPrimitiveSample& samp); + +#endif diff --git a/DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveSample.h b/DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveSample.h index 105eac61088db..271f76c329d9d 100644 --- a/DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveSample.h +++ b/DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveSample.h @@ -21,8 +21,8 @@ class EcalEBTriggerPrimitiveSample { void setValue(uint16_t data) { theSample = data; } // The sample is a 16 bit word defined as: // - // o o o o o o o o o o o o o o o o - // |________| |____________________| + // o o o o o o o o o o o o o o o o + // |________| |_______________________| // ~60ps res spike Et // time info flag // @@ -31,7 +31,7 @@ class EcalEBTriggerPrimitiveSample { uint16_t raw() const { return theSample; } /// get the encoded Et (10 bits) - int encodedEt() const { return theSample & 0x3FF; } + int encodedEt() const { return theSample & 0x3ff; } bool l1aSpike() const { return (theSample & 0x400) != 0; } diff --git a/DataFormats/EcalDigi/src/EBDataFrame_Ph2.cc b/DataFormats/EcalDigi/src/EBDataFrame_Ph2.cc new file mode 100644 index 0000000000000..f48a09cf0eb88 --- /dev/null +++ b/DataFormats/EcalDigi/src/EBDataFrame_Ph2.cc @@ -0,0 +1,10 @@ +#include "DataFormats/EcalDigi/interface/EBDataFrame_Ph2.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include + +std::ostream& operator<<(std::ostream& s, const EBDataFrame_Ph2& digi) { + s << digi.id() << " " << digi.size() << " samples " << std::endl; + for (int i = 0; i < digi.size(); i++) + s << " " << digi[i] << std::endl; + return s; +} diff --git a/DataFormats/EcalDigi/src/EcalEBPhase2TriggerPrimitiveDigi.cc b/DataFormats/EcalDigi/src/EcalEBPhase2TriggerPrimitiveDigi.cc new file mode 100644 index 0000000000000..08be20ff807e3 --- /dev/null +++ b/DataFormats/EcalDigi/src/EcalEBPhase2TriggerPrimitiveDigi.cc @@ -0,0 +1,61 @@ +#include "DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveDigi.h" +#include +#include + +static constexpr int MAXSAMPLES = 20; +// This is the number of digi samples one wants to put in the TP digis. In Phase I was 5, but this setting was used. In the end in Phase I one one sample, corresponding to BC0 was filled. For Phase2 we have not decided yet. We leave this setting as it is while we decide what to do + +EcalEBPhase2TriggerPrimitiveDigi::EcalEBPhase2TriggerPrimitiveDigi() : size_(0), data_(MAXSAMPLES) {} + +EcalEBPhase2TriggerPrimitiveDigi::EcalEBPhase2TriggerPrimitiveDigi(const EBDetId& id) + : id_(id), size_(0), data_(MAXSAMPLES) {} + +void EcalEBPhase2TriggerPrimitiveDigi::setSample(int i, const EcalEBPhase2TriggerPrimitiveSample& sam) { + data_[i] = sam; +} + +int EcalEBPhase2TriggerPrimitiveDigi::sampleOfInterest() const { + // sample of interest to be save in the TP digis + if (size_ == 1) + return 0; + else if (size_ == 5) + return 2; + else + return -1; +} + +/// get the encoded/compressed Et of interesting sample +int EcalEBPhase2TriggerPrimitiveDigi::encodedEt() const { + int sample = sampleOfInterest(); + if (sample != -1) + return data_[sample].encodedEt(); + else + return -1; +} + +bool EcalEBPhase2TriggerPrimitiveDigi::l1aSpike() const { + int sample = sampleOfInterest(); + if (sample != -1) + return data_[sample].l1aSpike(); + else + return -1; +} + +int EcalEBPhase2TriggerPrimitiveDigi::time() const { + int sample = sampleOfInterest(); + if (sample != -1) + return data_[sample].time(); + else + return -1; +} + +bool EcalEBPhase2TriggerPrimitiveDigi::isDebug() const { return (size_ > 1); } + +void EcalEBPhase2TriggerPrimitiveDigi::setSize(int size) { size_ = std::clamp(size_, 0, MAXSAMPLES); } + +std::ostream& operator<<(std::ostream& s, const EcalEBPhase2TriggerPrimitiveDigi& digi) { + s << digi.id() << " " << digi.size() << " samples " << std::endl; + for (int i = 0; i < digi.size(); i++) + s << " " << digi.sample(i) << std::endl; + return s; +} diff --git a/DataFormats/EcalDigi/src/EcalEBPhase2TriggerPrimitiveSample.cc b/DataFormats/EcalDigi/src/EcalEBPhase2TriggerPrimitiveSample.cc new file mode 100644 index 0000000000000..c52762709801b --- /dev/null +++ b/DataFormats/EcalDigi/src/EcalEBPhase2TriggerPrimitiveSample.cc @@ -0,0 +1,26 @@ +#include "DataFormats/EcalDigi/interface/EcalEBPhase2TriggerPrimitiveSample.h" +#include + +EcalEBPhase2TriggerPrimitiveSample::EcalEBPhase2TriggerPrimitiveSample() : theSample_(0) {} +EcalEBPhase2TriggerPrimitiveSample::EcalEBPhase2TriggerPrimitiveSample(uint32_t data) : theSample_(data) { + theSample_ = theSample_ & 0x3ffff; +} + +EcalEBPhase2TriggerPrimitiveSample::EcalEBPhase2TriggerPrimitiveSample(int encodedEt, bool isASpike) { + theSample_ = (encodedEt & 0xFFF) | ((isASpike) ? (0x1000) : (0)); + theSample_ = theSample_ & 0x3ffff; +} + +EcalEBPhase2TriggerPrimitiveSample::EcalEBPhase2TriggerPrimitiveSample(int encodedEt, bool isASpike, int timing) { + theSample_ = (encodedEt & 0xFFF) | ((isASpike) ? (0x1000) : (0)) | timing << 13; + theSample_ = theSample_ & 0x3ffff; +} + +EcalEBPhase2TriggerPrimitiveSample::EcalEBPhase2TriggerPrimitiveSample(int encodedEt) { + theSample_ = encodedEt & 0xFFF; + theSample_ = theSample_ & 0x3ffff; +} + +std::ostream& operator<<(std::ostream& s, const EcalEBPhase2TriggerPrimitiveSample& samp) { + return s << "ET=" << samp.encodedEt() << ", isASpike=" << samp.l1aSpike() << " timing= " << samp.time(); +} diff --git a/DataFormats/EcalDigi/src/EcalEBTriggerPrimitiveSample.cc b/DataFormats/EcalDigi/src/EcalEBTriggerPrimitiveSample.cc index 2ff8b7b7f271c..d5b6b4010a91c 100644 --- a/DataFormats/EcalDigi/src/EcalEBTriggerPrimitiveSample.cc +++ b/DataFormats/EcalDigi/src/EcalEBTriggerPrimitiveSample.cc @@ -1,4 +1,5 @@ #include "DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveSample.h" +#include EcalEBTriggerPrimitiveSample::EcalEBTriggerPrimitiveSample() : theSample(0) {} EcalEBTriggerPrimitiveSample::EcalEBTriggerPrimitiveSample(uint16_t data) : theSample(data) {} diff --git a/DataFormats/EcalDigi/src/classes_def.xml b/DataFormats/EcalDigi/src/classes_def.xml index f3dd954167148..539e51c5acc49 100644 --- a/DataFormats/EcalDigi/src/classes_def.xml +++ b/DataFormats/EcalDigi/src/classes_def.xml @@ -11,6 +11,9 @@ + + + @@ -20,12 +23,18 @@ + + + + + + @@ -69,6 +78,7 @@ + @@ -114,6 +124,8 @@ + + @@ -126,6 +138,7 @@ + diff --git a/DataFormats/FEDRawData/interface/FEDRawData.h b/DataFormats/FEDRawData/interface/FEDRawData.h index 80ee9bcf7d9b6..3fecaaa304a2a 100644 --- a/DataFormats/FEDRawData/interface/FEDRawData.h +++ b/DataFormats/FEDRawData/interface/FEDRawData.h @@ -26,8 +26,8 @@ class FEDRawData { /// Ctor specifying the size to be preallocated, in bytes. /// It is required that the size is a multiple of the size of a FED - /// word (8 bytes) - FEDRawData(size_t newsize); + /// word (8 bytes default) + FEDRawData(size_t newsize, size_t wordsize = 8); /// Copy constructor FEDRawData(const FEDRawData &); @@ -48,8 +48,8 @@ class FEDRawData { size_t size() const { return data_.size(); } /// Resize to the specified size in bytes. It is required that - /// the size is a multiple of the size of a FED word (8 bytes) - void resize(size_t newsize); + /// the size is a multiple of the size of a FED word (8 bytes default) + void resize(size_t newsize, size_t wordsize = 8); private: Data data_; diff --git a/DataFormats/FEDRawData/src/FEDRawData.cc b/DataFormats/FEDRawData/src/FEDRawData.cc index 28bbaa55bd19f..4f617d1e2a46a 100644 --- a/DataFormats/FEDRawData/src/FEDRawData.cc +++ b/DataFormats/FEDRawData/src/FEDRawData.cc @@ -13,10 +13,10 @@ using namespace std; FEDRawData::FEDRawData() {} -FEDRawData::FEDRawData(size_t newsize) : data_(newsize) { - if (newsize % 8 != 0) - throw cms::Exception("DataCorrupt") << "FEDRawData::resize: " << newsize << " is not a multiple of 8 bytes." - << endl; +FEDRawData::FEDRawData(size_t newsize, size_t wordsize) : data_(newsize) { + if (newsize % wordsize != 0) + throw cms::Exception("DataCorrupt") << "FEDRawData::resize: " << newsize << " is not a multiple of " << wordsize + << " bytes." << endl; } FEDRawData::FEDRawData(const FEDRawData &in) : data_(in.data_) {} @@ -25,13 +25,13 @@ const unsigned char *FEDRawData::data() const { return data_.data(); } unsigned char *FEDRawData::data() { return data_.data(); } -void FEDRawData::resize(size_t newsize) { +void FEDRawData::resize(size_t newsize, size_t wordsize) { if (size() == newsize) return; data_.resize(newsize); - if (newsize % 8 != 0) - throw cms::Exception("DataCorrupt") << "FEDRawData::resize: " << newsize << " is not a multiple of 8 bytes." - << endl; + if (newsize % wordsize != 0) + throw cms::Exception("DataCorrupt") << "FEDRawData::resize: " << newsize << " is not a multiple of " << wordsize + << " bytes." << endl; } diff --git a/DataFormats/HLTReco/interface/TriggerEventWithRefs.h b/DataFormats/HLTReco/interface/TriggerEventWithRefs.h index a99105a311d6f..f9e0c6877438b 100644 --- a/DataFormats/HLTReco/interface/TriggerEventWithRefs.h +++ b/DataFormats/HLTReco/interface/TriggerEventWithRefs.h @@ -63,6 +63,7 @@ namespace trigger { size_type l1tp2etsum_; size_type l1ttau_; size_type l1tetsum_; + size_type l1tp2gtcand_; /// constructor TriggerFilterObject() @@ -96,7 +97,8 @@ namespace trigger { l1tpftrack_(0), l1tp2etsum_(0), l1ttau_(0), - l1tetsum_(0) { + l1tetsum_(0), + l1tp2gtcand_(0) { filterTag_ = edm::InputTag().encode(); } TriggerFilterObject(const edm::InputTag& filterTag, @@ -129,7 +131,8 @@ namespace trigger { size_type l1tpftrack, size_type l1tp2etsum, size_type l1ttau, - size_type l1tetsum) + size_type l1tetsum, + size_type l1tp2gtcand) : filterTag_(filterTag.encode()), photons_(np), electrons_(ne), @@ -160,7 +163,8 @@ namespace trigger { l1tpftrack_(l1tpftrack), l1tp2etsum_(l1tp2etsum), l1ttau_(l1ttau), - l1tetsum_(l1tetsum) {} + l1tetsum_(l1tetsum), + l1tp2gtcand_(l1tp2gtcand) {} }; /// data members @@ -213,7 +217,8 @@ namespace trigger { addObjects(tfowr.l1tpftrackIds(), tfowr.l1tpftrackRefs()), addObjects(tfowr.l1tp2etsumIds(), tfowr.l1tp2etsumRefs()), addObjects(tfowr.l1ttauIds(), tfowr.l1ttauRefs()), - addObjects(tfowr.l1tetsumIds(), tfowr.l1tetsumRefs())) + addObjects(tfowr.l1tetsumIds(), tfowr.l1tetsumRefs()), + addObjects(tfowr.l1tp2gtcandIds(), tfowr.l1tp2gtcandRefs())) ); } @@ -415,6 +420,12 @@ namespace trigger { return std::pair(begin, end); } + std::pair l1tp2gtcandSlice(size_type filter) const { + const size_type begin(filter == 0 ? 0 : filterObjects_.at(filter - 1).l1tp2gtcand_); + const size_type end(filterObjects_.at(filter).l1tp2gtcand_); + return std::pair(begin, end); + } + /// extract Refs for a specific filter and of specific physics type void getObjects(size_type filter, Vids& ids, VRphoton& photons) const { @@ -747,6 +758,17 @@ namespace trigger { const size_type end(l1tetsumSlice(filter).second); TriggerRefsCollections::getObjects(id, l1tetsum, begin, end); } + + void getObjects(size_type filter, Vids& ids, VRl1tp2gtcand& l1tp2gtcand) const { + const size_type begin(l1tp2gtcandSlice(filter).first); + const size_type end(l1tp2gtcandSlice(filter).second); + TriggerRefsCollections::getObjects(ids, l1tp2gtcand, begin, end); + } + void getObjects(size_type filter, int id, VRl1tp2gtcand& l1tp2gtcand) const { + const size_type begin(l1tp2gtcandSlice(filter).first); + const size_type end(l1tp2gtcandSlice(filter).second); + TriggerRefsCollections::getObjects(id, l1tp2gtcand, begin, end); + } }; } // namespace trigger diff --git a/DataFormats/HLTReco/interface/TriggerRefsCollections.h b/DataFormats/HLTReco/interface/TriggerRefsCollections.h index 73ba440151d8b..0fced2acffa85 100644 --- a/DataFormats/HLTReco/interface/TriggerRefsCollections.h +++ b/DataFormats/HLTReco/interface/TriggerRefsCollections.h @@ -44,6 +44,7 @@ #include "DataFormats/L1Trigger/interface/Jet.h" #include "DataFormats/L1Trigger/interface/Tau.h" #include "DataFormats/L1Trigger/interface/EtSum.h" +#include "DataFormats/L1Trigger/interface/P2GTCandidate.h" #include "DataFormats/L1TMuonPhase2/interface/TrackerMuon.h" #include "DataFormats/L1TCorrelator/interface/TkElectron.h" #include "DataFormats/L1TCorrelator/interface/TkElectronFwd.h" @@ -103,6 +104,8 @@ namespace trigger { typedef std::vector VRpftau; typedef std::vector VRpfmet; + typedef l1t::P2GTCandidateVectorRef VRl1tp2gtcand; + class TriggerRefsCollections { /// data members private: @@ -173,6 +176,9 @@ namespace trigger { Vids pfmetIds_; VRpfmet pfmetRefs_; + Vids l1tp2gtcandIds_; + VRl1tp2gtcand l1tp2gtcandRefs_; + /// methods public: /// constructors @@ -241,7 +247,10 @@ namespace trigger { pftauIds_(), pftauRefs_(), pfmetIds_(), - pfmetRefs_() {} + pfmetRefs_(), + + l1tp2gtcandIds_(), + l1tp2gtcandRefs_() {} /// utility void swap(TriggerRefsCollections& other) { @@ -310,6 +319,9 @@ namespace trigger { std::swap(pftauRefs_, other.pftauRefs_); std::swap(pfmetIds_, other.pfmetIds_); std::swap(pfmetRefs_, other.pfmetRefs_); + + std::swap(l1tp2gtcandIds_, other.l1tp2gtcandIds_); + std::swap(l1tp2gtcandRefs_, other.l1tp2gtcandRefs_); } /// setters for L3 collections: (id=physics type, and Ref) @@ -436,6 +448,10 @@ namespace trigger { pfmetIds_.push_back(id); pfmetRefs_.push_back(ref); } + void addObject(int id, const l1t::P2GTCandidateRef& ref) { + l1tp2gtcandIds_.push_back(id); + l1tp2gtcandRefs_.push_back(ref); + } /// size_type addObjects(const Vids& ids, const VRphoton& refs) { @@ -622,6 +638,12 @@ namespace trigger { pfmetRefs_.insert(pfmetRefs_.end(), refs.begin(), refs.end()); return pfmetIds_.size(); } + size_type addObjects(const Vids& ids, const VRl1tp2gtcand& refs) { + assert(ids.size() == refs.size()); + l1tp2gtcandIds_.insert(l1tp2gtcandIds_.end(), ids.begin(), ids.end()); + l1tp2gtcandRefs_.insert(l1tp2gtcandRefs_.end(), refs.begin(), refs.end()); + return l1tp2gtcandIds_.size(); + } /// various physics-level getters: void getObjects(Vids& ids, VRphoton& refs) const { getObjects(ids, refs, 0, photonIds_.size()); } @@ -1675,6 +1697,41 @@ namespace trigger { return; } + void getObjects(Vids& ids, VRl1tp2gtcand& refs) const { getObjects(ids, refs, 0, l1tp2gtcandIds_.size()); } + void getObjects(Vids& ids, VRl1tp2gtcand& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tp2gtcandIds_.size()); + const size_type n(end - begin); + ids.resize(n); + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + ids[j] = l1tp2gtcandIds_[i]; + refs[j] = l1tp2gtcandRefs_[i]; + ++j; + } + } + void getObjects(int id, VRl1tp2gtcand& refs) const { getObjects(id, refs, 0, l1tp2gtcandIds_.size()); } + void getObjects(int id, VRl1tp2gtcand& refs, size_type begin, size_type end) const { + assert(begin <= end); + assert(end <= l1tp2gtcandIds_.size()); + size_type n(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tp2gtcandIds_[i]) { + ++n; + } + } + refs.resize(n); + size_type j(0); + for (size_type i = begin; i != end; ++i) { + if (id == l1tp2gtcandIds_[i]) { + refs[j] = l1tp2gtcandRefs_[i]; + ++j; + } + } + return; + } + /// low-level getters for data members size_type photonSize() const { return photonIds_.size(); } const Vids& photonIds() const { return photonIds_; } @@ -1797,6 +1854,10 @@ namespace trigger { size_type l1tetsumSize() const { return l1tetsumIds_.size(); } const Vids& l1tetsumIds() const { return l1tetsumIds_; } const VRl1tetsum& l1tetsumRefs() const { return l1tetsumRefs_; } + + size_type l1tp2gtcandSize() const { return l1tp2gtcandIds_.size(); } + const Vids& l1tp2gtcandIds() const { return l1tp2gtcandIds_; } + const VRl1tp2gtcand& l1tp2gtcandRefs() const { return l1tp2gtcandRefs_; } }; // picked up via argument dependent lookup, e-g- by boost::swap() diff --git a/DataFormats/HLTReco/src/classes_def.xml b/DataFormats/HLTReco/src/classes_def.xml index c0da653aa6527..a104854bce32d 100644 --- a/DataFormats/HLTReco/src/classes_def.xml +++ b/DataFormats/HLTReco/src/classes_def.xml @@ -43,7 +43,8 @@ - + + @@ -51,7 +52,8 @@ - + + @@ -69,7 +71,8 @@ - + + @@ -78,7 +81,8 @@ - + + diff --git a/DataFormats/L1Scouting/BuildFile.xml b/DataFormats/L1Scouting/BuildFile.xml new file mode 100644 index 0000000000000..0f37f92979ed5 --- /dev/null +++ b/DataFormats/L1Scouting/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/DataFormats/L1Scouting/README.md b/DataFormats/L1Scouting/README.md new file mode 100644 index 0000000000000..c25fbf3387ee8 --- /dev/null +++ b/DataFormats/L1Scouting/README.md @@ -0,0 +1,8 @@ +# DataFormats/L1Scouting + +## L1 Trigger Scouting data formats + +Any changes to the L1 scouting data formats must be backwards compatible. +In order to ensure the L1 Scouting formats can be read by future CMSSW releases, +there is a `TestWriteL1ScoutingDataFormats` unit test, which makes use of the `TestReadL1Scouting` analyzer and the `TestWriteL1Scouting` producer. +The unit test checks that objects can be written and read properly. \ No newline at end of file diff --git a/DataFormats/L1Scouting/interface/L1ScoutingCalo.h b/DataFormats/L1Scouting/interface/L1ScoutingCalo.h new file mode 100644 index 0000000000000..53913fe840b0b --- /dev/null +++ b/DataFormats/L1Scouting/interface/L1ScoutingCalo.h @@ -0,0 +1,198 @@ +#ifndef DataFormats_L1Scouting_L1ScoutingCalo_h +#define DataFormats_L1Scouting_L1ScoutingCalo_h + +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +namespace l1ScoutingRun3 { + + class CaloObject { + public: + CaloObject() : hwEt_(0), hwEta_(0), hwPhi_(0), hwIso_(0) {} + + CaloObject(int hwEt, int hwEta, int hwPhi, int iso) : hwEt_(hwEt), hwEta_(hwEta), hwPhi_(hwPhi), hwIso_(iso) {} + + void setHwEt(int hwEt) { hwEt_ = hwEt; } + void setHwEta(int hwEta) { hwEta_ = hwEta; } + void setHwPhi(int hwPhi) { hwPhi_ = hwPhi; } + void setHwIso(int hwIso) { hwIso_ = hwIso; } + + int hwEt() const { return hwEt_; } + int hwEta() const { return hwEta_; } + int hwPhi() const { return hwPhi_; } + int hwIso() const { return hwIso_; } + + private: + int hwEt_; + int hwEta_; + int hwPhi_; + int hwIso_; + }; + + class Jet : public CaloObject { + public: + Jet() : CaloObject(0, 0, 0, 0) {} + + Jet(int hwEt, int hwEta, int hwPhi, int hwQual) : CaloObject(hwEt, hwEta, hwPhi, hwQual) {} + + // store quality instead of iso + void setHwQual(int hwQual) { setHwIso(hwQual); } + int hwQual() const { return hwIso(); } + }; + + class EGamma : public CaloObject { + public: + EGamma() : CaloObject(0, 0, 0, 0) {} + + EGamma(int hwEt, int hwEta, int hwPhi, int iso) : CaloObject(hwEt, hwEta, hwPhi, iso) {} + }; + + class Tau : public CaloObject { + public: + Tau() : CaloObject(0, 0, 0, 0) {} + + Tau(int hwEt, int hwEta, int hwPhi, int iso) : CaloObject(hwEt, hwEta, hwPhi, iso) {} + }; + + class BxSums { + public: + BxSums() + : hwTotalEt_(0), + hwTotalEtEm_(0), + hwTotalHt_(0), + hwMissEt_(0), + hwMissEtPhi_(0), + hwMissHt_(0), + hwMissHtPhi_(0), + hwMissEtHF_(0), + hwMissEtHFPhi_(0), + hwMissHtHF_(0), + hwMissHtHFPhi_(0), + hwAsymEt_(0), + hwAsymHt_(0), + hwAsymEtHF_(0), + hwAsymHtHF_(0), + minBiasHFP0_(0), + minBiasHFM0_(0), + minBiasHFP1_(0), + minBiasHFM1_(0), + towerCount_(0), + centrality_(0) {} + + BxSums(int hwTotalEt, + int hwTotalEtEm, + int hwTotalHt, + int hwMissEt, + int hwMissEtPhi, + int hwMissHt, + int hwMissHtPhi, + int hwMissEtHF, + int hwMissEtHFPhi, + int hwMissHtHF, + int hwMissHtHFPhi, + int hwAsymEt, + int hwAsymHt, + int hwAsymEtHF, + int hwAsymHtHF, + int minBiasHFP0, + int minBiasHFM0, + int minBiasHFP1, + int minBiasHFM1, + int towerCount, + int centrality) + : hwTotalEt_(hwTotalEt), + hwTotalEtEm_(hwTotalEtEm), + hwTotalHt_(hwTotalHt), + hwMissEt_(hwMissEt), + hwMissEtPhi_(hwMissEtPhi), + hwMissHt_(hwMissHt), + hwMissHtPhi_(hwMissHtPhi), + hwMissEtHF_(hwMissEtHF), + hwMissEtHFPhi_(hwMissEtHFPhi), + hwMissHtHF_(hwMissHtHF), + hwMissHtHFPhi_(hwMissHtHFPhi), + hwAsymEt_(hwAsymEt), + hwAsymHt_(hwAsymHt), + hwAsymEtHF_(hwAsymEtHF), + hwAsymHtHF_(hwAsymHtHF), + minBiasHFP0_(minBiasHFP0), + minBiasHFM0_(minBiasHFM0), + minBiasHFP1_(minBiasHFP1), + minBiasHFM1_(minBiasHFM1), + towerCount_(towerCount), + centrality_(centrality) {} + + void setHwTotalEt(int hwTotalEt) { hwTotalEt_ = hwTotalEt; } + void setHwTotalEtEm(int hwTotalEtEm) { hwTotalEtEm_ = hwTotalEtEm; } + void setMinBiasHFP0(int minBiasHFP0) { minBiasHFP0_ = minBiasHFP0; } + void setHwTotalHt(int hwTotalHt) { hwTotalHt_ = hwTotalHt; } + void setTowerCount(int towerCount) { towerCount_ = towerCount; } + void setMinBiasHFM0(int minBiasHFM0) { minBiasHFM0_ = minBiasHFM0; } + void setHwMissEt(int hwMissEt) { hwMissEt_ = hwMissEt; } + void setHwMissEtPhi(int hwMissEtPhi) { hwMissEtPhi_ = hwMissEtPhi; } + void setHwAsymEt(int hwAsymEt) { hwAsymEt_ = hwAsymEt; } + void setMinBiasHFP1(int minBiasHFP1) { minBiasHFP1_ = minBiasHFP1; } + void setHwMissHt(int hwMissHt) { hwMissHt_ = hwMissHt; } + void setHwMissHtPhi(int hwMissHtPhi) { hwMissHtPhi_ = hwMissHtPhi; } + void setHwAsymHt(int hwAsymHt) { hwAsymHt_ = hwAsymHt; } + void setMinBiasHFM1(int minBiasHFM1) { minBiasHFM1_ = minBiasHFM1; } + void setHwMissEtHF(int hwMissEtHF) { hwMissEtHF_ = hwMissEtHF; } + void setHwMissEtHFPhi(int hwMissEtHFPhi) { hwMissEtHFPhi_ = hwMissEtHFPhi; } + void setHwAsymEtHF(int hwAsymEtHF) { hwAsymEtHF_ = hwAsymEtHF; } + void setHwMissHtHF(int hwMissHtHF) { hwMissHtHF_ = hwMissHtHF; } + void setHwMissHtHFPhi(int hwMissHtHFPhi) { hwMissHtHFPhi_ = hwMissHtHFPhi; } + void setHwAsymHtHF(int hwAsymHtHF) { hwAsymHtHF_ = hwAsymHtHF; } + void setCentrality(int centrality) { centrality_ = centrality; } + + const int hwTotalEt() const { return hwTotalEt_; } + const int hwTotalEtEm() const { return hwTotalEtEm_; } + const int minBiasHFP0() const { return minBiasHFP0_; } + const int hwTotalHt() const { return hwTotalHt_; } + const int towerCount() const { return towerCount_; } + const int minBiasHFM0() const { return minBiasHFM0_; } + const int hwMissEt() const { return hwMissEt_; } + const int hwMissEtPhi() const { return hwMissEtPhi_; } + const int hwAsymEt() const { return hwAsymEt_; } + const int minBiasHFP1() const { return minBiasHFP1_; } + const int hwMissHt() const { return hwMissHt_; } + const int hwMissHtPhi() const { return hwMissHtPhi_; } + const int hwAsymHt() const { return hwAsymHt_; } + const int minBiasHFM1() const { return minBiasHFM1_; } + const int hwMissEtHF() const { return hwMissEtHF_; } + const int hwMissEtHFPhi() const { return hwMissEtHFPhi_; } + const int hwAsymEtHF() const { return hwAsymEtHF_; } + const int hwMissHtHF() const { return hwMissHtHF_; } + const int hwMissHtHFPhi() const { return hwMissHtHFPhi_; } + const int hwAsymHtHF() const { return hwAsymHtHF_; } + const int centrality() const { return centrality_; } + + private: + int hwTotalEt_; + int hwTotalEtEm_; + int hwTotalHt_; + int hwMissEt_; + int hwMissEtPhi_; + int hwMissHt_; + int hwMissHtPhi_; + int hwMissEtHF_; + int hwMissEtHFPhi_; + int hwMissHtHF_; + int hwMissHtHFPhi_; + int hwAsymEt_; + int hwAsymHt_; + int hwAsymEtHF_; + int hwAsymHtHF_; + int minBiasHFP0_; + int minBiasHFM0_; + int minBiasHFP1_; + int minBiasHFM1_; + int towerCount_; + int centrality_; + }; + + typedef OrbitCollection JetOrbitCollection; + typedef OrbitCollection EGammaOrbitCollection; + typedef OrbitCollection TauOrbitCollection; + typedef OrbitCollection BxSumsOrbitCollection; + +} // namespace l1ScoutingRun3 +#endif // DataFormats_L1Scouting_L1ScoutingCalo_h \ No newline at end of file diff --git a/DataFormats/L1Scouting/interface/L1ScoutingMuon.h b/DataFormats/L1Scouting/interface/L1ScoutingMuon.h new file mode 100644 index 0000000000000..59882addb1b6a --- /dev/null +++ b/DataFormats/L1Scouting/interface/L1ScoutingMuon.h @@ -0,0 +1,95 @@ +#ifndef DataFormats_L1Scouting_L1ScoutingMuon_h +#define DataFormats_L1Scouting_L1ScoutingMuon_h + +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +namespace l1ScoutingRun3 { + + class Muon { + public: + Muon() + : hwPt_(0), + hwEta_(0), + hwPhi_(0), + hwQual_(0), + hwChrg_(0), + hwChrgv_(0), + hwIso_(0), + tfIndex_(0), + hwEtaAtVtx_(0), + hwPhiAtVtx_(0), + hwPtUnconstrained_(0), + hwDXY_(0) {} + + Muon(int hwPt, + int hwEta, + int hwPhi, + int hwQual, + int hwChrg, + int hwChrgv, + int hwIso, + int tfIndex, + int hwEtaAtVtx, + int hwPhiAtVtx, + int hwPtUnconstrained, + int hwDXY) + : hwPt_(hwPt), + hwEta_(hwEta), + hwPhi_(hwPhi), + hwQual_(hwQual), + hwChrg_(hwChrg), + hwChrgv_(hwChrgv), + hwIso_(hwIso), + tfIndex_(tfIndex), + hwEtaAtVtx_(hwEtaAtVtx), + hwPhiAtVtx_(hwPhiAtVtx), + hwPtUnconstrained_(hwPtUnconstrained), + hwDXY_(hwDXY) {} + + void setHwPt(int hwPt) { hwPt_ = hwPt; } + void setHwEta(int hwEta) { hwEta_ = hwEta; } + void setHwPhi(int hwPhi) { hwPhi_ = hwPhi; } + void setHwQual(int hwQual) { hwQual_ = hwQual; } + void setHwChrg(int hwChrg) { hwChrg_ = hwChrg; } + void setHwChrgv(int hwChrgv) { hwChrgv_ = hwChrgv; } + void setHwIso(int hwIso) { hwIso_ = hwIso; } + void setTfIndex(int tfIndex) { tfIndex_ = tfIndex; } + void setHwEtaAtVtx(int hwEtaAtVtx) { hwEtaAtVtx_ = hwEtaAtVtx; } + void setHwPhiAtVtx(int hwPhiAtVtx) { hwPhiAtVtx_ = hwPhiAtVtx; } + void setHwPtUnconstrained(int hwPtUnconstrained) { hwPtUnconstrained_ = hwPtUnconstrained; } + void setHwDXY(int hwDXY) { hwDXY_ = hwDXY; } + + int hwPt() const { return hwPt_; } + int hwEta() const { return hwEta_; } + int hwPhi() const { return hwPhi_; } + int hwQual() const { return hwQual_; } + int hwCharge() const { return hwChrg_; } + int hwChargeValid() const { return hwChrgv_; } + int hwIso() const { return hwIso_; } + int hwIndex() const { return tfIndex_; } + int hwEtaAtVtx() const { return hwEtaAtVtx_; } + int hwPhiAtVtx() const { return hwPhiAtVtx_; } + int hwPtUnconstrained() const { return hwPtUnconstrained_; } + int hwDXY() const { return hwDXY_; } + int tfMuonIndex() const { return tfIndex_; } + + private: + int hwPt_; + int hwEta_; + int hwPhi_; + int hwQual_; + int hwChrg_; + int hwChrgv_; + int hwIso_; + int tfIndex_; + int hwEtaAtVtx_; + int hwPhiAtVtx_; + int hwPtUnconstrained_; + int hwDXY_; + }; + + typedef OrbitCollection MuonOrbitCollection; + +} // namespace l1ScoutingRun3 + +#endif // DataFormats_L1Scouting_L1ScoutingMuon_h \ No newline at end of file diff --git a/DataFormats/L1Scouting/interface/OrbitCollection.h b/DataFormats/L1Scouting/interface/OrbitCollection.h new file mode 100644 index 0000000000000..d9d2c34ca75a9 --- /dev/null +++ b/DataFormats/L1Scouting/interface/OrbitCollection.h @@ -0,0 +1,135 @@ +#ifndef DataFormats_L1Scouting_OrbitCollection_h +#define DataFormats_L1Scouting_OrbitCollection_h + +#include "DataFormats/Common/interface/CMS_CLASS_VERSION.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Utilities/interface/Span.h" + +#include +#include + +template +class OrbitCollection { +public: + typedef typename std::vector::iterator iterator; + typedef typename std::vector::const_iterator const_iterator; + typedef T value_type; + typedef typename std::vector::size_type size_type; + + // Initialize the offset vector with 0s from 0 to 3565. + // BX range is [1,3564], an extra entry is needed for the offserts of the last BX + OrbitCollection() : bxOffsets_(orbitBufferSize_ + 1, 0), data_(0) {} + // Construct the flat orbit collection starting from an OrbitBuffer. + // The method fillAndClear will be used, meaning that, after copying the objects, + // orbitBuffer's vectors will be cleared. + OrbitCollection(std::vector>& orbitBuffer, unsigned nObjects = 0) + : bxOffsets_(orbitBufferSize_ + 1, 0), data_(nObjects) { + fillAndClear(orbitBuffer, nObjects); + } + + OrbitCollection(const OrbitCollection& other) = default; + OrbitCollection(OrbitCollection&& other) = default; + OrbitCollection& operator=(const OrbitCollection& other) = default; + OrbitCollection& operator=(OrbitCollection&& other) = default; + + // Fill the orbit collection starting from a vector of vectors, one per BX. + // Objects are copied into a flat data vector, and a second vector is used to keep track + // of the starting index in the data vector for every BX. + // After the copy, the original input buffer is cleared. + // Input vector must be sorted with increasing BX and contain 3565 elements (BX in [1,3564]) + void fillAndClear(std::vector>& orbitBuffer, unsigned nObjects = 0) { + if (orbitBuffer.size() != orbitBufferSize_) + throw cms::Exception("OrbitCollection::fillAndClear") + << "Trying to fill the collection by passing an orbit buffer with incorrect size. " + << "Passed " << orbitBuffer.size() << ", expected 3565"; + data_.reserve(nObjects); + bxOffsets_[0] = 0; + unsigned bxIdx = 1; + for (auto& bxVec : orbitBuffer) { + // increase offset by the currect vec size + bxOffsets_[bxIdx] = bxOffsets_[bxIdx - 1] + bxVec.size(); + + // if bxVec contains something, copy it into the data_ vector + // and clear original bxVec objects + if (bxVec.size() > 0) { + data_.insert(data_.end(), bxVec.begin(), bxVec.end()); + bxVec.clear(); + } + + // increment bx index + bxIdx++; + } + } + + // iterate over all elements contained in data + const_iterator begin() const { return data_.begin(); } + const_iterator end() const { return data_.end(); } + + // iterate over elements of a bx + edm::Span bxIterator(unsigned bx) const { + if (bx >= orbitBufferSize_) + throw cms::Exception("OrbitCollection::bxIterator") << "Trying to access and object outside the orbit range. " + << " BX = " << bx; + if (getBxSize(bx) > 0) { + return edm::Span(data_.begin() + bxOffsets_[bx], data_.begin() + bxOffsets_[bx + 1]); + } else { + return edm::Span(end(), end()); + } + } + + // get number of objects stored in a BX + int getBxSize(unsigned bx) const { + if (bx >= orbitBufferSize_) { + cms::Exception("OrbitCollection") << "Called getBxSize() of a bx out of the orbit range." + << " BX = " << bx; + return 0; + } + return bxOffsets_[bx + 1] - bxOffsets_[bx]; + } + + // get i-th object from BX + const T& getBxObject(unsigned bx, unsigned i) const { + if (bx >= orbitBufferSize_) + throw cms::Exception("OrbitCollection::getBxObject") << "Trying to access and object outside the orbit range. " + << " BX = " << bx; + if (i >= getBxSize(bx)) + throw cms::Exception("OrbitCollection::getBxObject") + << "Trying to get element " << i << " but for" + << " BX = " << bx << " there are " << getBxSize(bx) << " elements."; + + return data_[bxOffsets_[bx] + i]; + } + + // get the list of non empty BXs + std::vector getFilledBxs() const { + std::vector filledBxVec; + if (!data_.empty()) { + for (unsigned bx = 0; bx < orbitBufferSize_; bx++) { + if ((bxOffsets_[bx + 1] - bxOffsets_[bx]) > 0) + filledBxVec.push_back(bx); + } + } + return filledBxVec; + } + + int size() const { return data_.size(); } + + T& operator[](std::size_t i) { return data_[i]; } + const T& operator[](std::size_t i) const { return data_[i]; } + + // used by ROOT storage + CMS_CLASS_VERSION(3) + +private: + // store data vector and BX offsets as flat vectors. + // offset contains one entry per BX, indicating the starting index + // of the objects for that BX. + std::vector bxOffsets_; + std::vector data_; + + // there are 3564 BX in one orbtit [1,3564], one extra + // count added to keep first entry of the vector + static constexpr int orbitBufferSize_ = 3565; +}; + +#endif // DataFormats_L1Scouting_OrbitCollection_h diff --git a/DataFormats/L1Scouting/src/classes.h b/DataFormats/L1Scouting/src/classes.h new file mode 100644 index 0000000000000..e9c045dd13f21 --- /dev/null +++ b/DataFormats/L1Scouting/src/classes.h @@ -0,0 +1,6 @@ +#include "DataFormats/Common/interface/RefProd.h" +#include "DataFormats/Common/interface/Wrapper.h" + +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" \ No newline at end of file diff --git a/DataFormats/L1Scouting/src/classes_def.xml b/DataFormats/L1Scouting/src/classes_def.xml new file mode 100644 index 0000000000000..994fe65b0d442 --- /dev/null +++ b/DataFormats/L1Scouting/src/classes_def.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/DataFormats/L1Scouting/test/BuildFile.xml b/DataFormats/L1Scouting/test/BuildFile.xml new file mode 100644 index 0000000000000..2448764be48d5 --- /dev/null +++ b/DataFormats/L1Scouting/test/BuildFile.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh b/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh new file mode 100755 index 0000000000000..3ef6057274e9a --- /dev/null +++ b/DataFormats/L1Scouting/test/TestL1ScoutingFormat.sh @@ -0,0 +1,11 @@ +#!/bin/sh -ex + +function die { echo $1: status $2 ; exit $2; } + +LOCAL_TEST_DIR=${SCRAM_TEST_PATH} + +cmsRun ${LOCAL_TEST_DIR}/create_L1Scouting_test_file_cfg.py || die 'Failure using create_L1Scouting_test_file_cfg.py' $? + +file=testL1Scouting.root + +cmsRun ${LOCAL_TEST_DIR}/read_L1Scouting_cfg.py "$file" || die "Failure using read_L1Scouting_cfg.py $file" $? \ No newline at end of file diff --git a/DataFormats/L1Scouting/test/TestReadL1Scouting.cc b/DataFormats/L1Scouting/test/TestReadL1Scouting.cc new file mode 100644 index 0000000000000..b39f5f8b7547c --- /dev/null +++ b/DataFormats/L1Scouting/test/TestReadL1Scouting.cc @@ -0,0 +1,333 @@ +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDAnalyzer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include +#include +#include + +namespace edmtest { + using namespace l1ScoutingRun3; + class TestReadL1Scouting : public edm::global::EDAnalyzer<> { + public: + TestReadL1Scouting(edm::ParameterSet const&); + void analyze(edm::StreamID, edm::Event const&, edm::EventSetup const&) const override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + + private: + void analyzeMuons(edm::Event const& iEvent) const; + void analyzeJets(edm::Event const& iEvent) const; + void analyzeEGammas(edm::Event const& iEvent) const; + void analyzeTaus(edm::Event const& iEvent) const; + void analyzeBxSums(edm::Event const& iEvent) const; + + void throwWithMessageFromConstructor(const char*) const; + void throwWithMessage(const char*) const; + + const std::vector bxValues_; + + const std::vector expectedMuonValues_; + const edm::EDGetTokenT> muonsToken_; + + const std::vector expectedJetValues_; + const edm::EDGetTokenT> jetsToken_; + + const std::vector expectedEGammaValues_; + const edm::EDGetTokenT> eGammasToken_; + + const std::vector expectedTauValues_; + const edm::EDGetTokenT> tausToken_; + + const std::vector expectedBxSumsValues_; + const edm::EDGetTokenT> bxSumsToken_; + }; + + TestReadL1Scouting::TestReadL1Scouting(edm::ParameterSet const& iPSet) + : bxValues_(iPSet.getParameter>("bxValues")), + expectedMuonValues_(iPSet.getParameter>("expectedMuonValues")), + muonsToken_(consumes(iPSet.getParameter("muonsTag"))), + expectedJetValues_(iPSet.getParameter>("expectedJetValues")), + jetsToken_(consumes(iPSet.getParameter("jetsTag"))), + expectedEGammaValues_(iPSet.getParameter>("expectedEGammaValues")), + eGammasToken_(consumes(iPSet.getParameter("eGammasTag"))), + expectedTauValues_(iPSet.getParameter>("expectedTauValues")), + tausToken_(consumes(iPSet.getParameter("tausTag"))), + expectedBxSumsValues_(iPSet.getParameter>("expectedBxSumsValues")), + bxSumsToken_(consumes(iPSet.getParameter("bxSumsTag"))) { + if (bxValues_.size() != 2) { + throwWithMessageFromConstructor("bxValues must have 2 elements and it does not"); + } + if (expectedMuonValues_.size() != 3) { + throwWithMessageFromConstructor("muonValues must have 3 elements and it does not"); + } + if (expectedJetValues_.size() != 4) { + throwWithMessageFromConstructor("jetValues must have 4 elements and it does not"); + } + if (expectedEGammaValues_.size() != 3) { + throwWithMessageFromConstructor("eGammaValues must have 3 elements and it does not"); + } + if (expectedTauValues_.size() != 2) { + throwWithMessageFromConstructor("tauValues must have 2 elements and it does not"); + } + if (expectedBxSumsValues_.size() != 1) { + throwWithMessageFromConstructor("bxSumsValues_ must have 1 elements and it does not"); + } + } + + void TestReadL1Scouting::analyze(edm::StreamID, edm::Event const& iEvent, edm::EventSetup const&) const { + analyzeMuons(iEvent); + analyzeJets(iEvent); + analyzeEGammas(iEvent); + analyzeTaus(iEvent); + analyzeBxSums(iEvent); + } + + void TestReadL1Scouting::analyzeMuons(edm::Event const& iEvent) const { + auto const& muonsCollection = iEvent.get(muonsToken_); + + for (const unsigned& bx : bxValues_) { + unsigned nMuons = muonsCollection.getBxSize(bx); + if (nMuons != expectedMuonValues_.size()) { + throwWithMessage("analyzeMuons, muons do not have the expected bx size"); + } + + const auto& muons = muonsCollection.bxIterator(bx); + for (unsigned i = 0; i < nMuons; i++) { + if (muons[i].hwPt() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwPt does not match the expected value"); + } + if (muons[i].hwEta() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwEta does not match the expected value"); + } + if (muons[i].hwPhi() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwPhi does not match the expected value"); + } + if (muons[i].hwQual() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwQual does not match the expected value"); + } + if (muons[i].hwCharge() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwCharge does not match the expected value"); + } + if (muons[i].hwChargeValid() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwChargeValid does not match the expected value"); + } + if (muons[i].hwIso() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwIso does not match the expected value"); + } + if (muons[i].hwIndex() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwIndex does not match the expected value"); + } + if (muons[i].hwEtaAtVtx() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwEtaAtVtx does not match the expected value"); + } + if (muons[i].hwPhiAtVtx() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwPhiAtVtx does not match the expected value"); + } + if (muons[i].hwPtUnconstrained() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwPtUnconstrained does not match the expected value"); + } + if (muons[i].hwDXY() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, hwDXY does not match the expected value"); + } + if (muons[i].tfMuonIndex() != expectedMuonValues_[i]) { + throwWithMessage("analyzeMuons, tfMuonIndex does not match the expected value"); + } + } + } + } + + void TestReadL1Scouting::analyzeJets(edm::Event const& iEvent) const { + auto const& jetsCollection = iEvent.get(jetsToken_); + + for (const unsigned& bx : bxValues_) { + unsigned nJets = jetsCollection.getBxSize(bx); + if (nJets != expectedJetValues_.size()) { + throwWithMessage("analyzeJets, jets do not have the expected bx size"); + } + + const auto& jets = jetsCollection.bxIterator(bx); + for (unsigned i = 0; i < nJets; i++) { + if (jets[i].hwEt() != expectedJetValues_[i]) { + throwWithMessage("analyzeJets, hwEt does not match the expected value"); + } + if (jets[i].hwEta() != expectedJetValues_[i]) { + throwWithMessage("analyzeJets, hwEta does not match the expected value"); + } + if (jets[i].hwPhi() != expectedJetValues_[i]) { + throwWithMessage("analyzeJets, hwPhi does not match the expected value"); + } + if (jets[i].hwIso() != expectedJetValues_[i]) { + throwWithMessage("analyzeJets, hwIso does not match the expected value"); + } + } + } + } + + void TestReadL1Scouting::analyzeEGammas(edm::Event const& iEvent) const { + auto const& eGammasCollection = iEvent.get(eGammasToken_); + + for (const unsigned& bx : bxValues_) { + unsigned nEGammas = eGammasCollection.getBxSize(bx); + if (nEGammas != expectedEGammaValues_.size()) { + throwWithMessage("analyzeEGammas, egammas do not have the expected bx size"); + } + + const auto& eGammas = eGammasCollection.bxIterator(bx); + for (unsigned i = 0; i < nEGammas; i++) { + if (eGammas[i].hwEt() != expectedEGammaValues_[i]) { + throwWithMessage("analyzeEGammas, hwEt does not match the expected value"); + } + if (eGammas[i].hwEta() != expectedEGammaValues_[i]) { + throwWithMessage("analyzeEGammas, hwEta does not match the expected value"); + } + if (eGammas[i].hwPhi() != expectedEGammaValues_[i]) { + throwWithMessage("analyzeEGammas, hwPhi does not match the expected value"); + } + if (eGammas[i].hwIso() != expectedEGammaValues_[i]) { + throwWithMessage("analyzeEGammas, hwIso does not match the expected value"); + } + } + } + } + + void TestReadL1Scouting::analyzeTaus(edm::Event const& iEvent) const { + auto const& tausCollection = iEvent.get(tausToken_); + + for (const unsigned& bx : bxValues_) { + unsigned nTaus = tausCollection.getBxSize(bx); + if (nTaus != expectedTauValues_.size()) { + throwWithMessage("analyzeTaus, taus do not have the expected bx size"); + } + + const auto& taus = tausCollection.bxIterator(bx); + for (unsigned i = 0; i < nTaus; i++) { + if (taus[i].hwEt() != expectedTauValues_[i]) { + throwWithMessage("analyzeTaus, hwEt does not match the expected value"); + } + if (taus[i].hwEta() != expectedTauValues_[i]) { + throwWithMessage("analyzeTaus, hwEta does not match the expected value"); + } + if (taus[i].hwPhi() != expectedTauValues_[i]) { + throwWithMessage("analyzeTaus, hwPhi does not match the expected value"); + } + if (taus[i].hwIso() != expectedTauValues_[i]) { + throwWithMessage("analyzeTaus, hwIso does not match the expected value"); + } + } + } + } + + void TestReadL1Scouting::analyzeBxSums(edm::Event const& iEvent) const { + auto const& bxSumsCollection = iEvent.get(bxSumsToken_); + + for (const unsigned& bx : bxValues_) { + unsigned nSums = bxSumsCollection.getBxSize(bx); + if (nSums != expectedBxSumsValues_.size()) { + throwWithMessage("analyzeBxSums, sums do not have the expected bx size"); + } + + const auto& sums = bxSumsCollection.bxIterator(bx); + for (unsigned i = 0; i < nSums; i++) { + if (sums[i].hwTotalEt() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwTotalEt does not match the expected value"); + } + if (sums[i].hwTotalEtEm() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwTotalEtEm does not match the expected value"); + } + if (sums[i].hwTotalHt() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwTotalHt does not match the expected value"); + } + if (sums[i].hwMissEt() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissEt does not match the expected value"); + } + if (sums[i].hwMissEtPhi() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissEtPhi does not match the expected value"); + } + if (sums[i].hwMissHt() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissHt does not match the expected value"); + } + if (sums[i].hwMissHtPhi() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissHtPhi does not match the expected value"); + } + if (sums[i].hwMissEtHF() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissEtHF does not match the expected value"); + } + if (sums[i].hwMissEtHFPhi() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissEtHFPhi does not match the expected value"); + } + if (sums[i].hwMissHtHF() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwMissHtHFPhi does not match the expected value"); + } + if (sums[i].hwAsymEt() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwAsymEt does not match the expected value"); + } + if (sums[i].hwAsymHt() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwAsymHt does not match the expected value"); + } + if (sums[i].hwAsymEtHF() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwAsymEtHF does not match the expected value"); + } + if (sums[i].hwAsymHtHF() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, hwAsymHtHF does not match the expected value"); + } + if (sums[i].minBiasHFP0() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, minBiasHFP0 does not match the expected value"); + } + if (sums[i].minBiasHFM0() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, minBiasHFM0 does not match the expected value"); + } + if (sums[i].minBiasHFP1() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, minBiasHFP1 does not match the expected value"); + } + if (sums[i].minBiasHFM1() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, minBiasHFM1 does not match the expected value"); + } + if (sums[i].towerCount() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, towerCount does not match the expected value"); + } + if (sums[i].centrality() != expectedBxSumsValues_[i]) { + throwWithMessage("analyzeBxSums, centrality does not match the expected value"); + } + } + } + } + + void TestReadL1Scouting::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add>("bxValues"); + desc.add>("expectedMuonValues"); + desc.add("muonsTag"); + desc.add>("expectedJetValues"); + desc.add("jetsTag"); + desc.add>("expectedEGammaValues"); + desc.add("eGammasTag"); + desc.add>("expectedTauValues"); + desc.add("tausTag"); + desc.add>("expectedBxSumsValues"); + desc.add("bxSumsTag"); + descriptions.addDefault(desc); + } + + void TestReadL1Scouting::throwWithMessageFromConstructor(const char* msg) const { + throw cms::Exception("TestFailure") << "TestReadL1Scouting constructor, test configuration error, " << msg; + } + + void TestReadL1Scouting::throwWithMessage(const char* msg) const { + throw cms::Exception("TestFailure") << "TestReadL1Scouting analyzer, " << msg; + } + +} // namespace edmtest + +using edmtest::TestReadL1Scouting; +DEFINE_FWK_MODULE(TestReadL1Scouting); \ No newline at end of file diff --git a/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc b/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc new file mode 100644 index 0000000000000..62a807b4b5b18 --- /dev/null +++ b/DataFormats/L1Scouting/test/TestWriteL1Scouting.cc @@ -0,0 +1,192 @@ +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include +#include +#include + +namespace edmtest { + using namespace l1ScoutingRun3; + class TestWriteL1Scouting : public edm::global::EDProducer<> { + public: + TestWriteL1Scouting(edm::ParameterSet const&); + void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + + private: + void produceMuons(edm::Event& iEvent) const; + void produceJets(edm::Event& iEvent) const; + void produceEGammas(edm::Event& iEvent) const; + void produceTaus(edm::Event& iEvent) const; + void produceBxSums(edm::Event& iEvent) const; + + void throwWithMessage(const char*) const; + + const std::vector bxValues_; + + const std::vector muonValues_; + const edm::EDPutTokenT> muonsPutToken_; + + const std::vector jetValues_; + const edm::EDPutTokenT> jetsPutToken_; + + const std::vector eGammaValues_; + const edm::EDPutTokenT> eGammasPutToken_; + + const std::vector tauValues_; + const edm::EDPutTokenT> tausPutToken_; + + const std::vector bxSumsValues_; + const edm::EDPutTokenT> bxSumsPutToken_; + }; + + TestWriteL1Scouting::TestWriteL1Scouting(edm::ParameterSet const& iPSet) + : bxValues_(iPSet.getParameter>("bxValues")), + muonValues_(iPSet.getParameter>("muonValues")), + muonsPutToken_(produces()), + jetValues_(iPSet.getParameter>("jetValues")), + jetsPutToken_(produces()), + eGammaValues_(iPSet.getParameter>("eGammaValues")), + eGammasPutToken_(produces()), + tauValues_(iPSet.getParameter>("tauValues")), + tausPutToken_(produces()), + bxSumsValues_(iPSet.getParameter>("bxSumsValues")), + bxSumsPutToken_(produces()) { + if (bxValues_.size() != 2) { + throwWithMessage("bxValues must have 2 elements and it does not"); + } + if (muonValues_.size() != 3) { + throwWithMessage("muonValues must have 3 elements and it does not"); + } + if (jetValues_.size() != 4) { + throwWithMessage("jetValues must have 4 elements and it does not"); + } + if (eGammaValues_.size() != 3) { + throwWithMessage("eGammaValues must have 3 elements and it does not"); + } + if (tauValues_.size() != 2) { + throwWithMessage("tauValues must have 2 elements and it does not"); + } + if (bxSumsValues_.size() != 1) { + throwWithMessage("bxSumsValues_ must have 1 elements and it does not"); + } + } + + void TestWriteL1Scouting::produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const { + produceMuons(iEvent); + produceJets(iEvent); + produceEGammas(iEvent); + produceTaus(iEvent); + produceBxSums(iEvent); + } + + void TestWriteL1Scouting::produceMuons(edm::Event& iEvent) const { + std::unique_ptr muons(new l1ScoutingRun3::MuonOrbitCollection); + + std::vector> orbitBufferMuons(3565); + int nMuons = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : muonValues_) { + orbitBufferMuons[bx].emplace_back(val, val, val, val, val, val, val, val, val, val, val, val); + nMuons++; + } + } + + muons->fillAndClear(orbitBufferMuons, nMuons); + iEvent.put(muonsPutToken_, std::move(muons)); + } + + void TestWriteL1Scouting::produceJets(edm::Event& iEvent) const { + std::unique_ptr jets(new l1ScoutingRun3::JetOrbitCollection); + + std::vector> orbitBufferJets(3565); + int nJets = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : jetValues_) { + orbitBufferJets[bx].emplace_back(val, val, val, val); + nJets++; + } + } + + jets->fillAndClear(orbitBufferJets, nJets); + iEvent.put(jetsPutToken_, std::move(jets)); + } + + void TestWriteL1Scouting::produceEGammas(edm::Event& iEvent) const { + std::unique_ptr eGammas(new l1ScoutingRun3::EGammaOrbitCollection); + + std::vector> orbitBufferEGammas(3565); + int nEGammas = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : eGammaValues_) { + orbitBufferEGammas[bx].emplace_back(val, val, val, val); + nEGammas++; + } + } + + eGammas->fillAndClear(orbitBufferEGammas, nEGammas); + iEvent.put(eGammasPutToken_, std::move(eGammas)); + } + + void TestWriteL1Scouting::produceTaus(edm::Event& iEvent) const { + std::unique_ptr taus(new l1ScoutingRun3::TauOrbitCollection); + + std::vector> orbitBufferTaus(3565); + int nTaus = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : tauValues_) { + orbitBufferTaus[bx].emplace_back(val, val, val, val); + nTaus++; + } + } + + taus->fillAndClear(orbitBufferTaus, nTaus); + iEvent.put(tausPutToken_, std::move(taus)); + } + + void TestWriteL1Scouting::produceBxSums(edm::Event& iEvent) const { + std::unique_ptr bxSums(new l1ScoutingRun3::BxSumsOrbitCollection); + + std::vector> orbitBufferBxSums(3565); + int nBxSums = 0; + for (const unsigned& bx : bxValues_) { + for (const int& val : bxSumsValues_) { + orbitBufferBxSums[bx].emplace_back( + val, val, val, val, val, val, val, val, val, val, val, val, val, val, val, val, val, val, val, val, val); + nBxSums++; + } + } + + bxSums->fillAndClear(orbitBufferBxSums, nBxSums); + iEvent.put(bxSumsPutToken_, std::move(bxSums)); + } + + void TestWriteL1Scouting::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add>("bxValues"); + desc.add>("muonValues"); + desc.add>("jetValues"); + desc.add>("eGammaValues"); + desc.add>("tauValues"); + desc.add>("bxSumsValues"); + descriptions.addDefault(desc); + } + + void TestWriteL1Scouting::throwWithMessage(const char* msg) const { + throw cms::Exception("TestFailure") << "TestWriteL1Scouting constructor, test configuration error, " << msg; + } + +} // namespace edmtest + +using edmtest::TestWriteL1Scouting; +DEFINE_FWK_MODULE(TestWriteL1Scouting); \ No newline at end of file diff --git a/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py b/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py new file mode 100644 index 0000000000000..1f03c455497ff --- /dev/null +++ b/DataFormats/L1Scouting/test/create_L1Scouting_test_file_cfg.py @@ -0,0 +1,24 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("PROD") + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.source = cms.Source("EmptySource") +process.maxEvents.input = 1 + +process.l1ScoutingTestProducer = cms.EDProducer("TestWriteL1Scouting", + bxValues = cms.vuint32(42, 512), + muonValues = cms.vint32(1, 2, 3), + jetValues = cms.vint32(4, 5, 6, 7), + eGammaValues = cms.vint32(8, 9, 10), + tauValues = cms.vint32(11, 12), + bxSumsValues = cms.vint32(13) +) + +process.out = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('testL1Scouting.root') +) + +process.path = cms.Path(process.l1ScoutingTestProducer) +process.endPath = cms.EndPath(process.out) \ No newline at end of file diff --git a/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py b/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py new file mode 100644 index 0000000000000..3153934b8106a --- /dev/null +++ b/DataFormats/L1Scouting/test/read_L1Scouting_cfg.py @@ -0,0 +1,30 @@ +import FWCore.ParameterSet.Config as cms +import sys + +process = cms.Process("READ") + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring("file:"+sys.argv[1])) +process.maxEvents.input = 1 + +process.l1ScoutingTestAnalyzer = cms.EDAnalyzer("TestReadL1Scouting", + bxValues = cms.vuint32(42, 512), + muonsTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), + expectedMuonValues = cms.vint32(1, 2, 3), + jetsTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), + expectedJetValues = cms.vint32(4, 5, 6, 7), + eGammasTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), + expectedEGammaValues = cms.vint32(8, 9, 10), + tausTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), + expectedTauValues = cms.vint32(11, 12), + bxSumsTag = cms.InputTag("l1ScoutingTestProducer", "", "PROD"), + expectedBxSumsValues = cms.vint32(13) +) + +process.out = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('testL1Scouting2.root') +) + +process.path = cms.Path(process.l1ScoutingTestAnalyzer) +process.endPath = cms.EndPath(process.out) \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/BuildFile.xml b/DataFormats/L1ScoutingRawData/BuildFile.xml new file mode 100644 index 0000000000000..736e6ca08a199 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/BuildFile.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/README.md b/DataFormats/L1ScoutingRawData/README.md new file mode 100644 index 0000000000000..4c610acbe176e --- /dev/null +++ b/DataFormats/L1ScoutingRawData/README.md @@ -0,0 +1,8 @@ +# DataFormats/L1ScoutingRawData + +## L1 Trigger Scouting raw data formats + +Any changes to the L1 scouting raw data `SDSRawDataCollection` must be backwards compatible. +In order to ensure the L1 Scouting raw data formats can be read by future CMSSW releases, +there is a `TestSDSRawDataCollectionFormat` unit test, which makes use of the `TestReadSDSRawDataCollection` analyzer and the `TestWriteSDSRawDataCollection` producer. +The unit test checks that objects can be written and read properly. \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h b/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h new file mode 100644 index 0000000000000..354131e56e4ed --- /dev/null +++ b/DataFormats/L1ScoutingRawData/interface/SDSNumbering.h @@ -0,0 +1,24 @@ +#ifndef L1ScoutingRawData_SDSNumbering_h +#define L1ScoutingRawData_SDSNumbering_h + +/** + * + * This class holds the Scouting Data Source (SDS) + * numbering scheme for the Level 1 scouting system + * + */ + +class SDSNumbering { +public: + static constexpr int lastSDSId() { return MAXSDSID; } + + static constexpr int NOT_A_SDSID = -1; + static constexpr int MAXSDSID = 32; + static constexpr int GmtSDSID = 1; + static constexpr int CaloSDSID = 2; + static constexpr int GtSDSID = 4; + static constexpr int BmtfMinSDSID = 10; + static constexpr int BmtfMaxSDSID = 21; +}; + +#endif // L1ScoutingRawData_SDSNumbering_h \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h b/DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h new file mode 100644 index 0000000000000..8fef964a7fc3c --- /dev/null +++ b/DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h @@ -0,0 +1,36 @@ +#ifndef L1ScoutingRawData_SDSRawDataCollection_h +#define L1ScoutingRawData_SDSRawDataCollection_h + +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/Common/interface/traits.h" + +/** + * + * This collection holds the raw data for all the + * scouting data sources. It is a collection of FEDRawData + * + */ + +class SDSRawDataCollection : public edm::DoNotRecordParents { +public: + SDSRawDataCollection(); + SDSRawDataCollection(const SDSRawDataCollection&) = default; + SDSRawDataCollection(SDSRawDataCollection&&) noexcept = default; + SDSRawDataCollection& operator=(const SDSRawDataCollection&) = default; + SDSRawDataCollection& operator=(SDSRawDataCollection&&) noexcept = default; + + // retrive data for the scouting source at sourceId + const FEDRawData& FEDData(int sourceId) const; + + // retrive data for the scouting source at sourceId + FEDRawData& FEDData(int sourceId); + + void swap(SDSRawDataCollection& other) { data_.swap(other.data_); } + +private: + std::vector data_; // vector of raw data +}; + +inline void swap(SDSRawDataCollection& a, SDSRawDataCollection& b) { a.swap(b); } + +#endif // L1ScoutingRawData_SDSRawDataCollection_h diff --git a/DataFormats/L1ScoutingRawData/src/SDSRawDataCollection.cc b/DataFormats/L1ScoutingRawData/src/SDSRawDataCollection.cc new file mode 100644 index 0000000000000..c59798bee3522 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/src/SDSRawDataCollection.cc @@ -0,0 +1,8 @@ +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSNumbering.h" + +SDSRawDataCollection::SDSRawDataCollection() : data_(SDSNumbering::lastSDSId() + 1) {} + +const FEDRawData& SDSRawDataCollection::FEDData(int sourceId) const { return data_[sourceId]; } + +FEDRawData& SDSRawDataCollection::FEDData(int sourceId) { return data_[sourceId]; } diff --git a/DataFormats/L1ScoutingRawData/src/classes.h b/DataFormats/L1ScoutingRawData/src/classes.h new file mode 100644 index 0000000000000..98c4a6b676b25 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/src/classes.h @@ -0,0 +1,4 @@ +#include "DataFormats/Common/interface/Wrapper.h" +// #include "DataFormats/Common/interface/RefProd.h" + +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/src/classes_def.xml b/DataFormats/L1ScoutingRawData/src/classes_def.xml new file mode 100644 index 0000000000000..f62cced686169 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/src/classes_def.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/test/BuildFile.xml b/DataFormats/L1ScoutingRawData/test/BuildFile.xml new file mode 100644 index 0000000000000..6529e327073ec --- /dev/null +++ b/DataFormats/L1ScoutingRawData/test/BuildFile.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/test/TestReadSDSRawDataCollection.cc b/DataFormats/L1ScoutingRawData/test/TestReadSDSRawDataCollection.cc new file mode 100644 index 0000000000000..275488fe1842e --- /dev/null +++ b/DataFormats/L1ScoutingRawData/test/TestReadSDSRawDataCollection.cc @@ -0,0 +1,73 @@ +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDAnalyzer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/Exception.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include + +namespace edmtest { + + class TestReadSDSRawDataCollection : public edm::global::EDAnalyzer<> { + public: + TestReadSDSRawDataCollection(edm::ParameterSet const&); + void analyze(edm::StreamID, edm::Event const&, edm::EventSetup const&) const override; + void throwWithMessage(const char*) const; + static void fillDescriptions(edm::ConfigurationDescriptions&); + + private: + std::vector expectedSDSData1_; + std::vector expectedSDSData2_; + edm::EDGetTokenT sdsRawDataCollectionToken_; + }; + + TestReadSDSRawDataCollection::TestReadSDSRawDataCollection(edm::ParameterSet const& iPSet) + : expectedSDSData1_(iPSet.getParameter>("expectedSDSData1")), + expectedSDSData2_(iPSet.getParameter>("expectedSDSData2")), + sdsRawDataCollectionToken_(consumes(iPSet.getParameter("sdsRawDataCollectionTag"))) {} + + void TestReadSDSRawDataCollection::analyze(edm::StreamID, edm::Event const& iEvent, edm::EventSetup const&) const { + auto const& sdsRawDataCollection = iEvent.get(sdsRawDataCollectionToken_); + auto const& sdsData1 = sdsRawDataCollection.FEDData(1); + if (sdsData1.size() != expectedSDSData1_.size()) { + throwWithMessage("sdsData1 does not have expected size"); + } + for (unsigned int i = 0; i < sdsData1.size(); ++i) { + if (sdsData1.data()[i] != expectedSDSData1_[i]) { + throwWithMessage("sdsData1 does not have expected contents"); + } + } + auto const& sdsData2 = sdsRawDataCollection.FEDData(2); + if (sdsData2.size() != expectedSDSData2_.size()) { + throwWithMessage("sdsData2 does not have expected size"); + } + for (unsigned int i = 0; i < sdsData2.size(); ++i) { + if (sdsData2.data()[i] != expectedSDSData2_[i]) { + throwWithMessage("sdsData2 does not have expected contents"); + } + } + } + + void TestReadSDSRawDataCollection::throwWithMessage(const char* msg) const { + throw cms::Exception("TestFailure") << "TestReadSDSRawDataCollection::analyze, " << msg; + } + + void TestReadSDSRawDataCollection::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add>("expectedSDSData1"); + desc.add>("expectedSDSData2"); + desc.add("sdsRawDataCollectionTag"); + descriptions.addDefault(desc); + } +} // namespace edmtest + +using edmtest::TestReadSDSRawDataCollection; +DEFINE_FWK_MODULE(TestReadSDSRawDataCollection); \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/test/TestSDSRawDataCollectionFormat.sh b/DataFormats/L1ScoutingRawData/test/TestSDSRawDataCollectionFormat.sh new file mode 100755 index 0000000000000..2b8cf681d377f --- /dev/null +++ b/DataFormats/L1ScoutingRawData/test/TestSDSRawDataCollectionFormat.sh @@ -0,0 +1,11 @@ +#!/bin/sh -ex + +function die { echo $1: status $2 ; exit $2; } + +LOCAL_TEST_DIR=${SCRAM_TEST_PATH} + +cmsRun ${LOCAL_TEST_DIR}/create_SDSRawDataCollection_test_file_cfg.py || die 'Failure using create_SDSRawDataCollection_test_file_cfg.py' $? + +file=testSDSRawDataCollection.root + +cmsRun ${LOCAL_TEST_DIR}/read_SDSRawDataCollection_cfg.py "$file" || die "Failure using read_SDSRawDataCollection_cfg.py $file" $? \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/test/TestWriteSDSRawDataCollection.cc b/DataFormats/L1ScoutingRawData/test/TestWriteSDSRawDataCollection.cc new file mode 100644 index 0000000000000..355958331c254 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/test/TestWriteSDSRawDataCollection.cc @@ -0,0 +1,63 @@ +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/EDPutToken.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include +#include +#include + +namespace edmtest { + + class TestWriteSDSRawDataCollection : public edm::global::EDProducer<> { + public: + TestWriteSDSRawDataCollection(edm::ParameterSet const&); + void produce(edm::StreamID, edm::Event&, edm::EventSetup const&) const override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + + private: + std::vector sdsData1_; + std::vector sdsData2_; + edm::EDPutTokenT sdsRawDataCollectionPutToken_; + }; + + TestWriteSDSRawDataCollection::TestWriteSDSRawDataCollection(edm::ParameterSet const& iPSet) + : sdsData1_(iPSet.getParameter>("SDSData1")), + sdsData2_(iPSet.getParameter>("SDSData2")), + sdsRawDataCollectionPutToken_(produces()) {} + + void TestWriteSDSRawDataCollection::produce(edm::StreamID, edm::Event& iEvent, edm::EventSetup const&) const { + auto sdsRawDataCollection = std::make_unique(); + FEDRawData& fedData1 = sdsRawDataCollection->FEDData(1); + FEDRawData& fedData2 = sdsRawDataCollection->FEDData(2); + + fedData1.resize(sdsData1_.size(), 4); + unsigned char* dataPtr1 = fedData1.data(); + for (unsigned int i = 0; i < sdsData1_.size(); ++i) { + dataPtr1[i] = sdsData1_[i]; + } + fedData2.resize(sdsData2_.size(), 4); + unsigned char* dataPtr2 = fedData2.data(); + for (unsigned int i = 0; i < sdsData2_.size(); ++i) { + dataPtr2[i] = sdsData2_[i]; + } + iEvent.put(sdsRawDataCollectionPutToken_, std::move(sdsRawDataCollection)); + } + + void TestWriteSDSRawDataCollection::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add>("SDSData1"); + desc.add>("SDSData2"); + descriptions.addDefault(desc); + } +} // namespace edmtest + +using edmtest::TestWriteSDSRawDataCollection; +DEFINE_FWK_MODULE(TestWriteSDSRawDataCollection); \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/test/create_SDSRawDataCollection_test_file_cfg.py b/DataFormats/L1ScoutingRawData/test/create_SDSRawDataCollection_test_file_cfg.py new file mode 100644 index 0000000000000..f8dd0d6204f03 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/test/create_SDSRawDataCollection_test_file_cfg.py @@ -0,0 +1,22 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("PROD") + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.source = cms.Source("EmptySource") +process.maxEvents.input = 1 + +process.sdsRawDataCollectionProducer = cms.EDProducer("TestWriteSDSRawDataCollection", + # Test values below are meaningless. We just make sure when we read + # we get the same values. + SDSData1 = cms.vuint32(0, 1, 2, 3), + SDSData2 = cms.vuint32(42, 43, 44, 45) +) + +process.out = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('testSDSRawDataCollection.root') +) + +process.path = cms.Path(process.sdsRawDataCollectionProducer) +process.endPath = cms.EndPath(process.out) \ No newline at end of file diff --git a/DataFormats/L1ScoutingRawData/test/read_SDSRawDataCollection_cfg.py b/DataFormats/L1ScoutingRawData/test/read_SDSRawDataCollection_cfg.py new file mode 100644 index 0000000000000..95e3e23d18142 --- /dev/null +++ b/DataFormats/L1ScoutingRawData/test/read_SDSRawDataCollection_cfg.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms +import sys + +process = cms.Process("READ") + +process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring("file:"+sys.argv[1])) +process.maxEvents.input = 1 + +process.testReadSDSDRawDataCollection = cms.EDAnalyzer("TestReadSDSRawDataCollection", + sdsRawDataCollectionTag = cms.InputTag("sdsRawDataCollectionProducer", "", "PROD"), + expectedSDSData1 = cms.vuint32(0, 1, 2, 3), + expectedSDSData2 = cms.vuint32(42, 43, 44, 45) +) + +process.out = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('testSDSRawDataCollection2.root') +) + +process.path = cms.Path(process.testReadSDSDRawDataCollection) + +process.endPath = cms.EndPath(process.out) \ No newline at end of file diff --git a/DataFormats/L1THGCal/interface/HGCalMulticluster.h b/DataFormats/L1THGCal/interface/HGCalMulticluster.h index 3df4591998e7f..d0d58a6d1021d 100644 --- a/DataFormats/L1THGCal/interface/HGCalMulticluster.h +++ b/DataFormats/L1THGCal/interface/HGCalMulticluster.h @@ -53,7 +53,7 @@ namespace l1t { private: template - struct KeyGetter : std::unary_function { + struct KeyGetter { const typename Iter::value_type::first_type& operator()(const typename Iter::value_type& p) const { return p.first; } diff --git a/DataFormats/L1TParticleFlow/interface/datatypes.h b/DataFormats/L1TParticleFlow/interface/datatypes.h index c9101348b2ef5..39d938d6d025d 100644 --- a/DataFormats/L1TParticleFlow/interface/datatypes.h +++ b/DataFormats/L1TParticleFlow/interface/datatypes.h @@ -1,15 +1,6 @@ #ifndef DataFormats_L1TParticleFlow_datatypes_h #define DataFormats_L1TParticleFlow_datatypes_h -#if (!defined(__CLANG__)) && defined(__GNUC__) && defined(CMSSW_GIT_HASH) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wuninitialized" -#endif -#include -#if (!defined(__CLANG__)) && defined(__GNUC__) && defined(CMSSW_GIT_HASH) -#pragma GCC diagnostic pop -#endif - #include #include #include @@ -162,8 +153,14 @@ namespace l1ct { inline float floatPt(pt_t pt) { return pt.to_float(); } inline float floatPt(dpt_t pt) { return pt.to_float(); } inline float floatPt(pt2_t pt2) { return pt2.to_float(); } - inline int intPt(pt_t pt) { return (ap_ufixed<16, 14>(pt) << 2).to_int(); } - inline int intPt(dpt_t pt) { return (ap_fixed<18, 16>(pt) << 2).to_int(); } + inline int intPt(pt_t pt) { + ap_uint rawPt = pt.range(); + return rawPt.to_int(); + } + inline int intPt(dpt_t pt) { + ap_int rawPt = pt.range(); + return rawPt.to_int(); + } inline float floatEta(eta_t eta) { return eta.to_float() * ETAPHI_LSB; } inline float floatPhi(phi_t phi) { return phi.to_float() * ETAPHI_LSB; } inline float floatEta(tkdeta_t eta) { return eta.to_float() * ETAPHI_LSB; } @@ -181,9 +178,9 @@ namespace l1ct { inline pt_t makePt(int pt) { return ap_ufixed<16, 14>(pt) >> 2; } inline dpt_t makeDPt(int dpt) { return ap_fixed<18, 16>(dpt) >> 2; } - inline pt_t makePtFromFloat(float pt) { return pt_t(0.25 * round(pt * 4)); } + inline pt_t makePtFromFloat(float pt) { return pt_t(0.25 * std::round(pt * 4)); } inline dpt_t makeDPtFromFloat(float dpt) { return dpt_t(dpt); } - inline z0_t makeZ0(float z0) { return z0_t(round(z0 / Z0_LSB)); } + inline z0_t makeZ0(float z0) { return z0_t(std::round(z0 / Z0_LSB)); } inline ap_uint ptToInt(pt_t pt) { // note: this can be synthethized, e.g. when pT is used as intex in a LUT @@ -216,7 +213,7 @@ namespace l1ct { inline float maxAbsPhi() { return ((1 << (phi_t::width - 1)) - 1) * ETAPHI_LSB; } inline float maxAbsGlbEta() { return ((1 << (glbeta_t::width - 1)) - 1) * ETAPHI_LSB; } inline float maxAbsGlbPhi() { return ((1 << (glbphi_t::width - 1)) - 1) * ETAPHI_LSB; } - }; // namespace Scales + } // namespace Scales inline int dr2_int(eta_t eta1, phi_t phi1, eta_t eta2, phi_t phi2) { ap_int deta = (eta1 - eta2); diff --git a/DataFormats/L1TParticleFlow/interface/gt_datatypes.h b/DataFormats/L1TParticleFlow/interface/gt_datatypes.h index 366532962e25d..5d6ea94fedf14 100644 --- a/DataFormats/L1TParticleFlow/interface/gt_datatypes.h +++ b/DataFormats/L1TParticleFlow/interface/gt_datatypes.h @@ -156,8 +156,8 @@ namespace l1gt { } static const int BITWIDTH = 64; - inline ap_uint pack() const { - ap_uint ret; + inline ap_uint pack_ap() const { + ap_uint ret(0); unsigned int start = 0; pack_into_bits(ret, start, valid); pack_into_bits(ret, start, vector_pt); @@ -166,12 +166,19 @@ namespace l1gt { return ret; } + inline uint64_t pack() const { + ap_uint x = pack_ap(); + return (uint64_t)x; + } + inline static Sum unpack_ap(const ap_uint &src) { Sum ret; ret.initFromBits(src); return ret; } + inline static Sum unpack(const uint64_t &src) { return unpack_ap(src); } + inline void initFromBits(const ap_uint &src) { unsigned int start = 0; unpack_from_bits(src, start, valid); @@ -194,7 +201,7 @@ namespace l1gt { static const int BITWIDTH = 128; inline ap_uint pack_ap() const { - ap_uint ret; + ap_uint ret(0); unsigned int start = 0; pack_into_bits(ret, start, valid); pack_into_bits(ret, start, v3.pack()); @@ -333,7 +340,7 @@ namespace l1gt { } inline static Photon unpack(const std::array &src, int parity) { - ap_uint bits; + ap_uint bits(0); if (parity == 0) { bits(63, 0) = src[0]; bits(95, 64) = src[1]; diff --git a/DataFormats/L1Trigger/interface/P2GTCandidate.h b/DataFormats/L1Trigger/interface/P2GTCandidate.h index 9fdae587d3c41..1f385b12816f0 100644 --- a/DataFormats/L1Trigger/interface/P2GTCandidate.h +++ b/DataFormats/L1Trigger/interface/P2GTCandidate.h @@ -256,6 +256,27 @@ namespace l1t { ObjectType objectType() const { return objectType_; } + // Nano SimpleCandidateFlatTableProducer accessor functions + int hwPT_toInt() const { return hwPT().to_int(); } + int hwPhi_toInt() const { return hwPhi().to_int(); } + int hwEta_toInt() const { return hwEta().to_int(); } + int hwZ0_toInt() const { return hwZ0().to_int(); } + int hwIso_toInt() const { return hwIso().to_int(); } + int hwQual_toInt() const { return hwQual().to_int(); } + int hwCharge_toInt() const { return hwCharge().to_int(); } + int hwD0_toInt() const { return hwD0().to_int(); } + int hwBeta_toInt() const { return hwBeta().to_int(); } + int hwMass_toInt() const { return hwMass().to_int(); } + int hwIndex_toInt() const { return hwIndex().to_int(); } + int hwSeed_pT_toInt() const { return hwSeed_pT().to_int(); } + int hwSeed_z0_toInt() const { return hwSeed_z0().to_int(); } + int hwSca_sum_toInt() const { return hwSca_sum().to_int(); } + int hwNumber_of_tracks_toInt() const { return hwNumber_of_tracks().to_int(); } + int hwSum_pT_pv_toInt() const { return hwSum_pT_pv().to_int(); } + int hwType_toInt() const { return hwType().to_int(); } + int hwNumber_of_tracks_in_pv_toInt() const { return hwNumber_of_tracks_in_pv().to_int(); } + int hwNumber_of_tracks_not_in_pv_toInt() const { return hwNumber_of_tracks_not_in_pv().to_int(); } + bool operator==(const P2GTCandidate& rhs) const; bool operator!=(const P2GTCandidate& rhs) const; diff --git a/DataFormats/ParticleFlowReco/interface/PFRecHitSoA.h b/DataFormats/ParticleFlowReco/interface/PFRecHitSoA.h index 19dd4c54fca8d..cdb12377e4019 100644 --- a/DataFormats/ParticleFlowReco/interface/PFRecHitSoA.h +++ b/DataFormats/ParticleFlowReco/interface/PFRecHitSoA.h @@ -14,6 +14,7 @@ namespace reco { using PFRecHitsNeighbours = Eigen::Matrix; GENERATE_SOA_LAYOUT(PFRecHitSoALayout, SOA_COLUMN(uint32_t, detId), + SOA_COLUMN(uint32_t, denseId), SOA_COLUMN(float, energy), SOA_COLUMN(float, time), SOA_COLUMN(int, depth), diff --git a/DataFormats/Portable/interface/PortableCollection.h b/DataFormats/Portable/interface/PortableCollection.h index 86d117c02c81d..abc64b99cb0d3 100644 --- a/DataFormats/Portable/interface/PortableCollection.h +++ b/DataFormats/Portable/interface/PortableCollection.h @@ -1,13 +1,26 @@ #ifndef DataFormats_Portable_interface_PortableCollection_h #define DataFormats_Portable_interface_PortableCollection_h -#include "HeterogeneousCore/AlpakaInterface/interface/traits.h" +#include + +#include "DataFormats/Portable/interface/PortableHostCollection.h" +#include "DataFormats/Portable/interface/PortableDeviceCollection.h" +#include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h" +#include "HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h" namespace traits { // trait for a generic SoA-based product template >> - class PortableCollectionTrait; + struct PortableCollectionTrait { + using CollectionType = PortableDeviceCollection; + }; + + // specialise for host device + template + struct PortableCollectionTrait { + using CollectionType = PortableHostCollection; + }; } // namespace traits @@ -15,4 +28,28 @@ namespace traits { template >> using PortableCollection = typename traits::PortableCollectionTrait::CollectionType; +// define how to copy PortableCollection between host and device +namespace cms::alpakatools { + template + struct CopyToHost> { + template + static auto copyAsync(TQueue& queue, PortableDeviceCollection const& srcData) { + PortableHostCollection dstData(srcData->metadata().size(), queue); + alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); + return dstData; + } + }; + + template + struct CopyToDevice> { + template + static auto copyAsync(TQueue& queue, PortableHostCollection const& srcData) { + using TDevice = typename alpaka::trait::DevType::type; + PortableDeviceCollection dstData(srcData->metadata().size(), queue); + alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); + return dstData; + } + }; +} // namespace cms::alpakatools + #endif // DataFormats_Portable_interface_PortableCollection_h diff --git a/DataFormats/Portable/interface/PortableObject.h b/DataFormats/Portable/interface/PortableObject.h index 90a33b49d0f0a..c9aadb160bb05 100644 --- a/DataFormats/Portable/interface/PortableObject.h +++ b/DataFormats/Portable/interface/PortableObject.h @@ -3,18 +3,55 @@ #include -#include "HeterogeneousCore/AlpakaInterface/interface/traits.h" +#include + +#include "DataFormats/Portable/interface/PortableHostObject.h" +#include "DataFormats/Portable/interface/PortableDeviceObject.h" +#include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h" +#include "HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h" namespace traits { - // trait for a generic SoA-based product + // trait for a generic struct-based product template >> - class PortableObjectTrait; + struct PortableObjectTrait { + using ProductType = PortableDeviceObject; + }; + + // specialise for host device + template + struct PortableObjectTrait { + using ProductType = PortableHostObject; + }; } // namespace traits -// type alias for a generic SoA-based product +// type alias for a generic struct-based product template >> using PortableObject = typename traits::PortableObjectTrait::ProductType; +// define how to copy PortableObject between host and device +namespace cms::alpakatools { + template + struct CopyToHost> { + template + static auto copyAsync(TQueue& queue, PortableDeviceObject const& srcData) { + PortableHostObject dstData(queue); + alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); + return dstData; + } + }; + + template + struct CopyToDevice> { + template + static auto copyAsync(TQueue& queue, PortableHostObject const& srcData) { + using TDevice = typename alpaka::trait::DevType::type; + PortableDeviceObject dstData(queue); + alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); + return dstData; + } + }; +} // namespace cms::alpakatools + #endif // DataFormats_Portable_interface_PortableObject_h diff --git a/DataFormats/Portable/interface/alpaka/PortableCollection.h b/DataFormats/Portable/interface/alpaka/PortableCollection.h index 0a6abad96dfaf..1f9fa22e49cd8 100644 --- a/DataFormats/Portable/interface/alpaka/PortableCollection.h +++ b/DataFormats/Portable/interface/alpaka/PortableCollection.h @@ -4,11 +4,7 @@ #include #include "DataFormats/Portable/interface/PortableCollection.h" -#include "DataFormats/Portable/interface/PortableHostCollection.h" -#include "DataFormats/Portable/interface/PortableDeviceCollection.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h" -#include "HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h" // This header is not used by PortableCollection, but is included here to automatically // provide its content to users of ALPAKA_ACCELERATOR_NAMESPACE::PortableCollection. @@ -16,54 +12,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { -#if defined ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED - // ... or any other CPU-based accelerators - - // generic SoA-based product in host memory - template - using PortableCollection = ::PortableHostCollection; - -#else - - // generic SoA-based product in device memory + // generic SoA-based product in the device (that may be host) memory template - using PortableCollection = ::PortableDeviceCollection; - -#endif // ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED + using PortableCollection = ::PortableCollection; } // namespace ALPAKA_ACCELERATOR_NAMESPACE -namespace traits { - - // specialise the trait for the device provided by the ALPAKA_ACCELERATOR_NAMESPACE - template - class PortableCollectionTrait { - using CollectionType = ALPAKA_ACCELERATOR_NAMESPACE::PortableCollection; - }; - -} // namespace traits - -namespace cms::alpakatools { - template - struct CopyToHost> { - template - static auto copyAsync(TQueue& queue, PortableDeviceCollection const& srcData) { - PortableHostCollection dstData(srcData->metadata().size(), queue); - alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); - return dstData; - } - }; - - template - struct CopyToDevice> { - template - static auto copyAsync(TQueue& queue, PortableHostCollection const& srcData) { - using TDevice = typename alpaka::trait::DevType::type; - PortableDeviceCollection dstData(srcData->metadata().size(), queue); - alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); - return dstData; - } - }; -} // namespace cms::alpakatools - #endif // DataFormats_Portable_interface_alpaka_PortableCollection_h diff --git a/DataFormats/Portable/interface/alpaka/PortableObject.h b/DataFormats/Portable/interface/alpaka/PortableObject.h index 9b7ba65f8a460..417173176b203 100644 --- a/DataFormats/Portable/interface/alpaka/PortableObject.h +++ b/DataFormats/Portable/interface/alpaka/PortableObject.h @@ -4,11 +4,7 @@ #include #include "DataFormats/Portable/interface/PortableObject.h" -#include "DataFormats/Portable/interface/PortableHostObject.h" -#include "DataFormats/Portable/interface/PortableDeviceObject.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" -#include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h" -#include "HeterogeneousCore/AlpakaInterface/interface/CopyToHost.h" // This header is not used by PortableObject, but is included here to automatically // provide its content to users of ALPAKA_ACCELERATOR_NAMESPACE::PortableObject. @@ -16,54 +12,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { -#if defined ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED - // ... or any other CPU-based accelerators - - // generic SoA-based product in host memory - template - using PortableObject = ::PortableHostObject; - -#else - - // generic SoA-based product in device memory + // generic struct-based product in the device (that may be host) memory template - using PortableObject = ::PortableDeviceObject; - -#endif // ALPAKA_ACC_CPU_B_SEQ_T_SEQ_ENABLED + using PortableObject = ::PortableObject; } // namespace ALPAKA_ACCELERATOR_NAMESPACE -namespace traits { - - // specialise the trait for the device provided by the ALPAKA_ACCELERATOR_NAMESPACE - template - class PortableObjectTrait { - using ProductType = ALPAKA_ACCELERATOR_NAMESPACE::PortableObject; - }; - -} // namespace traits - -namespace cms::alpakatools { - template - struct CopyToHost> { - template - static auto copyAsync(TQueue& queue, PortableDeviceObject const& srcData) { - PortableHostObject dstData(queue); - alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); - return dstData; - } - }; - - template - struct CopyToDevice> { - template - static auto copyAsync(TQueue& queue, PortableHostObject const& srcData) { - using TDevice = typename alpaka::trait::DevType::type; - PortableDeviceObject dstData(queue); - alpaka::memcpy(queue, dstData.buffer(), srcData.buffer()); - return dstData; - } - }; -} // namespace cms::alpakatools - #endif // DataFormats_Portable_interface_alpaka_PortableObject_h diff --git a/DataFormats/Portable/test/BuildFile.xml b/DataFormats/Portable/test/BuildFile.xml new file mode 100644 index 0000000000000..ef2f6603f62cc --- /dev/null +++ b/DataFormats/Portable/test/BuildFile.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/DataFormats/Portable/test/portableCollectionOnHost.cc b/DataFormats/Portable/test/portableCollectionOnHost.cc new file mode 100644 index 0000000000000..aa3d56f9d0539 --- /dev/null +++ b/DataFormats/Portable/test/portableCollectionOnHost.cc @@ -0,0 +1,25 @@ +#include + +#include "DataFormats/Portable/interface/PortableCollection.h" +#include "DataFormats/Portable/interface/PortableHostCollection.h" +#include "DataFormats/SoATemplate/interface/SoACommon.h" +#include "DataFormats/SoATemplate/interface/SoALayout.h" +#include "DataFormats/SoATemplate/interface/SoAView.h" + +namespace { + GENERATE_SOA_LAYOUT(TestLayout, SOA_COLUMN(double, x), SOA_COLUMN(int32_t, id)) + + using TestSoA = TestLayout<>; + + constexpr auto s_tag = "[PortableCollection]"; +} // namespace + +// This test is currently mostly about the code compiling +TEST_CASE("Use of PortableCollection on host code", s_tag) { + auto const size = 10; + PortableCollection coll(size, cms::alpakatools::host()); + + SECTION("Tests") { REQUIRE(coll->metadata().size() == size); } + + static_assert(std::is_same_v, PortableHostCollection>); +} diff --git a/DataFormats/Portable/test/portableObjectOnHost.cc b/DataFormats/Portable/test/portableObjectOnHost.cc new file mode 100644 index 0000000000000..698605b57f465 --- /dev/null +++ b/DataFormats/Portable/test/portableObjectOnHost.cc @@ -0,0 +1,23 @@ +#include + +#include "DataFormats/Portable/interface/PortableObject.h" +#include "DataFormats/Portable/interface/PortableHostObject.h" + +namespace { + struct Test { + int a; + float b; + }; + + constexpr auto s_tag = "[PortableObject]"; +} // namespace + +// This test is currently mostly about the code compiling +TEST_CASE("Use of PortableObject on host code", s_tag) { + PortableObject obj(cms::alpakatools::host()); + obj->a = 42; + + SECTION("Tests") { REQUIRE(obj->a == 42); } + + static_assert(std::is_same_v, PortableHostObject>); +} diff --git a/DataFormats/Portable/test/test_catch2_main.cc b/DataFormats/Portable/test/test_catch2_main.cc new file mode 100644 index 0000000000000..b3143fbb1788b --- /dev/null +++ b/DataFormats/Portable/test/test_catch2_main.cc @@ -0,0 +1,2 @@ +#define CATCH_CONFIG_MAIN +#include diff --git a/DataFormats/Scouting/interface/Run3ScoutingElectron.h b/DataFormats/Scouting/interface/Run3ScoutingElectron.h index 6076b09882f8d..2216438adf077 100644 --- a/DataFormats/Scouting/interface/Run3ScoutingElectron.h +++ b/DataFormats/Scouting/interface/Run3ScoutingElectron.h @@ -13,11 +13,18 @@ class Run3ScoutingElectron { float eta, float phi, float m, + float rawEnergy, + float preshowerEnergy, + float corrEcalEnergyError, std::vector trkd0, std::vector trkdz, std::vector trkpt, std::vector trketa, std::vector trkphi, + std::vector trkpMode, + std::vector trketaMode, + std::vector trkphiMode, + std::vector trkqoverpModeError, std::vector trkchi2overndf, float dEtaIn, float dPhiIn, @@ -26,6 +33,7 @@ class Run3ScoutingElectron { float ooEMOop, int missingHits, std::vector trkcharge, + float trackfbrem, float ecalIso, float hcalIso, float trackIso, @@ -33,6 +41,8 @@ class Run3ScoutingElectron { float sMin, float sMaj, uint32_t seedId, + uint32_t nClusters, + uint32_t nCrystals, std::vector energyMatrix, std::vector detIds, std::vector timingMatrix, @@ -41,11 +51,18 @@ class Run3ScoutingElectron { eta_(eta), phi_(phi), m_(m), + rawEnergy_(rawEnergy), + preshowerEnergy_(preshowerEnergy), + corrEcalEnergyError_(corrEcalEnergyError), trkd0_(std::move(trkd0)), trkdz_(std::move(trkdz)), trkpt_(std::move(trkpt)), trketa_(std::move(trketa)), trkphi_(std::move(trkphi)), + trkpMode_(std::move(trkpMode)), + trketaMode_(std::move(trketaMode)), + trkphiMode_(std::move(trkphiMode)), + trkqoverpModeError_(std::move(trkqoverpModeError)), trkchi2overndf_(std::move(trkchi2overndf)), dEtaIn_(dEtaIn), dPhiIn_(dPhiIn), @@ -54,6 +71,7 @@ class Run3ScoutingElectron { ooEMOop_(ooEMOop), missingHits_(missingHits), trkcharge_(std::move(trkcharge)), + trackfbrem_(trackfbrem), ecalIso_(ecalIso), hcalIso_(hcalIso), trackIso_(trackIso), @@ -61,6 +79,8 @@ class Run3ScoutingElectron { sMin_(sMin), sMaj_(sMaj), seedId_(seedId), + nClusters_(nClusters), + nCrystals_(nCrystals), energyMatrix_(std::move(energyMatrix)), detIds_(std::move(detIds)), timingMatrix_(std::move(timingMatrix)), @@ -71,11 +91,18 @@ class Run3ScoutingElectron { eta_(0), phi_(0), m_(0), + rawEnergy_(0), + preshowerEnergy_(0), + corrEcalEnergyError_(0), trkd0_(0), trkdz_(0), trkpt_(0), trketa_(0), trkphi_(0), + trkpMode_(0), + trketaMode_(0), + trkphiMode_(0), + trkqoverpModeError_(0), trkchi2overndf_(0), dEtaIn_(0), dPhiIn_(0), @@ -84,6 +111,7 @@ class Run3ScoutingElectron { ooEMOop_(0), missingHits_(0), trkcharge_(0), + trackfbrem_(0), ecalIso_(0), hcalIso_(0), trackIso_(0), @@ -91,6 +119,8 @@ class Run3ScoutingElectron { sMin_(0), sMaj_(0), seedId_(0), + nClusters_(0), + nCrystals_(0), rechitZeroSuppression_(false) {} //accessor functions @@ -98,11 +128,18 @@ class Run3ScoutingElectron { float eta() const { return eta_; } float phi() const { return phi_; } float m() const { return m_; } + float rawEnergy() const { return rawEnergy_; } + float preshowerEnergy() const { return preshowerEnergy_; } + float corrEcalEnergyError() const { return corrEcalEnergyError_; } std::vector const& trkd0() const { return trkd0_; } std::vector const& trkdz() const { return trkdz_; } std::vector const& trkpt() const { return trkpt_; } std::vector const& trketa() const { return trketa_; } std::vector const& trkphi() const { return trkphi_; } + std::vector const& trkpMode() const { return trkpMode_; } + std::vector const& trketaMode() const { return trketaMode_; } + std::vector const& trkphiMode() const { return trkphiMode_; } + std::vector const& trkqoverpModeError() const { return trkqoverpModeError_; } std::vector const& trkchi2overndf() const { return trkchi2overndf_; } float dEtaIn() const { return dEtaIn_; } float dPhiIn() const { return dPhiIn_; } @@ -111,6 +148,7 @@ class Run3ScoutingElectron { float ooEMOop() const { return ooEMOop_; } int missingHits() const { return missingHits_; } std::vector const& trkcharge() const { return trkcharge_; } + float trackfbrem() const { return trackfbrem_; } float ecalIso() const { return ecalIso_; } float hcalIso() const { return hcalIso_; } float trackIso() const { return trackIso_; } @@ -118,6 +156,8 @@ class Run3ScoutingElectron { float sMin() const { return sMin_; } float sMaj() const { return sMaj_; } uint32_t seedId() const { return seedId_; } + uint32_t nClusters() const { return nClusters_; } + uint32_t nCrystals() const { return nCrystals_; } std::vector const& energyMatrix() const { return energyMatrix_; } std::vector const& detIds() const { return detIds_; } std::vector const& timingMatrix() const { return timingMatrix_; } @@ -128,11 +168,18 @@ class Run3ScoutingElectron { float eta_; float phi_; float m_; + float rawEnergy_; + float preshowerEnergy_; + float corrEcalEnergyError_; std::vector trkd0_; std::vector trkdz_; std::vector trkpt_; std::vector trketa_; std::vector trkphi_; + std::vector trkpMode_; + std::vector trketaMode_; + std::vector trkphiMode_; + std::vector trkqoverpModeError_; std::vector trkchi2overndf_; float dEtaIn_; float dPhiIn_; @@ -141,6 +188,7 @@ class Run3ScoutingElectron { float ooEMOop_; int missingHits_; std::vector trkcharge_; + float trackfbrem_; float ecalIso_; float hcalIso_; float trackIso_; @@ -148,6 +196,8 @@ class Run3ScoutingElectron { float sMin_; float sMaj_; uint32_t seedId_; + uint32_t nClusters_; + uint32_t nCrystals_; std::vector energyMatrix_; std::vector detIds_; std::vector timingMatrix_; diff --git a/DataFormats/Scouting/interface/Run3ScoutingPhoton.h b/DataFormats/Scouting/interface/Run3ScoutingPhoton.h index 44399ef32a907..b0ccc3ef6530c 100644 --- a/DataFormats/Scouting/interface/Run3ScoutingPhoton.h +++ b/DataFormats/Scouting/interface/Run3ScoutingPhoton.h @@ -13,6 +13,9 @@ class Run3ScoutingPhoton { float eta, float phi, float m, + float rawEnergy, + float preshowerEnergy, + float corrEcalEnergyError, float sigmaIetaIeta, float hOverE, float ecalIso, @@ -22,6 +25,8 @@ class Run3ScoutingPhoton { float sMin, float sMaj, uint32_t seedId, + uint32_t nClusters, + uint32_t nCrystals, std::vector energyMatrix, std::vector detIds, std::vector timingMatrix, @@ -30,6 +35,9 @@ class Run3ScoutingPhoton { eta_(eta), phi_(phi), m_(m), + rawEnergy_(rawEnergy), + preshowerEnergy_(preshowerEnergy), + corrEcalEnergyError_(corrEcalEnergyError), sigmaIetaIeta_(sigmaIetaIeta), hOverE_(hOverE), ecalIso_(ecalIso), @@ -39,6 +47,8 @@ class Run3ScoutingPhoton { sMin_(sMin), sMaj_(sMaj), seedId_(seedId), + nClusters_(nClusters), + nCrystals_(nCrystals), energyMatrix_(std::move(energyMatrix)), detIds_(std::move(detIds)), timingMatrix_(std::move(timingMatrix)), @@ -49,6 +59,9 @@ class Run3ScoutingPhoton { eta_(0), phi_(0), m_(0), + rawEnergy_(0), + preshowerEnergy_(0), + corrEcalEnergyError_(0), sigmaIetaIeta_(0), hOverE_(0), ecalIso_(0), @@ -58,6 +71,8 @@ class Run3ScoutingPhoton { sMin_(0), sMaj_(0), seedId_(0), + nClusters_(0), + nCrystals_(0), energyMatrix_(0), timingMatrix_(0), rechitZeroSuppression_(false) {} @@ -67,6 +82,9 @@ class Run3ScoutingPhoton { float eta() const { return eta_; } float phi() const { return phi_; } float m() const { return m_; } + float rawEnergy() const { return rawEnergy_; } + float preshowerEnergy() const { return preshowerEnergy_; } + float corrEcalEnergyError() const { return corrEcalEnergyError_; } float sigmaIetaIeta() const { return sigmaIetaIeta_; } float hOverE() const { return hOverE_; } float ecalIso() const { return ecalIso_; } @@ -76,6 +94,8 @@ class Run3ScoutingPhoton { float sMin() const { return sMin_; } float sMaj() const { return sMaj_; } uint32_t seedId() const { return seedId_; } + uint32_t nClusters() const { return nClusters_; } + uint32_t nCrystals() const { return nCrystals_; } std::vector const& energyMatrix() const { return energyMatrix_; } std::vector const& detIds() const { return detIds_; } std::vector const& timingMatrix() const { return timingMatrix_; } @@ -86,6 +106,9 @@ class Run3ScoutingPhoton { float eta_; float phi_; float m_; + float rawEnergy_; + float preshowerEnergy_; + float corrEcalEnergyError_; float sigmaIetaIeta_; float hOverE_; float ecalIso_; @@ -95,6 +118,8 @@ class Run3ScoutingPhoton { float sMin_; float sMaj_; uint32_t seedId_; + uint32_t nClusters_; + uint32_t nCrystals_; std::vector energyMatrix_; std::vector detIds_; std::vector timingMatrix_; diff --git a/DataFormats/Scouting/src/classes_def.xml b/DataFormats/Scouting/src/classes_def.xml index abeb9b6f534b3..fd6965bf7072f 100644 --- a/DataFormats/Scouting/src/classes_def.xml +++ b/DataFormats/Scouting/src/classes_def.xml @@ -2,11 +2,12 @@ - + + @@ -50,10 +51,11 @@ - + + diff --git a/DataFormats/Scouting/test/TestReadRun3Scouting.cc b/DataFormats/Scouting/test/TestReadRun3Scouting.cc index 2e092860cae62..5ccd4bab61993 100644 --- a/DataFormats/Scouting/test/TestReadRun3Scouting.cc +++ b/DataFormats/Scouting/test/TestReadRun3Scouting.cc @@ -83,6 +83,7 @@ namespace edmtest { const std::vector expectedPFJetIntegralValues_; const edm::EDGetTokenT> pfJetsToken_; + const int inputPhotonClassVersion_; const std::vector expectedPhotonFloatingPointValues_; const std::vector expectedPhotonIntegralValues_; const edm::EDGetTokenT> photonsToken_; @@ -114,6 +115,7 @@ namespace edmtest { expectedPFJetFloatingPointValues_(iPSet.getParameter>("expectedPFJetFloatingPointValues")), expectedPFJetIntegralValues_(iPSet.getParameter>("expectedPFJetIntegralValues")), pfJetsToken_(consumes(iPSet.getParameter("pfJetsTag"))), + inputPhotonClassVersion_(iPSet.getParameter("photonClassVersion")), expectedPhotonFloatingPointValues_( iPSet.getParameter>("expectedPhotonFloatingPointValues")), expectedPhotonIntegralValues_(iPSet.getParameter>("expectedPhotonIntegralValues")), @@ -128,12 +130,12 @@ namespace edmtest { if (expectedCaloJetsValues_.size() != 16) { throwWithMessageFromConstructor("test configuration error, expectedCaloJetsValues must have size 16"); } - if (expectedElectronFloatingPointValues_.size() != 25) { + if (expectedElectronFloatingPointValues_.size() != 33) { throwWithMessageFromConstructor( - "test configuration error, expectedElectronFloatingPointValues must have size 25"); + "test configuration error, expectedElectronFloatingPointValues must have size 33"); } - if (expectedElectronIntegralValues_.size() != 6) { - throwWithMessageFromConstructor("test configuration error, expectedElectronIntegralValues must have size 6"); + if (expectedElectronIntegralValues_.size() != 8) { + throwWithMessageFromConstructor("test configuration error, expectedElectronIntegralValues must have size 8"); } if (expectedMuonFloatingPointValues_.size() != 37) { throwWithMessageFromConstructor("test configuration error, expectedMuonFloatingPointValues must have size 37"); @@ -154,11 +156,11 @@ namespace edmtest { if (expectedPFJetIntegralValues_.size() != 8) { throwWithMessageFromConstructor("test configuration error, expectedPFJetIntegralValues must have size 8"); } - if (expectedPhotonFloatingPointValues_.size() != 14) { - throwWithMessageFromConstructor("test configuration error, expectedPhotonFloatingPointValues must have size 14"); + if (expectedPhotonFloatingPointValues_.size() != 17) { + throwWithMessageFromConstructor("test configuration error, expectedPhotonFloatingPointValues must have size 17"); } - if (expectedPhotonIntegralValues_.size() != 3) { - throwWithMessageFromConstructor("test configuration error, expectedPhotonIntegralValues must have size 3"); + if (expectedPhotonIntegralValues_.size() != 5) { + throwWithMessageFromConstructor("test configuration error, expectedPhotonIntegralValues must have size 5"); } if (expectedTrackFloatingPointValues_.size() != 29) { throwWithMessageFromConstructor("test configuration error, expectedTrackFloatingPointValues must have size 29"); @@ -202,6 +204,7 @@ namespace edmtest { desc.add>("expectedPFJetFloatingPointValues"); desc.add>("expectedPFJetIntegralValues"); desc.add("pfJetsTag"); + desc.add("photonClassVersion"); desc.add>("expectedPhotonFloatingPointValues"); desc.add>("expectedPhotonIntegralValues"); desc.add("photonsTag"); @@ -393,7 +396,7 @@ namespace edmtest { if (electron.rechitZeroSuppression() != static_cast((expectedElectronIntegralValues_[4] + iOffset) % 2)) { throwWithMessage("analyzeElectrons, rechitZeroSuppression does not equal expected value"); } - if (inputElectronClassVersion_ == 6) { + if (inputElectronClassVersion_ == 6 || inputElectronClassVersion_ == 7) { if (electron.trkd0().size() != vectorSize) { throwWithMessage("analyzeElectrons, trkd0 does not have expected size"); } @@ -465,6 +468,66 @@ namespace edmtest { ++j; } } + if (inputElectronClassVersion_ == 7) { + if (electron.rawEnergy() != expectedElectronFloatingPointValues_[25] + offset) { + throwWithMessage("analyzeElectrons, rawEnergy does not equal expected value"); + } + if (electron.preshowerEnergy() != expectedElectronFloatingPointValues_[26] + offset) { + throwWithMessage("analyzeElectrons, preshowerEnergy does not equal expected value"); + } + if (electron.corrEcalEnergyError() != expectedElectronFloatingPointValues_[27] + offset) { + throwWithMessage("analyzeElectrons, corrEcalEnergyError does not equal expected value"); + } + if (electron.trkpMode().size() != vectorSize) { + throwWithMessage("analyzeElectrons, trkpMode does not have expected size"); + } + j = 0; + for (auto const& val : electron.trkpMode()) { + if (val != expectedElectronFloatingPointValues_[28] + offset + 10 * j) { + throwWithMessage("analyzeElectrons, trkpMode does not contain expected value"); + } + ++j; + } + if (electron.trketaMode().size() != vectorSize) { + throwWithMessage("analyzeElectrons, trketaMode does not have expected size"); + } + j = 0; + for (auto const& val : electron.trketaMode()) { + if (val != expectedElectronFloatingPointValues_[29] + offset + 10 * j) { + throwWithMessage("analyzeElectrons, trketaMode does not contain expected value"); + } + ++j; + } + if (electron.trkphiMode().size() != vectorSize) { + throwWithMessage("analyzeElectrons, trkphiMode does not have expected size"); + } + j = 0; + for (auto const& val : electron.trkphiMode()) { + if (val != expectedElectronFloatingPointValues_[30] + offset + 10 * j) { + throwWithMessage("analyzeElectrons, trkphiMode does not contain expected value"); + } + ++j; + } + if (electron.trkqoverpModeError().size() != vectorSize) { + throwWithMessage("analyzeElectrons, trkqoverpModeError does not have expected size"); + } + j = 0; + for (auto const& val : electron.trkqoverpModeError()) { + if (val != expectedElectronFloatingPointValues_[31] + offset + 10 * j) { + throwWithMessage("analyzeElectrons, trkqoverpModeError does not contain expected value"); + } + ++j; + } + if (electron.trackfbrem() != expectedElectronFloatingPointValues_[32] + offset) { + throwWithMessage("analyzeElectrons, trackfbrem does not equal expected value"); + } + if (electron.nClusters() != static_cast(expectedElectronIntegralValues_[6] + iOffset)) { + throwWithMessage("analyzeElectrons, nClusters does not equal expected value"); + } + if (electron.nCrystals() != static_cast(expectedElectronIntegralValues_[7] + iOffset)) { + throwWithMessage("analyzeElectrons, nCrystals does not equal expected value"); + } + } ++i; } } @@ -917,6 +980,23 @@ namespace edmtest { if (photon.rechitZeroSuppression() != static_cast((expectedPhotonIntegralValues_[2] + iOffset) % 2)) { throwWithMessage("analyzePhotons, rechitZeroSuppression does not equal expected value"); } + if (inputPhotonClassVersion_ == 6) { + if (photon.rawEnergy() != expectedPhotonFloatingPointValues_[14] + offset) { + throwWithMessage("analyzePhotons, rawEnergy does not equal expected value"); + } + if (photon.preshowerEnergy() != expectedPhotonFloatingPointValues_[15] + offset) { + throwWithMessage("analyzePhotons, preshowerEnergy does not equal expected value"); + } + if (photon.corrEcalEnergyError() != expectedPhotonFloatingPointValues_[16] + offset) { + throwWithMessage("analyzePhotons, corrEcalEnergyError does not equal expected value"); + } + if (photon.nClusters() != static_cast(expectedPhotonIntegralValues_[3] + iOffset)) { + throwWithMessage("analyzePhotons, nClusters does not equal expected value"); + } + if (photon.nCrystals() != static_cast(expectedPhotonIntegralValues_[4] + iOffset)) { + throwWithMessage("analyzePhotons, nCrystals does not equal expected value"); + } + } ++i; } } diff --git a/DataFormats/Scouting/test/TestRun3ScoutingFormats.sh b/DataFormats/Scouting/test/TestRun3ScoutingFormats.sh index b6a773b528929..0efba27c14406 100755 --- a/DataFormats/Scouting/test/TestRun3ScoutingFormats.sh +++ b/DataFormats/Scouting/test/TestRun3ScoutingFormats.sh @@ -48,12 +48,12 @@ cmsRun ${LOCAL_TEST_DIR}/test_readRun3Scouting_cfg.py || die "Failure using test file=testRun3Scouting_v3_v5_v3_v4_v5_v3_v5_v3_v3_CMSSW_12_4_0.root inputfile=$(edmFileInPath DataFormats/Scouting/data/$file) || die "Failure edmFileInPath DataFormats/Scouting/data/$file" $? -argsPassedToPython="--inputFile $inputfile --outputFileName testRun3Scouting2_CMSSW_12_4_0.root --electronVersion 5" +argsPassedToPython="--inputFile $inputfile --outputFileName testRun3Scouting2_CMSSW_12_4_0.root --electronVersion 5 --photonVersion 5" cmsRun ${LOCAL_TEST_DIR}/test_readRun3Scouting_cfg.py $argsPassedToPython || die "Failed to read old file $file" $? file=testRun3Scouting_v3_v6_v3_v4_v5_v3_v5_v3_v3_CMSSW_13_0_3.root inputfile=$(edmFileInPath DataFormats/Scouting/data/$file) || die "Failure edmFileInPath DataFormats/Scouting/data/$file" $? -argsPassedToPython="--inputFile $inputfile --outputFileName testRun3Scouting2_CMSSW_13_0_3.root --electronVersion 6" +argsPassedToPython="--inputFile $inputfile --outputFileName testRun3Scouting2_CMSSW_13_0_3.root --electronVersion 6 --photonVersion 5" cmsRun ${LOCAL_TEST_DIR}/test_readRun3Scouting_cfg.py $argsPassedToPython || die "Failed to read old file $file" $? exit 0 diff --git a/DataFormats/Scouting/test/TestWriteRun3Scouting.cc b/DataFormats/Scouting/test/TestWriteRun3Scouting.cc index ae3f07be99cb6..a6fc0867c1848 100644 --- a/DataFormats/Scouting/test/TestWriteRun3Scouting.cc +++ b/DataFormats/Scouting/test/TestWriteRun3Scouting.cc @@ -118,11 +118,11 @@ namespace edmtest { if (caloJetsValues_.size() != 16) { throwWithMessage("caloJetsValues must have 16 elements and it does not"); } - if (electronsFloatingPointValues_.size() != 25) { - throwWithMessage("electronsFloatingPointValues must have 25 elements and it does not"); + if (electronsFloatingPointValues_.size() != 33) { + throwWithMessage("electronsFloatingPointValues must have 33 elements and it does not"); } - if (electronsIntegralValues_.size() != 6) { - throwWithMessage("electronsIntegralValues must have 6 elements and it does not"); + if (electronsIntegralValues_.size() != 8) { + throwWithMessage("electronsIntegralValues must have 8 elements and it does not"); } if (muonsFloatingPointValues_.size() != 37) { throwWithMessage("muonsFloatingPointValues must have 37 elements and it does not"); @@ -142,11 +142,11 @@ namespace edmtest { if (pfJetsIntegralValues_.size() != 8) { throwWithMessage("pfJetsIntegralValues must have 8 elements and it does not"); } - if (photonsFloatingPointValues_.size() != 14) { - throwWithMessage("photonsFloatingPointValues must have 14 elements and it does not"); + if (photonsFloatingPointValues_.size() != 17) { + throwWithMessage("photonsFloatingPointValues must have 17 elements and it does not"); } - if (photonsIntegralValues_.size() != 3) { - throwWithMessage("photonsIntegralValues must have 3 elements and it does not"); + if (photonsIntegralValues_.size() != 5) { + throwWithMessage("photonsIntegralValues must have 5 elements and it does not"); } if (tracksFloatingPointValues_.size() != 29) { throwWithMessage("tracksFloatingPointValues must have 29 elements and it does not"); @@ -233,7 +233,7 @@ namespace edmtest { double offset = static_cast(iEvent.id().event() + i); int iOffset = static_cast(iEvent.id().event() + i); - // Note the first seven of these vectors use an out of sequence index + // Note the first eleven of these vectors use an out of sequence index // (starting at 19 or 5) because they are data members added in a format // change. In the CMSSW_12_4_0 version, they didn't exist. // Also the index values 4 and 5 in electronsFloatingPointValues_ @@ -244,6 +244,10 @@ namespace edmtest { std::vector trkpt; std::vector trketa; std::vector trkphi; + std::vector trkpMode; + std::vector trketaMode; + std::vector trkphiMode; + std::vector trkqoverpModeError; std::vector trkchi2overndf; std::vector trkcharge; std::vector energyMatrix; @@ -254,6 +258,10 @@ namespace edmtest { trkpt.reserve(vectorSize); trketa.reserve(vectorSize); trkphi.reserve(vectorSize); + trkpMode.reserve(vectorSize); + trketaMode.reserve(vectorSize); + trkphiMode.reserve(vectorSize); + trkqoverpModeError.reserve(vectorSize); trkchi2overndf.reserve(vectorSize); trkcharge.reserve(vectorSize); energyMatrix.reserve(vectorSize); @@ -265,6 +273,10 @@ namespace edmtest { trkpt.push_back(static_cast(electronsFloatingPointValues_[21] + offset + j * 10)); trketa.push_back(static_cast(electronsFloatingPointValues_[22] + offset + j * 10)); trkphi.push_back(static_cast(electronsFloatingPointValues_[23] + offset + j * 10)); + trkpMode.push_back(static_cast(electronsFloatingPointValues_[28] + offset + j * 10)); + trketaMode.push_back(static_cast(electronsFloatingPointValues_[29] + offset + j * 10)); + trkphiMode.push_back(static_cast(electronsFloatingPointValues_[30] + offset + j * 10)); + trkqoverpModeError.push_back(static_cast(electronsFloatingPointValues_[31] + offset + j * 10)); trkchi2overndf.push_back(static_cast(electronsFloatingPointValues_[24] + offset + j * 10)); trkcharge.push_back(static_cast(electronsIntegralValues_[5] + offset + j * 10)); energyMatrix.push_back(static_cast(electronsFloatingPointValues_[17] + offset + j * 10)); @@ -275,11 +287,18 @@ namespace edmtest { static_cast(electronsFloatingPointValues_[1] + offset), static_cast(electronsFloatingPointValues_[2] + offset), static_cast(electronsFloatingPointValues_[3] + offset), + static_cast(electronsFloatingPointValues_[25] + offset), + static_cast(electronsFloatingPointValues_[26] + offset), + static_cast(electronsFloatingPointValues_[27] + offset), std::move(trkd0), std::move(trkdz), std::move(trkpt), std::move(trketa), std::move(trkphi), + std::move(trkpMode), + std::move(trketaMode), + std::move(trkphiMode), + std::move(trkqoverpModeError), std::move(trkchi2overndf), static_cast(electronsFloatingPointValues_[6] + offset), static_cast(electronsFloatingPointValues_[7] + offset), @@ -288,6 +307,7 @@ namespace edmtest { static_cast(electronsFloatingPointValues_[10] + offset), electronsIntegralValues_[0] + iOffset, std::move(trkcharge), + static_cast(electronsFloatingPointValues_[32] + offset), static_cast(electronsFloatingPointValues_[11] + offset), static_cast(electronsFloatingPointValues_[12] + offset), static_cast(electronsFloatingPointValues_[13] + offset), @@ -295,6 +315,8 @@ namespace edmtest { static_cast(electronsFloatingPointValues_[15] + offset), static_cast(electronsFloatingPointValues_[16] + offset), static_cast(electronsIntegralValues_[2] + iOffset), + static_cast(electronsIntegralValues_[6] + iOffset), + static_cast(electronsIntegralValues_[7] + iOffset), std::move(energyMatrix), std::move(detIds), std::move(timingMatrix), @@ -482,6 +504,9 @@ namespace edmtest { static_cast(photonsFloatingPointValues_[1] + offset), static_cast(photonsFloatingPointValues_[2] + offset), static_cast(photonsFloatingPointValues_[3] + offset), + static_cast(photonsFloatingPointValues_[14] + offset), + static_cast(photonsFloatingPointValues_[15] + offset), + static_cast(photonsFloatingPointValues_[16] + offset), static_cast(photonsFloatingPointValues_[4] + offset), static_cast(photonsFloatingPointValues_[5] + offset), static_cast(photonsFloatingPointValues_[6] + offset), @@ -491,6 +516,8 @@ namespace edmtest { static_cast(photonsFloatingPointValues_[10] + offset), static_cast(photonsFloatingPointValues_[11] + offset), static_cast(photonsIntegralValues_[0] + iOffset), + static_cast(photonsIntegralValues_[3] + iOffset), + static_cast(photonsIntegralValues_[4] + iOffset), std::move(energyMatrix), std::move(detIds), std::move(timingMatrix), diff --git a/DataFormats/Scouting/test/create_Run3Scouting_test_file_cfg.py b/DataFormats/Scouting/test/create_Run3Scouting_test_file_cfg.py index 64863ed18059b..5314acfe0324c 100644 --- a/DataFormats/Scouting/test/create_Run3Scouting_test_file_cfg.py +++ b/DataFormats/Scouting/test/create_Run3Scouting_test_file_cfg.py @@ -23,10 +23,12 @@ 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0, - 210.0, 220.0, 230.0, 240.0, 250.0 + 210.0, 220.0, 230.0, 240.0, 250.0, + 260.0, 270.0, 280.0, 290.0, 300.0, + 310.0, 320.0, 330.0 ), electronsIntegralValues = cms.vint32( - 10, 20, 30, 40, 50, 60 + 10, 20, 30, 40, 50, 60, 70, 80 ), muonsFloatingPointValues = cms.vdouble( 10.0, 20.0, 30.0, 40.0, 50.0, @@ -66,10 +68,11 @@ photonsFloatingPointValues = cms.vdouble( 14.0, 23.0, 33.0, 43.0, 53.0, 63.0, 73.0, 83.0, 93.0, 103.0, - 113.0, 123.0, 133.0, 143.0 + 113.0, 123.0, 133.0, 143.0, 153.0, + 163.0, 173.0 ), photonsIntegralValues = cms.vint32( - 14, 23, 33 + 14, 23, 33, 43, 53 ), tracksFloatingPointValues = cms.vdouble( 14.0, 24.0, 34.0, 44.0, 54.0, diff --git a/DataFormats/Scouting/test/test_readRun3Scouting_cfg.py b/DataFormats/Scouting/test/test_readRun3Scouting_cfg.py index bee221a1c4c8b..01ee20dc64fb2 100644 --- a/DataFormats/Scouting/test/test_readRun3Scouting_cfg.py +++ b/DataFormats/Scouting/test/test_readRun3Scouting_cfg.py @@ -4,7 +4,8 @@ parser = argparse.ArgumentParser(prog=sys.argv[0], description='Test Run 3 Scouting data formats') -parser.add_argument("--electronVersion", type=int, help="electron data format version (default: 6)", default=6) +parser.add_argument("--electronVersion", type=int, help="electron data format version (default: 7)", default=7) +parser.add_argument("--photonVersion", type=int, help="photon data format version (default: 6)", default=6) parser.add_argument("--inputFile", type=str, help="Input file name (default: testRun3Scouting.root)", default="testRun3Scouting.root") parser.add_argument("--outputFileName", type=str, help="Output file name (default: testRun3Scouting2.root)", default="testRun3Scouting2.root") args = parser.parse_args() @@ -28,8 +29,10 @@ 60.0, 70.0, 80.0, 90.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, 180.0, 190.0, 200.0, - 210.0, 220.0, 230.0, 240.0, 250.0), - expectedElectronIntegralValues = cms.vint32(10, 20, 30, 40, 50, 60), + 210.0, 220.0, 230.0, 240.0, 250.0, + 260.0, 270.0, 280.0, 290.0, 300.0, + 310.0, 320.0, 330.0), + expectedElectronIntegralValues = cms.vint32(10, 20, 30, 40, 50, 60, 70, 80), electronsTag = cms.InputTag("run3ScoutingProducer", "", "PROD"), expectedMuonFloatingPointValues = cms.vdouble( 10.0, 20.0, 30.0, 40.0, 50.0, @@ -69,13 +72,15 @@ 62, 72, 82 ), pfJetsTag = cms.InputTag("run3ScoutingProducer", "", "PROD"), + photonClassVersion = cms.int32(args.photonVersion), expectedPhotonFloatingPointValues = cms.vdouble( 14.0, 23.0, 33.0, 43.0, 53.0, 63.0, 73.0, 83.0, 93.0, 103.0, - 113.0, 123.0, 133.0, 143.0 + 113.0, 123.0, 133.0, 143.0, 153.0, + 163.0, 173.0 ), expectedPhotonIntegralValues = cms.vint32( - 14, 23, 33 + 14, 23, 33, 43, 53 ), photonsTag = cms.InputTag("run3ScoutingProducer", "", "PROD"), expectedTrackFloatingPointValues = cms.vdouble( diff --git a/DataFormats/SoATemplate/test/SoALayoutAndView_t.hip.cc b/DataFormats/SoATemplate/test/SoALayoutAndView_t.hip.cc index d156e9000c518..1965d0757d358 100644 --- a/DataFormats/SoATemplate/test/SoALayoutAndView_t.hip.cc +++ b/DataFormats/SoATemplate/test/SoALayoutAndView_t.hip.cc @@ -125,7 +125,7 @@ int main(void) { // Allocate buffer and store on host size_t hostDeviceSize = SoAHostDeviceLayout::computeDataSize(numElements); std::byte* h_buf = nullptr; - hipCheck(hipMallocHost((void**)&h_buf, hostDeviceSize)); + hipCheck(hipHostMalloc((void**)&h_buf, hostDeviceSize)); SoAHostDeviceLayout h_soahdLayout(h_buf, numElements); SoAHostDeviceView h_soahd(h_soahdLayout); SoAHostDeviceConstView h_soahd_c(h_soahdLayout); @@ -133,7 +133,7 @@ int main(void) { // Alocate buffer, stores and views on the device (single, shared buffer). size_t deviceOnlySize = SoADeviceOnlyLayout::computeDataSize(numElements); std::byte* d_buf = nullptr; - hipCheck(hipMallocHost((void**)&d_buf, hostDeviceSize + deviceOnlySize)); + hipCheck(hipHostMalloc((void**)&d_buf, hostDeviceSize + deviceOnlySize)); SoAHostDeviceLayout d_soahdLayout(d_buf, numElements); SoADeviceOnlyLayout d_soadoLayout(d_soahdLayout.metadata().nextByte(), numElements); SoAHostDeviceView d_soahdView(d_soahdLayout); diff --git a/DataFormats/VertexReco/interface/Vertex.h b/DataFormats/VertexReco/interface/Vertex.h index 7d7a119961eac..cec37f5b52205 100644 --- a/DataFormats/VertexReco/interface/Vertex.h +++ b/DataFormats/VertexReco/interface/Vertex.h @@ -39,7 +39,8 @@ namespace reco { /// point in the space typedef math::XYZPoint Point; /// error matrix dimension - enum { dimension = 3, dimension4D = 4 }; + constexpr static int dimension = 3; + constexpr static int dimension4D = 4; /// covariance error matrix (3x3) typedef math::Error::type Error; /// covariance error matrix (3x3) @@ -49,7 +50,7 @@ namespace reco { /// covariance error matrix (4x4) typedef math::Error::type CovarianceMatrix4D; /// matix size - enum { size = dimension * (dimension + 1) / 2, size4D = (dimension4D) * (dimension4D + 1) / 2 }; + constexpr static int size = dimension * (dimension + 1) / 2, size4D = (dimension4D) * (dimension4D + 1) / 2; /// index type typedef unsigned int index; /// default constructor - The vertex will not be valid. Position, error, diff --git a/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc b/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc index 8343cc8651eca..11db847c664d8 100644 --- a/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc +++ b/DetectorDescription/DDCMS/plugins/dd4hep/DDDefinitions2Objects.cc @@ -2314,7 +2314,7 @@ static long load_dddefinition(Detector& det, xml_h element) { wv.placeVolume(mfv1, 1); // Can not deal with reflections without closed geometry - det.manager().CloseGeometry(); + det.manager().CloseGeometry("nv"); det.endDocument(); } diff --git a/EgammaAnalysis/ElectronTools/plugins/EGammaCutBasedEleIdAnalyzer.cc b/EgammaAnalysis/ElectronTools/plugins/EGammaCutBasedEleIdAnalyzer.cc index 916893465785a..4279f8ca01167 100644 --- a/EgammaAnalysis/ElectronTools/plugins/EGammaCutBasedEleIdAnalyzer.cc +++ b/EgammaAnalysis/ElectronTools/plugins/EGammaCutBasedEleIdAnalyzer.cc @@ -51,7 +51,6 @@ class EGammaCutBasedEleIdAnalyzer : public edm::one::EDAnalyzer<> { typedef std::vector > > IsoDepositVals; explicit EGammaCutBasedEleIdAnalyzer(const edm::ParameterSet &); - ~EGammaCutBasedEleIdAnalyzer() override; static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); ElectronEffectiveArea::ElectronEffectiveAreaTarget EAtarget; @@ -59,14 +58,7 @@ class EGammaCutBasedEleIdAnalyzer : public edm::one::EDAnalyzer<> { private: void beginJob() override; void analyze(const edm::Event &, const edm::EventSetup &) override; - void endJob() override; - - /* - void beginRun(edm::Run const &, edm::EventSetup const &) override; - void endRun(edm::Run const &, edm::EventSetup const &) override; - void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override; - void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override; - */ + // ----------member data --------------------------- // input tags @@ -126,11 +118,6 @@ EGammaCutBasedEleIdAnalyzer::EGammaCutBasedEleIdAnalyzer(const edm::ParameterSet h1_pt_fbremeopin_ = fs->make("h1_pt_fbremeopin", "pt (fbremeopin)", 100, 0.0, 100.0); } -EGammaCutBasedEleIdAnalyzer::~EGammaCutBasedEleIdAnalyzer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -253,21 +240,6 @@ void EGammaCutBasedEleIdAnalyzer::beginJob() { EAtarget = ElectronEffectiveArea::kEleEAData2012; } -// ------------ method called once each job just after ending the event loop ------------ -void EGammaCutBasedEleIdAnalyzer::endJob() {} -/* -// ------------ method called when starting to processes a run ------------ -void EGammaCutBasedEleIdAnalyzer::beginRun(edm::Run const &, edm::EventSetup const &) {} - -// ------------ method called when ending the processing of a run ------------ -void EGammaCutBasedEleIdAnalyzer::endRun(edm::Run const &, edm::EventSetup const &) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void EGammaCutBasedEleIdAnalyzer::beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void EGammaCutBasedEleIdAnalyzer::endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) {} -*/ // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void EGammaCutBasedEleIdAnalyzer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/EgammaAnalysis/ElectronTools/test/MiniAODElectronIDValidationAnalyzer.cc b/EgammaAnalysis/ElectronTools/test/MiniAODElectronIDValidationAnalyzer.cc index 308d0f608e69e..dc3c750188dff 100644 --- a/EgammaAnalysis/ElectronTools/test/MiniAODElectronIDValidationAnalyzer.cc +++ b/EgammaAnalysis/ElectronTools/test/MiniAODElectronIDValidationAnalyzer.cc @@ -60,7 +60,6 @@ class MiniAODElectronIDValidationAnalyzer : public edm::one::EDAnalyzer { public: explicit MiniAODElectronIDValidationAnalyzer(const edm::ParameterSet &); - ~MiniAODElectronIDValidationAnalyzer() override; static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); @@ -72,14 +71,7 @@ class MiniAODElectronIDValidationAnalyzer : public edm::one::EDAnalyzer> &genParticles); void findFirstNonElectronMother(const reco::Candidate *particle, int &ancestorPID, int &ancestorStatus); @@ -159,11 +151,6 @@ MiniAODElectronIDValidationAnalyzer::MiniAODElectronIDValidationAnalyzer(const e electronTree_->Branch("isPass", &isPass_, "isPass/I"); } -MiniAODElectronIDValidationAnalyzer::~MiniAODElectronIDValidationAnalyzer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -246,44 +233,6 @@ void MiniAODElectronIDValidationAnalyzer::analyze(const edm::Event &iEvent, cons } } -// ------------ method called once each job just before starting event loop ------------ -void MiniAODElectronIDValidationAnalyzer::beginJob() {} - -// ------------ method called once each job just after ending the event loop ------------ -void MiniAODElectronIDValidationAnalyzer::endJob() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -MiniAODElectronIDValidationAnalyzer::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -MiniAODElectronIDValidationAnalyzer::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -MiniAODElectronIDValidationAnalyzer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -MiniAODElectronIDValidationAnalyzer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void MiniAODElectronIDValidationAnalyzer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/EventFilter/L1ScoutingRawToDigi/BuildFile.xml b/EventFilter/L1ScoutingRawToDigi/BuildFile.xml new file mode 100644 index 0000000000000..04bc54b4991df --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/BuildFile.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/EventFilter/L1ScoutingRawToDigi/interface/blocks.h b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h new file mode 100644 index 0000000000000..bb614e82e875a --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/interface/blocks.h @@ -0,0 +1,50 @@ +#ifndef L1ScoutingRawToDigi_blocks_h +#define L1ScoutingRawToDigi_blocks_h + +#include + +namespace l1ScoutingRun3 { + + namespace ugmt { + + struct muon { + uint32_t f; + uint32_t s; + uint32_t extra; + }; + + struct block { + uint32_t bx; + uint32_t orbit; + muon mu[16]; + }; + } // namespace ugmt + + namespace demux { + + // unrolled frame block + struct block { + uint32_t header; + uint32_t bx; + uint32_t orbit; + uint32_t link0; + uint32_t jet2[6]; + uint32_t link1; + uint32_t jet1[6]; + uint32_t link2; + uint32_t egamma2[6]; + uint32_t link3; + uint32_t egamma1[6]; + uint32_t link4; + uint32_t empty[6]; + uint32_t link5; + uint32_t sum[6]; + uint32_t link6; + uint32_t tau2[6]; + uint32_t link7; + uint32_t tau1[6]; + }; + } // namespace demux + +} // namespace l1ScoutingRun3 +#endif // L1ScoutingRawToDigi_blocks_h diff --git a/EventFilter/L1ScoutingRawToDigi/interface/masks.h b/EventFilter/L1ScoutingRawToDigi/interface/masks.h new file mode 100644 index 0000000000000..349c8a8bb4ddd --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/interface/masks.h @@ -0,0 +1,102 @@ +#ifndef L1ScoutingRawToDigi_masks_h +#define L1ScoutingRawToDigi_masks_h + +#include +#include "shifts.h" + +namespace l1ScoutingRun3 { + + namespace ugmt { + struct masksMuon { + // bx word: 16 bits used for actual bx, MS 4 bits are muon type + // 0xf intermediate, + // 0x0 final + // following 4 bits for link id + static constexpr uint32_t bx = 0x1fff; + static constexpr uint32_t interm = 0x0001; + //masks for muon 64 bits + static constexpr uint32_t phiext = 0x03ff; + static constexpr uint32_t pt = 0x01ff; + static constexpr uint32_t ptuncon = 0x00ff; // 8 bits + static constexpr uint32_t qual = 0x000f; + static constexpr uint32_t etaext = 0x01ff; + static constexpr uint32_t etaextv = 0x00ff; + static constexpr uint32_t etaexts = 0x0100; + static constexpr uint32_t iso = 0x0003; + static constexpr uint32_t chrg = 0x0001; + static constexpr uint32_t chrgv = 0x0001; + static constexpr uint32_t index = 0x007f; + static constexpr uint32_t phi = 0x03ff; + static constexpr uint32_t eta = 0x01ff; + static constexpr uint32_t etav = 0x00ff; + static constexpr uint32_t etas = 0x0100; + static constexpr uint32_t dxy = 0x0003; + }; + } // namespace ugmt + + namespace demux { + + struct masksJet { + static constexpr uint32_t ET = 0x07ff; + static constexpr uint32_t eta = 0x00ff; + static constexpr uint32_t phi = 0x00ff; + static constexpr uint32_t disp = 0x0001; + static constexpr uint32_t qual = 0x0003; + }; + + struct masksEGamma { + static constexpr uint32_t ET = 0x01ff; + static constexpr uint32_t eta = 0x00ff; + static constexpr uint32_t phi = 0x00ff; + static constexpr uint32_t iso = 0x0003; + }; + + struct masksTau { + static constexpr uint32_t ET = 0x01ff; + static constexpr uint32_t eta = 0x00ff; + static constexpr uint32_t phi = 0x00ff; + static constexpr uint32_t iso = 0x0003; + }; + + struct masksESums { + static constexpr uint32_t ETEt = 0x0fff; // Et of ET object + static constexpr uint32_t ETEttem = 0x0fff; + static constexpr uint32_t ETMinBiasHF = 0x000f; + + static constexpr uint32_t HTEt = 0x0fff; // Et of HT object + static constexpr uint32_t HTtowerCount = 0x1fff; + static constexpr uint32_t HTMinBiasHF = 0x000f; + + static constexpr uint32_t ETmissEt = 0x0fff; + static constexpr uint32_t ETmissPhi = 0x00ff; + static constexpr uint32_t ETmissASYMET = 0x00ff; + static constexpr uint32_t ETmissMinBiasHF = 0x000f; + + static constexpr uint32_t HTmissEt = 0x0fff; + static constexpr uint32_t HTmissPhi = 0x00ff; + static constexpr uint32_t HTmissASYMHT = 0x00ff; + static constexpr uint32_t HTmissMinBiasHF = 0x000f; + + static constexpr uint32_t ETHFmissEt = 0x0fff; + static constexpr uint32_t ETHFmissPhi = 0x00ff; + static constexpr uint32_t ETHFmissASYMETHF = 0x00ff; + static constexpr uint32_t ETHFmissCENT = 0x0003; + + static constexpr uint32_t HTHFmissEt = 0x0fff; + static constexpr uint32_t HTHFmissPhi = 0x00ff; + static constexpr uint32_t HTHFmissASYMHTHF = 0x00ff; + static constexpr uint32_t HTHFmissCENT = 0x0003; + }; + } // namespace demux + + struct header_masks { + static constexpr uint32_t bxmatch = 0x00ff << header_shifts::bxmatch; + static constexpr uint32_t mAcount = 0x000f << header_shifts::mAcount; + static constexpr uint32_t orbitmatch = 0x00ff << header_shifts::orbitmatch; + static constexpr uint32_t warningTestEnabled = 0x0001 << header_shifts::warningTestEnabled; + static constexpr uint32_t mBcount = 0x000f << header_shifts::mBcount; + static constexpr uint32_t sBmtfCount = 0x000f << header_shifts::sBmtfCount; + }; + +} // namespace l1ScoutingRun3 +#endif // L1ScoutingRawToDigi_masks_h diff --git a/EventFilter/L1ScoutingRawToDigi/interface/shifts.h b/EventFilter/L1ScoutingRawToDigi/interface/shifts.h new file mode 100644 index 0000000000000..5f0788c9a7a47 --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/interface/shifts.h @@ -0,0 +1,102 @@ +#ifndef L1ScoutingRawToDigi_shifts_h +#define L1ScoutingRawToDigi_shifts_h + +#include + +namespace l1ScoutingRun3 { + + namespace ugmt { + // struct shifts{ + struct shiftsMuon { + // bx word: 16 bits used for actual bx, MS 4 bits are muon type + // 0xf intermediate, + // 0x0 final + // following 4 bits for link id + static constexpr uint32_t bx = 0; + static constexpr uint32_t interm = 31; // updated for new run3 format (tj) + // shifts for muon 64 bits + static constexpr uint32_t phiext = 0; + static constexpr uint32_t pt = 10; + static constexpr uint32_t qual = 19; + static constexpr uint32_t etaext = 23; + static constexpr uint32_t iso = 0; + static constexpr uint32_t chrg = 2; + static constexpr uint32_t chrgv = 3; + static constexpr uint32_t index = 4; + static constexpr uint32_t phi = 11; + static constexpr uint32_t eta1 = 13; + static constexpr uint32_t eta2 = 22; + static constexpr uint32_t ptuncon = 21; + static constexpr uint32_t dxy = 30; + }; + } // namespace ugmt + + namespace demux { + // struct shiftsCaloJet{ + struct shiftsJet { + static constexpr uint32_t ET = 0; + static constexpr uint32_t eta = 11; + static constexpr uint32_t phi = 19; + static constexpr uint32_t disp = 27; + static constexpr uint32_t qual = 28; + }; + + // struct shiftsCaloEGamma{ + struct shiftsEGamma { + static constexpr uint32_t ET = 0; + static constexpr uint32_t eta = 9; + static constexpr uint32_t phi = 17; + static constexpr uint32_t iso = 25; + }; + + // struct shiftsCaloTau{ + struct shiftsTau { + static constexpr uint32_t ET = 0; + static constexpr uint32_t eta = 9; + static constexpr uint32_t phi = 17; + static constexpr uint32_t iso = 25; + }; + + // struct shiftsCaloESums{ + struct shiftsESums { + static constexpr uint32_t ETEt = 0; // Et of ET object + static constexpr uint32_t ETEttem = 12; + static constexpr uint32_t ETMinBiasHF = 28; + + static constexpr uint32_t HTEt = 0; // Et of HT object + static constexpr uint32_t HTtowerCount = 12; + static constexpr uint32_t HTMinBiasHF = 28; + + static constexpr uint32_t ETmissEt = 0; + static constexpr uint32_t ETmissPhi = 12; + static constexpr uint32_t ETmissASYMET = 20; + static constexpr uint32_t ETmissMinBiasHF = 28; + + static constexpr uint32_t HTmissEt = 0; + static constexpr uint32_t HTmissPhi = 12; + static constexpr uint32_t HTmissASYMHT = 20; + static constexpr uint32_t HTmissMinBiasHF = 28; + + static constexpr uint32_t ETHFmissEt = 0; + static constexpr uint32_t ETHFmissPhi = 12; + static constexpr uint32_t ETHFmissASYMETHF = 20; + static constexpr uint32_t ETHFmissCENT = 28; + + static constexpr uint32_t HTHFmissEt = 0; + static constexpr uint32_t HTHFmissPhi = 12; + static constexpr uint32_t HTHFmissASYMHTHF = 20; + static constexpr uint32_t HTHFmissCENT = 28; + }; + } // namespace demux + + struct header_shifts { + static constexpr uint32_t bxmatch = 24; + static constexpr uint32_t mAcount = 16; + static constexpr uint32_t orbitmatch = 8; + static constexpr uint32_t warningTestEnabled = 8; + static constexpr uint32_t mBcount = 0; + static constexpr uint32_t sBmtfCount = 0; + }; + +} // namespace l1ScoutingRun3 +#endif // L1ScoutingRawToDigi_shifts_h diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/BuildFile.xml b/EventFilter/L1ScoutingRawToDigi/plugins/BuildFile.xml new file mode 100644 index 0000000000000..dbb651083a6fb --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/BuildFile.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc new file mode 100644 index 0000000000000..b635d82c66375 --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.cc @@ -0,0 +1,328 @@ +#include "EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h" + +ScCaloRawToDigi::ScCaloRawToDigi(const edm::ParameterSet& iConfig) { + using namespace edm; + using namespace l1ScoutingRun3; + srcInputTag = iConfig.getParameter("srcInputTag"); + enableAllSums_ = iConfig.getUntrackedParameter("enableAllSums", false); + debug_ = iConfig.getUntrackedParameter("debug", false); + + orbitBufferJets_ = std::vector>(3565); + orbitBufferEGammas_ = std::vector>(3565); + orbitBufferTaus_ = std::vector>(3565); + orbitBufferEtSums_ = std::vector>(3565); + + nJetsOrbit_ = 0; + nEGammasOrbit_ = 0; + nTausOrbit_ = 0; + nEtSumsOrbit_ = 0; + + produces().setBranchAlias("JetOrbitCollection"); + produces().setBranchAlias("TauOrbitCollection"); + produces().setBranchAlias("EGammaOrbitCollection"); + produces().setBranchAlias("BxSumsOrbitCollection"); + + rawToken = consumes(srcInputTag); +} + +ScCaloRawToDigi::~ScCaloRawToDigi(){}; + +void ScCaloRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + using namespace l1ScoutingRun3; + + Handle ScoutingRawDataCollection; + iEvent.getByToken(rawToken, ScoutingRawDataCollection); + + const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(SDSNumbering::CaloSDSID); + size_t orbitSize = sourceRawData.size(); + + std::unique_ptr unpackedJets(new JetOrbitCollection); + std::unique_ptr unpackedTaus(new TauOrbitCollection); + std::unique_ptr unpackedEGammas(new EGammaOrbitCollection); + std::unique_ptr unpackedEtSums(new BxSumsOrbitCollection); + + if ((sourceRawData.size() == 0) && debug_) { + std::cout << "No raw data for CALO source\n"; + } + + // unpack current orbit and store data into the orbitBufferr + unpackOrbit(sourceRawData.data(), orbitSize); + + // fill orbit collection and clear the Bx buffer vector + unpackedJets->fillAndClear(orbitBufferJets_, nJetsOrbit_); + unpackedEGammas->fillAndClear(orbitBufferEGammas_, nEGammasOrbit_); + unpackedTaus->fillAndClear(orbitBufferTaus_, nTausOrbit_); + unpackedEtSums->fillAndClear(orbitBufferEtSums_, nEtSumsOrbit_); + + // store collections in the event + iEvent.put(std::move(unpackedJets)); + iEvent.put(std::move(unpackedTaus)); + iEvent.put(std::move(unpackedEGammas)); + iEvent.put(std::move(unpackedEtSums)); +} + +void ScCaloRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { + using namespace l1ScoutingRun3; + + // reset counters + nJetsOrbit_ = 0; + nEGammasOrbit_ = 0; + nTausOrbit_ = 0; + nEtSumsOrbit_ = 0; + + size_t pos = 0; + + while (pos < len) { + assert(pos + sizeof(demux::block) <= len); + + demux::block* bl = (demux::block*)(buf + pos); + pos += sizeof(demux::block); + + assert(pos <= len); + uint32_t orbit = bl->orbit & 0x7FFFFFFF; + uint32_t bx = bl->bx; + + if (debug_) { + std::cout << "CALO Orbit " << orbit << ", BX -> " << bx << std::endl; + } + + // unpack jets from first link + if (debug_) + std::cout << "--- Jets link 1 ---\n"; + unpackLinkJets(bl->jet1, bx); + + // unpack jets from second link + if (debug_) + std::cout << "--- Jets link 2 ---\n"; + unpackLinkJets(bl->jet2, bx); + + // unpack eg from first link + if (debug_) + std::cout << "--- E/g link 1 ---\n"; + unpackLinkEGammas(bl->egamma1, bx); + + // unpack eg from second link link + if (debug_) + std::cout << "--- E/g link 2 ---\n"; + unpackLinkEGammas(bl->egamma2, bx); + + // unpack taus from first link + if (debug_) + std::cout << "--- Taus link 1 ---\n"; + unpackLinkTaus(bl->tau1, bx); + + // unpack taus from second link + if (debug_) + std::cout << "--- Taus link 2 ---\n"; + unpackLinkTaus(bl->tau2, bx); + + // unpack et sums + if (debug_) + std::cout << "--- Sums ---\n"; + unpackEtSums(bl->sum, bx); + + } // end of bx objects +} + +void ScCaloRawToDigi::unpackLinkJets(uint32_t* dataBlock, int bx) { + using namespace l1ScoutingRun3; + + int32_t ET(0), Eta(0), Phi(0), Qual(0); + for (uint32_t i = 0; i < 6; i++) { + ET = ((dataBlock[i] >> demux::shiftsJet::ET) & demux::masksJet::ET); + + if (ET != 0) { + Eta = ((dataBlock[i] >> demux::shiftsJet::eta) & demux::masksJet::eta); + Phi = ((dataBlock[i] >> demux::shiftsJet::phi) & demux::masksJet::phi); + Qual = ((dataBlock[i] >> demux::shiftsJet::qual) & demux::masksJet::qual); + + if (Eta > 127) + Eta = Eta - 256; + + Jet jet(ET, Eta, Phi, Qual); + orbitBufferJets_[bx].push_back(jet); + nJetsOrbit_++; + + if (debug_) { + std::cout << "Jet " << i << std::endl; + std::cout << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << std::endl; + printJet(jet); + } + } + } // end link jets unpacking loop +} + +void ScCaloRawToDigi::unpackLinkEGammas(uint32_t* dataBlock, int bx) { + using namespace l1ScoutingRun3; + + int32_t ET(0), Eta(0), Phi(0), Iso(0); + for (uint32_t i = 0; i < 6; i++) { + ET = ((dataBlock[i] >> demux::shiftsEGamma::ET) & demux::masksEGamma::ET); + if (ET != 0) { + Eta = ((dataBlock[i] >> demux::shiftsEGamma::eta) & demux::masksEGamma::eta); + Phi = ((dataBlock[i] >> demux::shiftsEGamma::phi) & demux::masksEGamma::phi); + Iso = ((dataBlock[i] >> demux::shiftsEGamma::iso) & demux::masksEGamma::iso); + + if (Eta > 127) + Eta = Eta - 256; + + EGamma eGamma(ET, Eta, Phi, Iso); + orbitBufferEGammas_[bx].push_back(eGamma); + nEGammasOrbit_++; + + if (debug_) { + std::cout << "E/g " << i << std::endl; + std::cout << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << std::endl; + printEGamma(eGamma); + } + } + } // end link e/gammas unpacking loop +} + +void ScCaloRawToDigi::unpackLinkTaus(uint32_t* dataBlock, int bx) { + using namespace l1ScoutingRun3; + + int32_t ET(0), Eta(0), Phi(0), Iso(0); + for (uint32_t i = 0; i < 6; i++) { + ET = ((dataBlock[i] >> demux::shiftsTau::ET) & demux::masksTau::ET); + if (ET != 0) { + Eta = ((dataBlock[i] >> demux::shiftsTau::eta) & demux::masksTau::eta); + Phi = ((dataBlock[i] >> demux::shiftsTau::phi) & demux::masksTau::phi); + Iso = ((dataBlock[i] >> demux::shiftsTau::iso) & demux::masksTau::iso); + + if (Eta > 127) + Eta = Eta - 256; + + Tau tau(ET, Eta, Phi, Iso); + orbitBufferTaus_[bx].push_back(tau); + nTausOrbit_++; + + if (debug_) { + std::cout << "Tau " << i << std::endl; + std::cout << " Raw: 0x" << std::hex << dataBlock[i] << std::dec << std::endl; + printTau(tau); + } + } + } // end link taus unpacking loop +} + +void ScCaloRawToDigi::unpackEtSums(uint32_t* dataBlock, int bx) { + using namespace l1ScoutingRun3; + + BxSums bxSums; + + int32_t ETEt(0), ETEttem(0), ETMinBiasHFP0(0); // ET + int32_t HTEt(0), HTtowerCount(0), HTMinBiasHFM0(0); // HT + int32_t ETmissEt(0), ETmissPhi(0), ETmissASYMET(0), ETmissMinBiasHFP1(0); //ETMiss + int32_t HTmissEt(0), HTmissPhi(0), HTmissASYMHT(0), HTmissMinBiasHFM1(0); // HTMiss + int32_t ETHFmissEt(0), ETHFmissPhi(0), ETHFmissASYMETHF(0), ETHFmissCENT(0); // ETHFMiss + int32_t HTHFmissEt(0), HTHFmissPhi(0), HTHFmissASYMHTHF(0), HTHFmissCENT(0); // HTHFMiss + + // ET block + ETEt = ((dataBlock[0] >> demux::shiftsESums::ETEt) & demux::masksESums::ETEt); + ETEttem = ((dataBlock[0] >> demux::shiftsESums::ETEttem) & demux::masksESums::ETEttem); + + bxSums.setHwTotalEt(ETEt); + bxSums.setHwTotalEtEm(ETEttem); + + // HT block + HTEt = ((dataBlock[1] >> demux::shiftsESums::HTEt) & demux::masksESums::HTEt); + + bxSums.setHwTotalHt(HTEt); + + // ETMiss block + ETmissEt = ((dataBlock[2] >> demux::shiftsESums::ETmissEt) & demux::masksESums::ETmissEt); + ETmissPhi = ((dataBlock[2] >> demux::shiftsESums::ETmissPhi) & demux::masksESums::ETmissPhi); + + if (ETmissEt > 0) { + bxSums.setHwMissEt(ETmissEt); + bxSums.setHwMissEtPhi(ETmissPhi); + } + + // HTMiss block + HTmissEt = ((dataBlock[3] >> demux::shiftsESums::HTmissEt) & demux::masksESums::HTmissEt); + HTmissPhi = ((dataBlock[3] >> demux::shiftsESums::HTmissPhi) & demux::masksESums::HTmissPhi); + + if (HTmissEt > 0) { + bxSums.setHwMissHt(HTmissEt); + bxSums.setHwMissHtPhi(HTmissPhi); + } + + // ETHFMiss block + ETHFmissEt = ((dataBlock[4] >> demux::shiftsESums::ETHFmissEt) & demux::masksESums::ETHFmissEt); + ETHFmissPhi = ((dataBlock[4] >> demux::shiftsESums::ETHFmissPhi) & demux::masksESums::ETHFmissPhi); + + if (ETHFmissEt > 0) { + bxSums.setHwMissEtHF(ETHFmissEt); + bxSums.setHwMissEtHFPhi(ETHFmissPhi); + } + + // HTHFMiss block + HTHFmissEt = ((dataBlock[5] >> demux::shiftsESums::ETHFmissEt) & demux::masksESums::ETHFmissEt); + HTHFmissPhi = ((dataBlock[5] >> demux::shiftsESums::ETHFmissPhi) & demux::masksESums::ETHFmissPhi); + + if (HTHFmissEt > 0) { + bxSums.setHwMissHtHF(HTHFmissEt); + bxSums.setHwMissHtHFPhi(HTHFmissPhi); + } + + // Insert additional sums + if (enableAllSums_) { + // ET block + ETMinBiasHFP0 = ((dataBlock[0] >> demux::shiftsESums::ETMinBiasHF) & demux::masksESums::ETMinBiasHF); + bxSums.setMinBiasHFP0(ETMinBiasHFP0); + + // HT block + HTtowerCount = ((dataBlock[1] >> demux::shiftsESums::HTtowerCount) & demux::masksESums::HTtowerCount); + HTMinBiasHFM0 = ((dataBlock[1] >> demux::shiftsESums::HTMinBiasHF) & demux::masksESums::HTMinBiasHF); + + bxSums.setTowerCount(HTtowerCount); + bxSums.setMinBiasHFM0(HTMinBiasHFM0); + + // ET Miss block + ETmissASYMET = ((dataBlock[2] >> demux::shiftsESums::ETmissASYMET) & demux::masksESums::ETmissASYMET); + ETmissMinBiasHFP1 = ((dataBlock[2] >> demux::shiftsESums::ETmissMinBiasHF) & demux::masksESums::ETmissMinBiasHF); + bxSums.setHwAsymEt(ETmissASYMET); + bxSums.setMinBiasHFP1(ETmissMinBiasHFP1); + + // HT Miss block + HTmissASYMHT = ((dataBlock[3] >> demux::shiftsESums::HTmissASYMHT) & demux::masksESums::HTmissASYMHT); + HTmissMinBiasHFM1 = ((dataBlock[3] >> demux::shiftsESums::HTmissMinBiasHF) & demux::masksESums::HTmissMinBiasHF); + + bxSums.setHwAsymHt(HTmissASYMHT); + bxSums.setMinBiasHFM1(HTmissMinBiasHFM1); + + // ETHFMiss + ETHFmissASYMETHF = ((dataBlock[4] >> demux::shiftsESums::ETHFmissASYMETHF) & demux::masksESums::ETHFmissASYMETHF); + ETHFmissCENT = ((dataBlock[4] >> demux::shiftsESums::ETHFmissCENT) & demux::masksESums::ETHFmissCENT); + + bxSums.setHwAsymEtHF(ETHFmissASYMETHF); + + // HTHFMiss + HTHFmissASYMHTHF = ((dataBlock[5] >> demux::shiftsESums::ETHFmissASYMETHF) & demux::masksESums::ETHFmissASYMETHF); + HTHFmissCENT = ((dataBlock[5] >> demux::shiftsESums::ETHFmissCENT) & demux::masksESums::ETHFmissCENT); + + bxSums.setHwAsymHtHF(HTHFmissASYMHTHF); + bxSums.setCentrality((HTHFmissCENT << 4) + ETHFmissCENT); + } + + orbitBufferEtSums_[bx].push_back(bxSums); + nEtSumsOrbit_ += 1; + + if (debug_) { + std::cout << "Raw frames:\n"; + for (int frame = 0; frame < 6; frame++) { + std::cout << " frame " << frame << ": 0x" << std::hex << dataBlock[frame] << std::dec << std::endl; + } + printBxSums(bxSums); + } +} + +void ScCaloRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(ScCaloRawToDigi); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h new file mode 100644 index 0000000000000..ca1bcd34e1ea3 --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScCALORawToDigi.h @@ -0,0 +1,53 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSNumbering.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" + +#include "EventFilter/L1ScoutingRawToDigi/interface/shifts.h" +#include "EventFilter/L1ScoutingRawToDigi/interface/masks.h" +#include "EventFilter/L1ScoutingRawToDigi/interface/blocks.h" +#include "L1TriggerScouting/Utilities/interface/printScObjects.h" + +#include +#include + +class ScCaloRawToDigi : public edm::stream::EDProducer<> { +public: + explicit ScCaloRawToDigi(const edm::ParameterSet&); + ~ScCaloRawToDigi() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::Event&, const edm::EventSetup&) override; + + void unpackOrbit(const unsigned char* buf, size_t len); + + void unpackLinkJets(uint32_t* dataBlock, int bx); + void unpackLinkEGammas(uint32_t* dataBlock, int bx); + void unpackLinkTaus(uint32_t* dataBlock, int bx); + void unpackEtSums(uint32_t* dataBlock, int bx); + + int nJetsOrbit_, nEGammasOrbit_, nTausOrbit_, nEtSumsOrbit_; + // vectors holding data for every bunch crossing + // before filling the orbit collection + std::vector> orbitBufferJets_; + std::vector> orbitBufferEGammas_; + std::vector> orbitBufferTaus_; + std::vector> orbitBufferEtSums_; + + bool debug_ = false; + bool enableAllSums_ = false; + edm::InputTag srcInputTag; + edm::EDGetToken rawToken; +}; diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc new file mode 100644 index 0000000000000..349c250d4bba2 --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.cc @@ -0,0 +1,169 @@ +#include "EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h" + +ScGMTRawToDigi::ScGMTRawToDigi(const edm::ParameterSet& iConfig) { + using namespace edm; + srcInputTag = iConfig.getParameter("srcInputTag"); + debug_ = iConfig.getUntrackedParameter("debug", false); + + // initialize orbit buffer for BX 1->3564; + orbitBuffer_ = std::vector>(3565); + for (auto& bxVec : orbitBuffer_) { + bxVec.reserve(8); + } + nMuonsOrbit_ = 0; + + produces().setBranchAlias("MuonOrbitCollection"); + rawToken = consumes(srcInputTag); +} + +ScGMTRawToDigi::~ScGMTRawToDigi(){}; + +void ScGMTRawToDigi::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { + using namespace edm; + + Handle ScoutingRawDataCollection; + iEvent.getByToken(rawToken, ScoutingRawDataCollection); + + const FEDRawData& sourceRawData = ScoutingRawDataCollection->FEDData(SDSNumbering::GmtSDSID); + size_t orbitSize = sourceRawData.size(); + + std::unique_ptr unpackedMuons(new l1ScoutingRun3::MuonOrbitCollection); + + if ((sourceRawData.size() == 0) && debug_) { + std::cout << "No raw data for GMT FED\n"; + } + + // unpack current orbit and store data into the orbitBufferr + unpackOrbit(sourceRawData.data(), orbitSize); + + // fill orbit collection and clear the Bx buffer vector + unpackedMuons->fillAndClear(orbitBuffer_, nMuonsOrbit_); + + // store collection in the event + iEvent.put(std::move(unpackedMuons)); +} + +void ScGMTRawToDigi::unpackOrbit(const unsigned char* buf, size_t len) { + using namespace l1ScoutingRun3; + + // reset counters + nMuonsOrbit_ = 0; + + size_t pos = 0; + + while (pos < len) { + assert(pos + 4 <= len); + + // get BX header + uint32_t header = *((uint32_t*)(buf + pos)); + pos += 4; + // count mA and mB + uint32_t mAcount = (header & header_masks::mAcount) >> header_shifts::mAcount; + uint32_t mBcount = (header & header_masks::mBcount) >> header_shifts::mBcount; + + // declare block to read + ugmt::block* bl = (ugmt::block*)(buf + pos); + pos += 4 + 4 + (mAcount + mBcount) * 12; + assert(pos <= len); + + uint32_t orbit = bl->orbit & 0x7FFFFFFF; + uint32_t bx = bl->bx; + + if (debug_) { + std::cout << "GMT Orbit " << orbit << ", BX -> " << bx << ", nMuons -> " << mAcount + mBcount << std::endl; + } + + // Unpack muons for this BX + orbitBuffer_[bx].reserve(mAcount + mBcount); + + for (unsigned int i = 0; i < mAcount + mBcount; i++) { + uint32_t interm = (bl->mu[i].extra >> ugmt::shiftsMuon::interm) & ugmt::masksMuon::interm; + if (interm == 1) { + if (debug_) { + std::cout << " -> Excluding intermediate muon\n"; + } + continue; + } + + uint32_t index = (bl->mu[i].s >> ugmt::shiftsMuon::index) & ugmt::masksMuon::index; + uint32_t ietaextu = (bl->mu[i].f >> ugmt::shiftsMuon::etaext) & ugmt::masksMuon::etaextv; + int32_t ietaext; + if (((bl->mu[i].f >> ugmt::shiftsMuon::etaext) & ugmt::masksMuon::etaexts) != 0) { + ietaext = ietaextu -= 256; + } else { + ietaext = ietaextu; + } + + // extract pt and quality and apply cut if required + int32_t iptuncon = (bl->mu[i].s >> ugmt::shiftsMuon::ptuncon) & ugmt::masksMuon::ptuncon; + int32_t ipt = (bl->mu[i].f >> ugmt::shiftsMuon::pt) & ugmt::masksMuon::pt; + if ((ipt - 1) < 0) { + continue; + } + uint32_t qual = (bl->mu[i].f >> ugmt::shiftsMuon::qual) & ugmt::masksMuon::qual; + if (qual == 0) { + continue; + } + + // extract integer value for extrapolated phi + int32_t iphiext = ((bl->mu[i].f >> ugmt::shiftsMuon::phiext) & ugmt::masksMuon::phiext); + + // extract integer value for extrapolated phi + int32_t idxy = ((bl->mu[i].s >> ugmt::shiftsMuon::dxy) & ugmt::masksMuon::dxy); + + // extract iso bits and charge + uint32_t iso = (bl->mu[i].s >> ugmt::shiftsMuon::iso) & ugmt::masksMuon::iso; + int32_t chrg = 0; + if (((bl->mu[i].s >> ugmt::shiftsMuon::chrgv) & ugmt::masksMuon::chrgv) == 1) + chrg = ((bl->mu[i].s >> ugmt::shiftsMuon::chrg) & ugmt::masksMuon::chrg) == 1 ? -1 : 1; + + // extract eta and phi at muon station + int32_t iphi = (bl->mu[i].s >> ugmt::shiftsMuon::phi) & ugmt::masksMuon::phi; + uint32_t ieta1 = (bl->mu[i].extra >> ugmt::shiftsMuon::eta1) & ugmt::masksMuon::eta; + uint32_t ieta2 = (bl->mu[i].extra >> ugmt::shiftsMuon::eta2) & ugmt::masksMuon::eta; + + uint32_t ieta_u; + int32_t ieta; + // checking if raw eta should be taken from muon 1 or muon 2 + if ((bl->mu[i].extra & 0x1) == 0) { + ieta_u = ieta1; + } else { + ieta_u = ieta2; + } + + // two's complement + if (ieta_u > 256) { + ieta = ieta_u - 512; + } else { + ieta = ieta_u; + } + + // increment muon counter + nMuonsOrbit_++; + + l1ScoutingRun3::Muon muon(ipt, ieta, iphi, qual, chrg, chrg != 0, iso, index, ietaext, iphiext, iptuncon, idxy); + + orbitBuffer_[bx].push_back(muon); + + if (debug_) { + std::cout << "--- Muon " << i << " ---\n"; + std::cout << " Raw f: 0x" << std::hex << bl->mu[i].f << std::dec << "\n"; + std::cout << " Raw s: 0x" << std::hex << bl->mu[i].s << std::dec << "\n"; + std::cout << " Raw extra: 0x" << std::hex << bl->mu[i].extra << std::dec << "\n"; + printMuon(muon); + } + + } // end of bx + + } // end orbit while loop + + //muons->flatten(); +} + +void ScGMTRawToDigi::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.setUnknown(); + descriptions.addDefault(desc); +} + +DEFINE_FWK_MODULE(ScGMTRawToDigi); diff --git a/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h new file mode 100644 index 0000000000000..8b1622d327304 --- /dev/null +++ b/EventFilter/L1ScoutingRawToDigi/plugins/ScGMTRawToDigi.h @@ -0,0 +1,44 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/StreamID.h" + +#include "DataFormats/FEDRawData/interface/FEDRawData.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSNumbering.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" + +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" + +#include "EventFilter/L1ScoutingRawToDigi/interface/shifts.h" +#include "EventFilter/L1ScoutingRawToDigi/interface/masks.h" +#include "EventFilter/L1ScoutingRawToDigi/interface/blocks.h" +#include "L1TriggerScouting/Utilities/interface/printScObjects.h" + +#include +#include +#include + +class ScGMTRawToDigi : public edm::stream::EDProducer<> { +public: + explicit ScGMTRawToDigi(const edm::ParameterSet&); + ~ScGMTRawToDigi() override; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + +private: + void produce(edm::Event&, const edm::EventSetup&) override; + + void unpackOrbit(const unsigned char* buf, size_t len); + + // vector holding data for every bunch crossing + // before filling the orbit collection + std::vector> orbitBuffer_; + int nMuonsOrbit_; + + bool debug_ = false; + edm::InputTag srcInputTag; + edm::EDGetToken rawToken; +}; diff --git a/EventFilter/L1TRawToDigi/plugins/AMC13DumpToRaw.cc b/EventFilter/L1TRawToDigi/plugins/AMC13DumpToRaw.cc index 9bdf63222fa40..347a3fe51f14e 100644 --- a/EventFilter/L1TRawToDigi/plugins/AMC13DumpToRaw.cc +++ b/EventFilter/L1TRawToDigi/plugins/AMC13DumpToRaw.cc @@ -49,7 +49,6 @@ namespace l1t { class AMC13DumpToRaw : public edm::one::EDProducer<> { public: explicit AMC13DumpToRaw(const edm::ParameterSet&); - ~AMC13DumpToRaw() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); @@ -64,11 +63,6 @@ namespace l1t { // void formatRaw(edm::Event& iEvent, amc13::Packet& amc13, FEDRawData& fed_data); - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- std::ifstream file_; std::string filename_; @@ -106,11 +100,6 @@ namespace l1t { produces(); } - AMC13DumpToRaw::~AMC13DumpToRaw() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - } - // // member functions // @@ -227,38 +216,6 @@ namespace l1t { // ------------ method called once each job just after ending the event loop ------------ void AMC13DumpToRaw::endJob() { file_.close(); } - // ------------ method called when starting to processes a run ------------ - /* -void -AMC13DumpToRaw::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - - // ------------ method called when ending the processing of a run ------------ - /* -void -AMC13DumpToRaw::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - - // ------------ method called when starting to processes a luminosity block ------------ - /* -vvoid -AMC13DumpToRaw::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - - // ------------ method called when ending the processing of a luminosity block ------------ - /* -void -AMC13DumpToRaw::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void AMC13DumpToRaw::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/EventFilter/L1TRawToDigi/plugins/L1TDigiToRaw.cc b/EventFilter/L1TRawToDigi/plugins/L1TDigiToRaw.cc index 9789807862c34..46227383066cd 100644 --- a/EventFilter/L1TRawToDigi/plugins/L1TDigiToRaw.cc +++ b/EventFilter/L1TRawToDigi/plugins/L1TDigiToRaw.cc @@ -47,20 +47,12 @@ namespace l1t { class L1TDigiToRaw : public edm::stream::EDProducer<> { public: explicit L1TDigiToRaw(const edm::ParameterSet&); - ~L1TDigiToRaw() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); - using edm::stream::EDProducer<>::consumes; - private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(edm::Run const&, edm::EventSetup const&) override{}; - void endRun(edm::Run const&, edm::EventSetup const&) override{}; - void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override{}; - void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override{}; - // ----------member data --------------------------- int evtType_; int fedId_; @@ -95,8 +87,6 @@ namespace l1t { slinkTrailerSize_ = config.getUntrackedParameter("lenSlinkTrailer", 8); } - L1TDigiToRaw::~L1TDigiToRaw() {} - // ------------ method called to produce the data ------------ void L1TDigiToRaw::produce(edm::Event& event, const edm::EventSetup& setup) { using namespace edm; diff --git a/EventFilter/L1TRawToDigi/plugins/L1TRawToDigi.cc b/EventFilter/L1TRawToDigi/plugins/L1TRawToDigi.cc index 8e8acec018fc5..af8bb008fc7a3 100644 --- a/EventFilter/L1TRawToDigi/plugins/L1TRawToDigi.cc +++ b/EventFilter/L1TRawToDigi/plugins/L1TRawToDigi.cc @@ -52,11 +52,6 @@ namespace l1t { private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(edm::Run const&, edm::EventSetup const&) override{}; - void endRun(edm::Run const&, edm::EventSetup const&) override{}; - void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override{}; - void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override{}; - // ----------member data --------------------------- edm::EDGetTokenT fedData_; std::vector fedIds_; diff --git a/EventFilter/L1TRawToDigi/plugins/TriggerRulePrefireVetoFilter.cc b/EventFilter/L1TRawToDigi/plugins/TriggerRulePrefireVetoFilter.cc index 1459ae47d6e85..5a9db004ce1f9 100644 --- a/EventFilter/L1TRawToDigi/plugins/TriggerRulePrefireVetoFilter.cc +++ b/EventFilter/L1TRawToDigi/plugins/TriggerRulePrefireVetoFilter.cc @@ -39,19 +39,11 @@ class TriggerRulePrefireVetoFilter : public edm::stream::EDFilter<> { public: explicit TriggerRulePrefireVetoFilter(const edm::ParameterSet&); - ~TriggerRulePrefireVetoFilter() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; bool filter(edm::Event&, const edm::EventSetup&) override; - void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetTokenT tcdsRecordToken_; @@ -73,11 +65,6 @@ TriggerRulePrefireVetoFilter::TriggerRulePrefireVetoFilter(const edm::ParameterS //now do what ever initialization is needed } -TriggerRulePrefireVetoFilter::~TriggerRulePrefireVetoFilter() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -131,44 +118,6 @@ bool TriggerRulePrefireVetoFilter::filter(edm::Event& iEvent, const edm::EventSe return false; } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void TriggerRulePrefireVetoFilter::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void TriggerRulePrefireVetoFilter::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -TriggerRulePrefireVetoFilter::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -TriggerRulePrefireVetoFilter::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -TriggerRulePrefireVetoFilter::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -TriggerRulePrefireVetoFilter::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void TriggerRulePrefireVetoFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/EventFilter/L1TXRawToDigi/plugins/L1TCaloLayer1RawToDigi.cc b/EventFilter/L1TXRawToDigi/plugins/L1TCaloLayer1RawToDigi.cc index 75208a4f0338a..d32858cb3aba1 100644 --- a/EventFilter/L1TXRawToDigi/plugins/L1TCaloLayer1RawToDigi.cc +++ b/EventFilter/L1TXRawToDigi/plugins/L1TCaloLayer1RawToDigi.cc @@ -67,14 +67,11 @@ using namespace edm; class L1TCaloLayer1RawToDigi : public stream::EDProducer<> { public: explicit L1TCaloLayer1RawToDigi(const ParameterSet&); - ~L1TCaloLayer1RawToDigi() override; static void fillDescriptions(ConfigurationDescriptions& descriptions); private: - void beginStream(StreamID) override; void produce(Event&, const EventSetup&) override; - void endStream() override; void makeECalTPGs(uint32_t lPhi, UCTCTP7RawData& ctp7Data, std::unique_ptr& ecalTPGs); @@ -84,11 +81,6 @@ class L1TCaloLayer1RawToDigi : public stream::EDProducer<> { void makeRegions(uint32_t lPhi, UCTCTP7RawData& ctp7Data, std::unique_ptr& regions); - //virtual void beginRun(Run const&, EventSetup const&) override; - //virtual void endRun(Run const&, EventSetup const&) override; - //virtual void beginLuminosityBlock(LuminosityBlock const&, EventSetup const&) override; - //virtual void endLuminosityBlock(LuminosityBlock const&, EventSetup const&) override; - // ----------member data --------------------------- InputTag fedRawDataLabel; @@ -122,8 +114,6 @@ L1TCaloLayer1RawToDigi::L1TCaloLayer1RawToDigi(const ParameterSet& iConfig) consumes(fedRawDataLabel); } -L1TCaloLayer1RawToDigi::~L1TCaloLayer1RawToDigi() {} - // // member functions // @@ -378,44 +368,6 @@ void L1TCaloLayer1RawToDigi::makeRegions(uint32_t lPhi, } } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void L1TCaloLayer1RawToDigi::beginStream(StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void L1TCaloLayer1RawToDigi::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* - void - L1TCaloLayer1RawToDigi::beginRun(Run const&, EventSetup const&) - { - } -*/ - -// ------------ method called when ending the processing of a run ------------ -/* - void - L1TCaloLayer1RawToDigi::endRun(Run const&, EventSetup const&) - { - } -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* - void - L1TCaloLayer1RawToDigi::beginLuminosityBlock(LuminosityBlock const&, EventSetup const&) - { - } -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* - void - L1TCaloLayer1RawToDigi::endLuminosityBlock(LuminosityBlock const&, EventSetup const&) - { - } -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TCaloLayer1RawToDigi::fillDescriptions(ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/EventFilter/Phase2TrackerRawToDigi/plugins/Phase2TrackerDigiProducer.cc b/EventFilter/Phase2TrackerRawToDigi/plugins/Phase2TrackerDigiProducer.cc index 2f72ea9f869f0..2608191896378 100644 --- a/EventFilter/Phase2TrackerRawToDigi/plugins/Phase2TrackerDigiProducer.cc +++ b/EventFilter/Phase2TrackerRawToDigi/plugins/Phase2TrackerDigiProducer.cc @@ -13,7 +13,7 @@ #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDRawChannelUnpacker.h" #include "EventFilter/Phase2TrackerRawToDigi/interface/Phase2TrackerFEDZSChannelUnpacker.h" #include "EventFilter/Phase2TrackerRawToDigi/interface/utils.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -22,23 +22,19 @@ namespace Phase2Tracker { - class Phase2TrackerDigiProducer : public edm::stream::EDProducer<> { + class Phase2TrackerDigiProducer : public edm::global::EDProducer<> { public: /// constructor Phase2TrackerDigiProducer(const edm::ParameterSet& pset); /// default constructor ~Phase2TrackerDigiProducer() override = default; - void beginRun(edm::Run const&, edm::EventSetup const&) override; - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: const edm::ESGetToken ph2CablingESToken_; - unsigned int runNumber_; - edm::EDGetTokenT token_; - const Phase2TrackerCabling* cabling_; - uint32_t cacheId_; - DetIdCollection detids_; + const edm::EDGetTokenT token_; + const edm::EDPutTokenT> putToken_; class Registry { public: /// constructor @@ -54,8 +50,6 @@ namespace Phase2Tracker { size_t index; uint16_t length; }; - std::vector proc_work_registry_; - std::vector proc_work_digis_; }; } // namespace Phase2Tracker @@ -68,41 +62,58 @@ using namespace std; namespace Phase2Tracker { Phase2TrackerDigiProducer::Phase2TrackerDigiProducer(const edm::ParameterSet& pset) - : ph2CablingESToken_(esConsumes()), runNumber_(0), cabling_(nullptr), cacheId_(0) { - // define product - produces>("ProcessedRaw"); - token_ = consumes(pset.getParameter("ProductLabel")); - } + : ph2CablingESToken_(esConsumes()), + token_(consumes(pset.getParameter("ProductLabel"))), + putToken_(produces>("ProcessedRaw")) {} - void Phase2TrackerDigiProducer::beginRun(edm::Run const& run, edm::EventSetup const& es) { + void Phase2TrackerDigiProducer::produce(edm::StreamID, edm::Event& event, const edm::EventSetup& es) const { // fetch cabling from event setup - cabling_ = &es.getData(ph2CablingESToken_); - } - - void Phase2TrackerDigiProducer::produce(edm::Event& event, const edm::EventSetup& es) { - // empty vectors for the next event - proc_work_registry_.clear(); - proc_work_digis_.clear(); + auto const& cabling = es.getData(ph2CablingESToken_); // Retrieve FEDRawData collection edm::Handle buffers; event.getByToken(token_, buffers); + //reserve enough working memory + std::vector proc_work_registry; + std::vector proc_work_digis; + { + size_t reserve_count = 0; + size_t reserve_digis = 0; + for (size_t fedIndex = Phase2Tracker::FED_ID_MIN; fedIndex <= Phase2Tracker::CMS_FED_ID_MAX; ++fedIndex) { + const FEDRawData& fed = buffers->FEDData(fedIndex); + if (fed.size() != 0) { + // construct buffer + Phase2Tracker::Phase2TrackerFEDBuffer buffer(fed.data(), fed.size()); + int ichan = 0; + for (int ife = 0; ife < MAX_FE_PER_FED; ife++) { + for (int icbc = 0; icbc < MAX_CBC_PER_FE; icbc++) { + if (buffer.channel(ichan).length() > 0) { + ++reserve_count; + //calculation from Phase2TrackerFEDRawChannelUnpacker.h + reserve_digis += buffer.channel(ichan).length() * 8 - STRIPS_PADDING; + ++ichan; + } + } + } + } + } + proc_work_registry.reserve(2 * reserve_count); + proc_work_digis.reserve(reserve_digis); + } // Analyze strip tracker FED buffers in data - size_t fedIndex; - for (fedIndex = Phase2Tracker::FED_ID_MIN; fedIndex <= Phase2Tracker::CMS_FED_ID_MAX; ++fedIndex) { + for (size_t fedIndex = Phase2Tracker::FED_ID_MIN; fedIndex <= Phase2Tracker::CMS_FED_ID_MAX; ++fedIndex) { const FEDRawData& fed = buffers->FEDData(fedIndex); if (fed.size() != 0) { // construct buffer - Phase2Tracker::Phase2TrackerFEDBuffer* buffer = nullptr; - buffer = new Phase2Tracker::Phase2TrackerFEDBuffer(fed.data(), fed.size()); + Phase2Tracker::Phase2TrackerFEDBuffer buffer(fed.data(), fed.size()); #ifdef EDM_ML_DEBUG std::ostringstream ss; ss << " -------------------------------------------- " << endl; ss << " buffer debug ------------------------------- " << endl; ss << " -------------------------------------------- " << endl; - ss << " buffer size : " << buffer->bufferSize() << endl; + ss << " buffer size : " << buffer.bufferSize() << endl; ss << " fed id : " << fedIndex << endl; ss << " -------------------------------------------- " << endl; ss << " tracker header debug ------------------------" << endl; @@ -111,7 +122,7 @@ namespace Phase2Tracker { ss.clear(); ss.str(""); - Phase2TrackerFEDHeader tr_header = buffer->trackerHeader(); + Phase2TrackerFEDHeader tr_header = buffer.trackerHeader(); ss << " Version : " << hex << setw(2) << (int)tr_header.getDataFormatVersion() << endl; ss << " Mode : " << hex << setw(2) << tr_header.getDebugMode() << endl; ss << " Type : " << hex << setw(2) << (int)tr_header.getEventType() << endl; @@ -146,10 +157,10 @@ namespace Phase2Tracker { int ichan = 0; for (int ife = 0; ife < MAX_FE_PER_FED; ife++) { for (int icbc = 0; icbc < MAX_CBC_PER_FE; icbc++) { - const Phase2TrackerFEDChannel& channel = buffer->channel(ichan); + const Phase2TrackerFEDChannel& channel = buffer.channel(ichan); if (channel.length() > 0) { // get fedid from cabling - const Phase2TrackerModule mod = cabling_->findFedCh(std::make_pair(fedIndex, ife)); + const Phase2TrackerModule mod = cabling.findFedCh(std::make_pair(fedIndex, ife)); uint32_t detid = mod.getDetid(); #ifdef EDM_ML_DEBUG ss << dec << " id from cabling : " << detid << endl; @@ -193,46 +204,40 @@ namespace Phase2Tracker { // store beginning and end of this digis for this detid and add this registry to the list // and store data - Registry regItemTop(detid + 1, STRIPS_PER_CBC * icbc / 2, proc_work_digis_.size(), stripsTop.size()); - proc_work_registry_.push_back(regItemTop); - proc_work_digis_.insert(proc_work_digis_.end(), stripsTop.begin(), stripsTop.end()); - Registry regItemBottom( - detid + 2, STRIPS_PER_CBC * icbc / 2, proc_work_digis_.size(), stripsBottom.size()); - proc_work_registry_.push_back(regItemBottom); - proc_work_digis_.insert(proc_work_digis_.end(), stripsBottom.begin(), stripsBottom.end()); + proc_work_registry.emplace_back( + detid + 1, STRIPS_PER_CBC * icbc / 2, proc_work_digis.size(), stripsTop.size()); + proc_work_digis.insert(proc_work_digis.end(), stripsTop.begin(), stripsTop.end()); + proc_work_registry.emplace_back( + detid + 2, STRIPS_PER_CBC * icbc / 2, proc_work_digis.size(), stripsBottom.size()); + proc_work_digis.insert(proc_work_digis.end(), stripsBottom.begin(), stripsBottom.end()); } ichan++; } } // end loop on channels - // store digis in edm collections - std::sort(proc_work_registry_.begin(), proc_work_registry_.end()); - std::vector> sorted_and_merged; - - edm::DetSetVector* pr = new edm::DetSetVector(); - - std::vector::iterator it = proc_work_registry_.begin(), it2 = it + 1, end = proc_work_registry_.end(); - while (it < end) { - sorted_and_merged.push_back(edm::DetSet(it->detid)); - std::vector& digis = sorted_and_merged.back().data; - // first count how many digis we have - size_t len = it->length; - for (it2 = it + 1; (it2 != end) && (it2->detid == it->detid); ++it2) { - len += it2->length; - } - // reserve memory - digis.reserve(len); - // push them in - for (it2 = it + 0; (it2 != end) && (it2->detid == it->detid); ++it2) { - digis.insert(digis.end(), &proc_work_digis_[it2->index], &proc_work_digis_[it2->index + it2->length]); - } - it = it2; - } + } + } - edm::DetSetVector proc_raw_dsv(sorted_and_merged, true); - pr->swap(proc_raw_dsv); - event.put(std::unique_ptr>(pr), "ProcessedRaw"); - delete buffer; + // store digis in edm collections + std::sort(proc_work_registry.begin(), proc_work_registry.end()); + std::vector> sorted_and_merged; + + std::vector::iterator it = proc_work_registry.begin(), it2 = it + 1, end = proc_work_registry.end(); + while (it < end) { + sorted_and_merged.push_back(edm::DetSet(it->detid)); + std::vector& digis = sorted_and_merged.back().data; + // first count how many digis we have + size_t len = it->length; + for (it2 = it + 1; (it2 != end) && (it2->detid == it->detid); ++it2) { + len += it2->length; + } + // reserve memory + digis.reserve(len); + // push them in + for (it2 = it + 0; (it2 != end) && (it2->detid == it->detid); ++it2) { + digis.insert(digis.end(), &proc_work_digis[it2->index], &proc_work_digis[it2->index + it2->length]); } + it = it2; } + event.emplace(putToken_, sorted_and_merged, true); } } // namespace Phase2Tracker diff --git a/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.cc b/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.cc index 2ce728ff2ed04..63597221608ef 100644 --- a/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.cc +++ b/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.cc @@ -57,8 +57,6 @@ void RPCDigiMerger::fillDescriptions(edm::ConfigurationDescriptions& descs) { descs.add("rpcDigiMerger", desc); } -void RPCDigiMerger::beginRun(edm::Run const& run, edm::EventSetup const& setup) {} - void RPCDigiMerger::produce(edm::Event& event, edm::EventSetup const& setup) { // Get the digis // new RPCDigiCollection diff --git a/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.h b/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.h index 45c155ffee844..154794554ab5f 100644 --- a/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.h +++ b/EventFilter/RPCRawToDigi/plugins/RPCDigiMerger.h @@ -28,7 +28,6 @@ class RPCDigiMerger : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions& descs); - void beginRun(edm::Run const& run, edm::EventSetup const& setup) override; void produce(edm::Event& event, edm::EventSetup const& setup) override; protected: diff --git a/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.cc b/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.cc index 487410142a80e..7f85e1cba45c9 100644 --- a/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.cc +++ b/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.cc @@ -18,27 +18,12 @@ namespace sistrip { ExcludedFEDListProducer::ExcludedFEDListProducer(const edm::ParameterSet& pset) - : runNumber_(0), - cacheId_(0), - cabling_(nullptr), - token_(consumes(pset.getParameter("ProductLabel"))), - cablingToken_(esConsumes()) { + : runNumber_(0), token_(consumes(pset.getParameter("ProductLabel"))), cablingToken_(esConsumes()) { produces(); } ExcludedFEDListProducer::~ExcludedFEDListProducer() {} - void ExcludedFEDListProducer::beginRun(const edm::Run& run, const edm::EventSetup& es) { - uint32_t cacheId = es.get().cacheIdentifier(); - - if (cacheId_ != cacheId) { - cacheId_ = cacheId; - - edm::ESHandle c = es.getHandle(cablingToken_); - cabling_ = c.product(); - } - } - void ExcludedFEDListProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("ProductLabel", edm::InputTag("rawDataCollector")); @@ -49,6 +34,8 @@ namespace sistrip { if (runNumber_ != event.run()) { runNumber_ = event.run(); + auto const& cabling = es.getData(cablingToken_); + DetIdVector emptyDetIdVector; detids_.swap(emptyDetIdVector); // Reserve space in bad module list @@ -58,7 +45,7 @@ namespace sistrip { event.getByToken(token_, buffers); // Retrieve FED ids from cabling map and iterate through - for (auto ifed = cabling_->fedIds().begin(); ifed != cabling_->fedIds().end(); ifed++) { + for (auto ifed = cabling.fedIds().begin(); ifed != cabling.fedIds().end(); ifed++) { // ignore trigger FED // if ( *ifed == triggerFedId_ ) { continue; } @@ -69,7 +56,7 @@ namespace sistrip { if (input.size() == 0) { // std::cout << "Input size == 0 for FED number " << static_cast(*ifed) << std::endl; // get the cabling connections for this FED - auto conns = cabling_->fedConnections(*ifed); + auto conns = cabling.fedConnections(*ifed); // Mark FED modules as bad detids_.reserve(detids_.size() + conns.size()); for (auto iconn = conns.begin(); iconn != conns.end(); ++iconn) { diff --git a/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.h b/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.h index 21318c0ef55ea..74f177f851311 100644 --- a/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.h +++ b/EventFilter/SiStripRawToDigi/plugins/ExcludedFEDListProducer.h @@ -30,14 +30,11 @@ namespace sistrip { ExcludedFEDListProducer(const edm::ParameterSet& pset); /// default constructor ~ExcludedFEDListProducer() override; - void beginRun(const edm::Run& run, const edm::EventSetup& es) override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); void produce(edm::Event& event, const edm::EventSetup& es) override; private: unsigned int runNumber_; - uint32_t cacheId_; - const SiStripFedCabling* cabling_; const edm::EDGetTokenT token_; edm::ESGetToken cablingToken_; diff --git a/EventFilter/Utilities/BuildFile.xml b/EventFilter/Utilities/BuildFile.xml index 6a69ee301bfe8..2270817d5ce0a 100644 --- a/EventFilter/Utilities/BuildFile.xml +++ b/EventFilter/Utilities/BuildFile.xml @@ -2,6 +2,7 @@ + diff --git a/EventFilter/Utilities/interface/DAQSourceModels.h b/EventFilter/Utilities/interface/DAQSourceModels.h index d886aaf1c26a4..5727dc7aa2164 100644 --- a/EventFilter/Utilities/interface/DAQSourceModels.h +++ b/EventFilter/Utilities/interface/DAQSourceModels.h @@ -61,7 +61,9 @@ class DataMode { bool fileListMode) const = 0; virtual bool isMultiDir() { return false; } - virtual void makeDirectoryEntries(std::vector const& baseDirs, std::string const& runDir) = 0; + virtual void makeDirectoryEntries(std::vector const& baseDirs, + std::vector const& numSources, + std::string const& runDir) = 0; void setTesting(bool testing) { testing_ = testing; } protected: diff --git a/EventFilter/Utilities/interface/DAQSourceModelsFRD.h b/EventFilter/Utilities/interface/DAQSourceModelsFRD.h index bdf770836c3aa..c3e1c896ab623 100644 --- a/EventFilter/Utilities/interface/DAQSourceModelsFRD.h +++ b/EventFilter/Utilities/interface/DAQSourceModelsFRD.h @@ -64,7 +64,9 @@ class DataModeFRD : public DataMode { MAXTCDSuTCAFEDID_ = MAXTCDSuTCAFEDID; } - void makeDirectoryEntries(std::vector const& baseDirs, std::string const& runDir) override {} + void makeDirectoryEntries(std::vector const& baseDirs, + std::vector const& numSources, + std::string const& runDir) override {} std::pair> defineAdditionalFiles(std::string const& primaryName, bool) const override { return std::make_pair(true, std::vector()); @@ -171,7 +173,9 @@ class DataModeFRDStriped : public DataMode { MAXTCDSuTCAFEDID_ = MAXTCDSuTCAFEDID; } - void makeDirectoryEntries(std::vector const& baseDirs, std::string const& runDir) override; + void makeDirectoryEntries(std::vector const& baseDirs, + std::vector const& numSources, + std::string const& runDir) override; std::pair> defineAdditionalFiles(std::string const& primaryName, bool fileListMode) const override; diff --git a/EventFilter/Utilities/interface/DAQSourceModelsScouting.h b/EventFilter/Utilities/interface/DAQSourceModelsScouting.h deleted file mode 100644 index 430fdfdefd34b..0000000000000 --- a/EventFilter/Utilities/interface/DAQSourceModelsScouting.h +++ /dev/null @@ -1,268 +0,0 @@ -#ifndef EventFilter_Utilities_DAQSourceModelsScouting_h -#define EventFilter_Utilities_DAQSourceModelsScouting_h - -#include - -#include "EventFilter/Utilities/interface/DAQSourceModels.h" -#include "DataFormats/L1Trigger/interface/Muon.h" -#include "DataFormats/L1Trigger/interface/BXVector.h" - -namespace scouting { - struct muon { - uint32_t f; - uint32_t s; - }; - - struct block { - uint32_t bx; - uint32_t orbit; - muon mu[16]; - }; - - struct masks { - static constexpr uint32_t phiext = 0x3ff; - static constexpr uint32_t pt = 0x1ff; - static constexpr uint32_t qual = 0xf; - static constexpr uint32_t etaext = 0x1ff; - static constexpr uint32_t etaextv = 0xff; - static constexpr uint32_t etaexts = 0x100; - static constexpr uint32_t iso = 0x3; - static constexpr uint32_t chrg = 0x1; - static constexpr uint32_t chrgv = 0x1; - static constexpr uint32_t index = 0x7f; - static constexpr uint32_t phi = 0x3ff; - static constexpr uint32_t eta = 0x1ff; - static constexpr uint32_t etav = 0xff; - static constexpr uint32_t etas = 0x100; - static constexpr uint32_t phiv = 0x1ff; - static constexpr uint32_t phis = 0x200; - static constexpr uint32_t sv = 0x3; - }; - - struct shifts { - static constexpr uint32_t phiext = 0; - static constexpr uint32_t pt = 10; - static constexpr uint32_t qual = 19; - static constexpr uint32_t etaext = 23; - static constexpr uint32_t iso = 0; - static constexpr uint32_t chrg = 2; - static constexpr uint32_t chrgv = 3; - static constexpr uint32_t index = 4; - static constexpr uint32_t phi = 11; - static constexpr uint32_t eta = 21; - static constexpr uint32_t rsv = 30; - }; - - struct gmt_scales { - static constexpr float pt_scale = 0.5; - static constexpr float phi_scale = 2. * M_PI / 576.; - static constexpr float eta_scale = 0.0870 / 8; //9th MS bit is sign - static constexpr float phi_range = M_PI; - }; - - struct header_shifts { - static constexpr uint32_t bxmatch = 24; - static constexpr uint32_t mAcount = 16; - static constexpr uint32_t orbitmatch = 8; - static constexpr uint32_t mBcount = 0; - }; - - struct header_masks { - static constexpr uint32_t bxmatch = 0xff << header_shifts::bxmatch; - static constexpr uint32_t mAcount = 0xf << header_shifts::mAcount; - static constexpr uint32_t orbitmatch = 0xff << header_shifts::orbitmatch; - static constexpr uint32_t mBcount = 0xf; - }; - -} //namespace scouting - -class DataModeScoutingRun2Muon : public DataMode { -public: - DataModeScoutingRun2Muon(DAQSource* daqSource) : DataMode(daqSource) { - dummyLVec_ = std::make_unique>>(); - } - - ~DataModeScoutingRun2Muon() override{}; - - std::vector>& makeDaqProvenanceHelpers() override; - void readEvent(edm::EventPrincipal& eventPrincipal) override; - - int dataVersion() const override { return detectedFRDversion_; } - void detectVersion(unsigned char* fileBuf, uint32_t fileHeaderOffset) override { - detectedFRDversion_ = *((uint16_t*)(fileBuf + fileHeaderOffset)); - } - - uint32_t headerSize() const override { return FRDHeaderVersionSize[detectedFRDversion_]; } - - bool versionCheck() const override { return detectedFRDversion_ <= FRDHeaderMaxVersion; } - - uint64_t dataBlockSize() const override { return event_->size(); } - - void makeDataBlockView(unsigned char* addr, - size_t maxSize, - std::vector const& fileSizes, - size_t fileHeaderSize) override { - dataBlockAddr_ = addr; - dataBlockMax_ = maxSize; - eventCached_ = false; - nextEventView(); - eventCached_ = true; - } - - bool nextEventView() override; - bool checksumValid() override; - std::string getChecksumError() const override; - - bool isRealData() const override { return event_->isRealData(); } - - uint32_t run() const override { return event_->run(); } - - //true for scouting muon - bool dataBlockCompleted() const override { return true; } - - bool requireHeader() const override { return true; } - - bool fitToBuffer() const override { return true; } - - bool dataBlockInitialized() const override { return true; } - - void setDataBlockInitialized(bool) override{}; - - void setTCDSSearchRange(uint16_t MINTCDSuTCAFEDID, uint16_t MAXTCDSuTCAFEDID) override { return; } - - void makeDirectoryEntries(std::vector const& baseDirs, std::string const& runDir) override {} - - std::pair> defineAdditionalFiles(std::string const& primaryName, bool) const override { - return std::make_pair(true, std::vector()); - } - - char* readPayloadPos() { return (char*)event_->payload(); } - -private: - void unpackOrbit(BXVector* muons, char* buf, size_t len); - - std::vector> daqProvenanceHelpers_; - uint16_t detectedFRDversion_ = 0; - size_t headerSize_ = 0; - std::unique_ptr event_; - - std::unique_ptr>> dummyLVec_; - - unsigned char* dataBlockAddr_ = nullptr; - size_t dataBlockMax_ = 0; - bool eventCached_ = false; -}; - -class DataModeScoutingRun2Multi : public DataMode { -public: - DataModeScoutingRun2Multi(DAQSource* daqSource) : DataMode(daqSource) { - dummyLVec_ = std::make_unique>>(); - } - - ~DataModeScoutingRun2Multi() override{}; - - std::vector>& makeDaqProvenanceHelpers() override; - void readEvent(edm::EventPrincipal& eventPrincipal) override; - - int dataVersion() const override { return detectedFRDversion_; } - void detectVersion(unsigned char* fileBuf, uint32_t fileHeaderOffset) override { - detectedFRDversion_ = *((uint16_t*)(fileBuf + fileHeaderOffset)); - } - - uint32_t headerSize() const override { return FRDHeaderVersionSize[detectedFRDversion_]; } - - bool versionCheck() const override { return detectedFRDversion_ <= FRDHeaderMaxVersion; } - - uint64_t dataBlockSize() const override { - //TODO: adjust to multiple objects - return events_[0]->size(); - } - - void makeDataBlockView(unsigned char* addr, - size_t maxSize, - std::vector const& fileSizes, - size_t fileHeaderSize) override { - fileHeaderSize_ = fileHeaderSize; - numFiles_ = fileSizes.size(); - //add offset address for each file payload - startAddrs_.clear(); - startAddrs_.push_back(addr); - dataBlockAddrs_.clear(); - dataBlockAddrs_.push_back(addr); - dataBlockMaxAddrs_.clear(); - dataBlockMaxAddrs_.push_back(addr + fileSizes[0] - fileHeaderSize); - auto fileAddr = addr; - for (unsigned int i = 1; i < fileSizes.size(); i++) { - fileAddr += fileSizes[i - 1]; - startAddrs_.push_back(fileAddr); - dataBlockAddrs_.push_back(fileAddr); - dataBlockMaxAddrs_.push_back(fileAddr + fileSizes[i] - fileHeaderSize); - } - - dataBlockMax_ = maxSize; - blockCompleted_ = false; - //set event cached as we set initial address here - bool result = makeEvents(); - assert(result); - eventCached_ = true; - setDataBlockInitialized(true); - } - - bool nextEventView() override; - bool checksumValid() override; - std::string getChecksumError() const override; - - bool isRealData() const override { - assert(!events_.empty()); - return events_[0]->isRealData(); - } - - uint32_t run() const override { - assert(!events_.empty()); - return events_[0]->run(); - } - - //true for DAQ3 FRD - bool dataBlockCompleted() const override { return blockCompleted_; } - - bool requireHeader() const override { return true; } - - bool dataBlockInitialized() const override { return dataBlockInitialized_; } - - void setDataBlockInitialized(bool val) override { dataBlockInitialized_ = val; }; - - void setTCDSSearchRange(uint16_t MINTCDSuTCAFEDID, uint16_t MAXTCDSuTCAFEDID) override { return; } - - void makeDirectoryEntries(std::vector const& baseDirs, std::string const& runDir) override { - //receive directory paths for multiple input files ('striped') - } - - std::pair> defineAdditionalFiles(std::string const& primaryName, - bool fileListMode) const override; - -private: - bool makeEvents(); - void unpackMuonOrbit(BXVector* muons, char* buf, size_t len); - - std::vector> daqProvenanceHelpers_; - uint16_t detectedFRDversion_ = 0; - size_t headerSize_ = 0; - std::vector> events_; - - std::unique_ptr>> dummyLVec_; - - unsigned char* dataBlockAddr_ = nullptr; - - //debugging - std::vector startAddrs_; - std::vector dataBlockAddrs_; - std::vector dataBlockMaxAddrs_; - size_t dataBlockMax_ = 0; - size_t fileHeaderSize_ = 0; - short numFiles_ = 0; - bool eventCached_ = false; - bool dataBlockInitialized_ = false; - bool blockCompleted_ = true; -}; - -#endif // EventFilter_Utilities_DAQSourceModelsScouting_h diff --git a/EventFilter/Utilities/interface/DAQSourceModelsScoutingRun3.h b/EventFilter/Utilities/interface/DAQSourceModelsScoutingRun3.h new file mode 100644 index 0000000000000..8692df494c738 --- /dev/null +++ b/EventFilter/Utilities/interface/DAQSourceModelsScoutingRun3.h @@ -0,0 +1,135 @@ +#ifndef EventFilter_Utilities_DAQSourceModelsScoutingRun3_h +#define EventFilter_Utilities_DAQSourceModelsScoutingRun3_h + +#include "EventFilter/Utilities/interface/DAQSource.h" +#include "EventFilter/Utilities/interface/DAQSourceModels.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSRawDataCollection.h" +#include "DataFormats/L1ScoutingRawData/interface/SDSNumbering.h" + +#include "FWCore/Framework/interface/Event.h" +#include "DataFormats/Provenance/interface/EventAuxiliary.h" +#include "DataFormats/Provenance/interface/EventID.h" + +#include +#include +#include +#include +#include +#include + +class DataModeScoutingRun3 : public DataMode { +public: + DataModeScoutingRun3(DAQSource* daqSource) : DataMode(daqSource) {} + ~DataModeScoutingRun3() override{}; + std::vector>& makeDaqProvenanceHelpers() override; + void readEvent(edm::EventPrincipal& eventPrincipal) override; + + void fillSDSRawDataCollection(SDSRawDataCollection& rawData, char* buff, size_t len); + + //reuse FRD file and event headers + int dataVersion() const override { return detectedFRDversion_; } + void detectVersion(unsigned char* fileBuf, uint32_t fileHeaderOffset) override { + detectedFRDversion_ = *((uint16_t*)(fileBuf + fileHeaderOffset)); + } + uint32_t headerSize() const override { return FRDHeaderVersionSize[detectedFRDversion_]; } + bool versionCheck() const override { return detectedFRDversion_ <= FRDHeaderMaxVersion; } + + uint64_t dataBlockSize() const override { + // get event size from the first data source (main) + return events_[0]->size(); + } + + void makeDataBlockView(unsigned char* addr, + size_t maxSize, + std::vector const& fileSizes, + size_t fileHeaderSize) override { + fileHeaderSize_ = fileHeaderSize; + numFiles_ = fileSizes.size(); + + // initalize vectors keeping tracks of valid orbits and completed blocks + sourceValidOrbitPair_.clear(); + completedBlocks_.clear(); + for (unsigned int i = 0; i < fileSizes.size(); i++) { + completedBlocks_.push_back(false); + } + + //add offset address for each file payload + dataBlockAddrs_.clear(); + dataBlockAddrs_.push_back(addr); + dataBlockMaxAddrs_.clear(); + dataBlockMaxAddrs_.push_back(addr + fileSizes[0] - fileHeaderSize); + auto fileAddr = addr; + for (unsigned int i = 1; i < fileSizes.size(); i++) { + fileAddr += fileSizes[i - 1]; + dataBlockAddrs_.push_back(fileAddr); + dataBlockMaxAddrs_.push_back(fileAddr + fileSizes[i] - fileHeaderSize); + } + + dataBlockMax_ = maxSize; + blockCompleted_ = false; + //set event cached as we set initial address here + bool result = makeEvents(); + assert(result); + eventCached_ = true; + setDataBlockInitialized(true); + } + + bool nextEventView() override; + bool checksumValid() override; + std::string getChecksumError() const override; + + bool isRealData() const override { + assert(!events_.empty()); + return events_[0]->isRealData(); + } + + uint32_t run() const override { + assert(!events_.empty()); + return events_[0]->run(); + } + + bool dataBlockCompleted() const override { return blockCompleted_; } + + bool requireHeader() const override { return true; } + + bool fitToBuffer() const override { return true; } + + bool dataBlockInitialized() const override { return dataBlockInitialized_; } + + void setDataBlockInitialized(bool val) override { dataBlockInitialized_ = val; }; + + void setTCDSSearchRange(uint16_t MINTCDSuTCAFEDID, uint16_t MAXTCDSuTCAFEDID) override { return; } + + void makeDirectoryEntries(std::vector const& baseDirs, + std::vector const& numSources, + std::string const& runDir) override; + + std::pair> defineAdditionalFiles(std::string const& primaryName, + bool fileListMode) const override; + +private: + bool makeEvents(); + std::vector> daqProvenanceHelpers_; // + uint16_t detectedFRDversion_ = 0; + size_t fileHeaderSize_ = 0; + size_t headerSize_ = 0; + std::vector> events_; + unsigned char* dataBlockAddr_ = nullptr; + std::vector dataBlockAddrs_; + std::vector dataBlockMaxAddrs_; + size_t dataBlockMax_ = 0; + short numFiles_ = 0; + bool dataBlockInitialized_ = false; + bool blockCompleted_ = true; + bool eventCached_ = false; + std::vector buPaths_; + std::vector buNumSources_; + + // keep track of valid (=aligned) orbits from different data sources + std::vector> sourceValidOrbitPair_; + unsigned int currOrbit_ = 0xFFFFFFFF; + + std::vector completedBlocks_; +}; + +#endif // EventFilter_Utilities_DAQSourceModelsScoutingRun3_h \ No newline at end of file diff --git a/EventFilter/Utilities/interface/EvFDaqDirector.h b/EventFilter/Utilities/interface/EvFDaqDirector.h index 45886d16b0f83..1cbe71014a824 100644 --- a/EventFilter/Utilities/interface/EvFDaqDirector.h +++ b/EventFilter/Utilities/interface/EvFDaqDirector.h @@ -194,6 +194,7 @@ namespace evf { bool inputThrottled(); bool lumisectionDiscarded(unsigned int ls); std::vector const& getBUBaseDirs() const { return bu_base_dirs_all_; } + std::vector const& getBUBaseDirsNSources() const { return bu_base_dirs_nSources_; } private: bool bumpFile(unsigned int& ls, @@ -216,6 +217,7 @@ namespace evf { std::string base_dir_; std::string bu_base_dir_; std::vector bu_base_dirs_all_; + std::vector bu_base_dirs_nSources_; unsigned int run_; bool useFileBroker_; bool fileBrokerHostFromCfg_; diff --git a/EventFilter/Utilities/plugins/DumpMuonScouting.cc b/EventFilter/Utilities/plugins/DumpMuonScouting.cc deleted file mode 100644 index 4f1b37b030b4c..0000000000000 --- a/EventFilter/Utilities/plugins/DumpMuonScouting.cc +++ /dev/null @@ -1,112 +0,0 @@ -/// -/// \class l1t::DumpMuonScouting.cc -/// -/// Description: Dump/Analyze Moun Scouting stored in BXVector -/// -/// Implementation: -/// Based off of Michael Mulhearn's YellowParamTester -/// -/// \author: Brian Winer Ohio State -/// - -// -// This simple module simply retreives the YellowParams object from the event -// setup, and sends its payload as an INFO message, for debugging purposes. -// - -#include "FWCore/Framework/interface/MakerMacros.h" - -// system include files -#include -#include -#include - -// user include files -// base class -#include "FWCore/Framework/interface/stream/EDAnalyzer.h" - -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/EDGetToken.h" -#include "FWCore/Utilities/interface/InputTag.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Frameworkfwd.h" - -#include "DataFormats/L1Trigger/interface/Muon.h" - -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/MessageLogger/interface/MessageDrop.h" - -using namespace edm; -using namespace std; - -// class declaration -class DumpMuonScouting : public edm::stream::EDAnalyzer<> { -public: - explicit DumpMuonScouting(const edm::ParameterSet&); - ~DumpMuonScouting() override{}; - void analyze(const edm::Event&, const edm::EventSetup&) override; - - EDGetTokenT> muToken; - - int m_minBx; - int m_maxBx; - -private: - int m_tvVersion; -}; - -DumpMuonScouting::DumpMuonScouting(const edm::ParameterSet& iConfig) { - muToken = consumes(iConfig.getParameter("muInputTag")); - - m_minBx = iConfig.getParameter("minBx"); - m_maxBx = iConfig.getParameter("maxBx"); -} - -// loop over events -void DumpMuonScouting::analyze(const edm::Event& iEvent, const edm::EventSetup& evSetup) { - //input - Handle> muons = iEvent.getHandle(muToken); - - { - cout << " ----------------------------------------------------- " << endl; - cout << " *********** Run " << std::dec << iEvent.id().run() << " Event " << iEvent.id().event() - << " ************** " << endl; - cout << " ----------------------------------------------------- " << endl; - - //Loop over BX - for (int i = m_minBx; i <= m_maxBx; ++i) { - //Loop over Muons - //cout << " ------ Muons --------" << endl; - if (muons.isValid()) { - if (i >= muons->getFirstBX() && i <= muons->getLastBX()) { - for (std::vector::const_iterator mu = muons->begin(i); mu != muons->end(i); ++mu) { - cout << " " << std::dec << std::setw(2) << std::setfill(' ') << std::setfill('0') << ")"; - cout << " Pt " << std::dec << std::setw(3) << mu->hwPt() << " (0x" << std::hex << std::setw(3) - << std::setfill('0') << mu->hwPt() << ")"; - cout << " EtaAtVtx " << std::dec << std::setw(3) << mu->hwEtaAtVtx() << " (0x" << std::hex << std::setw(3) - << std::setfill('0') << (mu->hwEtaAtVtx() & 0x1ff) << ")"; - cout << " Eta " << std::dec << std::setw(3) << mu->hwEta() << " (0x" << std::hex << std::setw(3) - << std::setfill('0') << (mu->hwEta() & 0x1ff) << ")"; - cout << " PhiAtVtx " << std::dec << std::setw(3) << mu->hwPhiAtVtx() << " (0x" << std::hex << std::setw(3) - << std::setfill('0') << mu->hwPhiAtVtx() << ")"; - cout << " Phi " << std::dec << std::setw(3) << mu->hwPhi() << " (0x" << std::hex << std::setw(3) - << std::setfill('0') << mu->hwPhi() << ")"; - cout << " Iso " << std::dec << std::setw(1) << mu->hwIso(); - cout << " Qual " << std::dec << std::setw(1) << mu->hwQual(); - cout << " Chrg " << std::dec << std::setw(1) << mu->hwCharge(); - cout << endl; - } - } else { - cout << "No Muons stored for this bx " << i << endl; - } - } else { - cout << "No Muon Data in this event " << endl; - } - - } //loop over Bx - cout << std::dec << endl; - } //if dumpGtRecord -} - -DEFINE_FWK_MODULE(DumpMuonScouting); diff --git a/EventFilter/Utilities/plugins/ExceptionGenerator.cc b/EventFilter/Utilities/plugins/ExceptionGenerator.cc index a3e8696ede3d9..87541772343ec 100644 --- a/EventFilter/Utilities/plugins/ExceptionGenerator.cc +++ b/EventFilter/Utilities/plugins/ExceptionGenerator.cc @@ -250,6 +250,4 @@ namespace evf { } } - void ExceptionGenerator::endLuminosityBlock(edm::LuminosityBlock const &lb, edm::EventSetup const &es) {} - } // end namespace evf diff --git a/EventFilter/Utilities/plugins/ExceptionGenerator.h b/EventFilter/Utilities/plugins/ExceptionGenerator.h index 1630855ebee8c..bf42d1a0476bd 100644 --- a/EventFilter/Utilities/plugins/ExceptionGenerator.h +++ b/EventFilter/Utilities/plugins/ExceptionGenerator.h @@ -17,10 +17,8 @@ namespace evf { static const std::string menu[menu_items]; explicit ExceptionGenerator(const edm::ParameterSet&); - ~ExceptionGenerator() override{}; void beginRun(const edm::Run& r, const edm::EventSetup& iSetup) override; void analyze(const edm::Event& e, const edm::EventSetup& c) override; - void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; private: int actionId_; diff --git a/EventFilter/Utilities/scripts/scoutingToRaw.py b/EventFilter/Utilities/scripts/scoutingToRaw.py deleted file mode 100755 index d6ce51feae7ad..0000000000000 --- a/EventFilter/Utilities/scripts/scoutingToRaw.py +++ /dev/null @@ -1,259 +0,0 @@ -#!/bin/env python3 - -import struct -import os,sys -import json -import shutil - -os.umask(0) - -#struct muon{ -# uint32_t f; -# uint32_t s; -#}; - -#struct block{ -# uint32_t bx; -# uint32_t orbit; -# muon mu[16]; -#}; - -#class masks: -# phiext = 0x3ff -# pt = 0x1ff -# qual = 0xf -# etaext = 0x1ff -# etaextv = 0xff -# etaexts = 0x100 -# iso = 0x3 -# chrg = 0x1 -# chrgv = 0x1 -# index = 0x7f -# phi = 0x3ff -# eta = 0x1ff -# etav = 0xff -# etas = 0x100 -# phiv = 0x1ff -# phis = 0x200 -# sv = 0x3 - -#class shifts: -# phiext = 0 -# pt = 10 -# qual = 19 -# etaext = 23 -# iso = 0 -# chrg = 2 -# chrgv = 3 -# index = 4 -# phi = 11 -# eta = 21 -# rsv = 30 - -#class gmt_scales: -# pt_scale = 0.5 -# phi_scale = 2.*M_PI/576. -# eta_scale = 0.0870/8 #9th MS bit is sign -# phi_range = M_PI - - -#need to read this to find orbit ("event") boundary and calculate size per orbit -class header_shifts: - bxmatch = 32; - mAcount = 16; - orbitmatch = 8; - mBcount = 0; - -class header_masks: - bxmatch = 0xff << header_shifts.bxmatch; - mAcount = 0xf << header_shifts.mAcount; - orbitmatch = 0xff << header_shifts.orbitmatch; - mBcount = 0xf - - -#new V2 FRD file header (32 bytes) -class frd_file_header_v2: - ver_id = "RAW_0002".encode() # 64 (offset 0B) - header_size = 32 #16 (offset 8B) - data_type = 20 #16 (offset 10) - event_count = 0 #32 (offset 12B) - run_number = 0 #32 (offset 16B) - lumisection = 0 #32 (offset 20B) - file_size = 0 #64 (offset 24B) - - -def parseMuonScoutingRawFile(infilepath, outdir, rn_override, maxorbits): - - if infilepath != 'stdin': - fin = open(infilepath,'rb') - else: - fin = sys.stdin.buffer - - #sys.stdout.flush() - - #orbit count per file - orbitcount=0 - #total - orbitcount_total=0 - - last_ls = 0 - - orbit_data = bytes() - orbit_nr = 0 - orbit_size = 0 - flags = 0 - c_crc32c = 0 - - #ls = 1 - #event header (FRD format) const - version = 6 - - #files - fout = None - if infilepath != 'stdin': - fin = open(infilepath,'rb') - else: - fin = sys.stdin.buffer - - - #write header before closing the file - def update_header(): - nonlocal orbitcount - nonlocal last_ls - h = frd_file_header_v2() - h.event_count = orbitcount - h.run_number = rn_override - h.lumisection = last_ls - h.file_size = fout.tell() - fout.seek(0, 0) - fout.write(frd_file_header_v2.ver_id) - fout.write(struct.pack('H',h.header_size)) - fout.write(struct.pack('H',h.data_type)) - fout.write(struct.pack('I',h.event_count)) - fout.write(struct.pack('I',h.run_number)) - fout.write(struct.pack('I',h.lumisection)) - fout.write(struct.pack('Q',h.file_size)) - - orbitcount = 0 - print(h.ver_id, h.header_size, h.data_type, h.event_count, h.lumisection, h.file_size) - - - #write orbit when next one is detected or file is closed - def write_orbit(): - nonlocal orbit_size - nonlocal orbit_data - if not orbit_size: - return - - #print(fout.tell(), struct.pack('H',version)) - fout.write(struct.pack('H',version)) #could be 8 bytes - fout.write(struct.pack('H',flags)) #could be 8 bytes - fout.write(struct.pack('I',rn_override)) #run - #fout.write(struct.pack('I',ls)) #ls - fout.write(struct.pack('I',last_ls)) #ls - fout.write(struct.pack('I',orbit_nr)) #eid (orbit number, 32-bit) - fout.write(struct.pack('I',orbit_size)) #payload size - fout.write(struct.pack('I',c_crc32c)) #payload checksum (not used) - fout.write(orbit_data) - - orbit_data = bytes() - orbit_size = 0 - - def writeout_close(): - write_orbit() - update_header() - fout.close() - orbit_nr = 0 - - #read loop - while True: - - #check if exceeded max orbits specified - if orbitcount_total > maxorbits: - print(f"finish: {orbitcount_total-1}/{maxorbits} orbits") - writeout_close() - - if infilepath != 'stdin': - fin.close() - sys.exit(0) - - try: - h_raw = fin.read(4) - bxmatch = struct.unpack('B', h_raw[3:4])[0] - mAcount = struct.unpack('B', h_raw[2:3])[0] - orbitmatch = struct.unpack('B', h_raw[1:2])[0] - mBcount = struct.unpack('B', h_raw[0:1])[0] - - #print("bxmatch", bxmatch, "mA", mAcount, "orbitmatch", orbitmatch, "mB", mBcount) - - bx_raw = fin.read(4) - bx = struct.unpack('i', bx_raw)[0] - #print("bx",bx) - orbit_raw = fin.read(4) - orbit = struct.unpack('i', orbit_raw)[0] - - new_ls = orbit >> 18 - - if new_ls > last_ls: - #open a new output file if crossing LS boundary or on first orbit - if last_ls: - write_orbit() - update_header() - fout.close() - orbitcount = 0 - - last_ls = new_ls - fout = open(os.path.join(outdir, f'run{rn_override}_ls{str(new_ls).zfill(4)}_index000000.raw') ,'wb') - #empty file header, will be updated later - fout.write(frd_file_header_v2.ver_id) -# fout.write(bytes(16)) - fout.write(bytes(24)) - - read_len = 8*(mAcount+mBcount) - mu_blk = fin.read(8*(mAcount+mBcount)) - if len(mu_blk) != read_len: - print('incomplete read') - sys.exit(1) - - if not orbit_nr or orbit != orbit_nr: - #received new orbit, write previous one - if orbit_nr: - write_orbit() - - #should not decrease: - if orbit < orbit_nr: - orbit_count = -1 - print("got smaller orbit than earlier!") - sys.exit(1) - - print("new orbit", orbit) - orbit_nr = orbit - - #per LS file counter: - orbitcount += 1 - #total counter: - orbitcount_total += 1 - - #update orbit size and data variables - orbit_size += 12 + read_len - orbit_data += (h_raw + bx_raw + orbit_raw) + mu_blk - - except Exception as ex: - #reached premature end of the file? - print(f"exception: {ex}") - #writeout_close() - #if infilepath != 'stdin': - # fin.close() - sys.exit(1) - - #print count," : ",version,run,lumi,eid,esize,crc32c,"override id/ls/run:",count,1,rn_override - #lumi=1 - -if len(sys.argv) < 5: - print("parameters: input file (or stdin), output directory, run number (use same as input file), orbits to write") -else: - parseMuonScoutingRawFile(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4])) - - - - diff --git a/EventFilter/Utilities/src/DAQSource.cc b/EventFilter/Utilities/src/DAQSource.cc index a3734953ef6af..dde1577ac4bb0 100644 --- a/EventFilter/Utilities/src/DAQSource.cc +++ b/EventFilter/Utilities/src/DAQSource.cc @@ -7,7 +7,7 @@ #include "EventFilter/Utilities/interface/DAQSource.h" #include "EventFilter/Utilities/interface/DAQSourceModels.h" #include "EventFilter/Utilities/interface/DAQSourceModelsFRD.h" -#include "EventFilter/Utilities/interface/DAQSourceModelsScouting.h" +#include "EventFilter/Utilities/interface/DAQSourceModelsScoutingRun3.h" #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/InputSourceDescription.h" @@ -81,6 +81,8 @@ DAQSource::DAQSource(edm::ParameterSet const& pset, edm::InputSourceDescription dataMode_.reset(new DataModeFRD(this)); } else if (dataModeConfig_ == "FRDStriped") { dataMode_.reset(new DataModeFRDStriped(this)); + } else if (dataModeConfig_ == "ScoutingRun3") { + dataMode_.reset(new DataModeScoutingRun3(this)); } else throw cms::Exception("DAQSource::DAQSource") << "Unknown data mode " << dataModeConfig_; @@ -101,7 +103,8 @@ DAQSource::DAQSource(edm::ParameterSet const& pset, edm::InputSourceDescription } } - dataMode_->makeDirectoryEntries(daqDirector_->getBUBaseDirs(), daqDirector_->runString()); + dataMode_->makeDirectoryEntries( + daqDirector_->getBUBaseDirs(), daqDirector_->getBUBaseDirsNSources(), daqDirector_->runString()); auto& daqProvenanceHelpers = dataMode_->makeDaqProvenanceHelpers(); for (const auto& daqProvenanceHelper : daqProvenanceHelpers) diff --git a/EventFilter/Utilities/src/DAQSourceModelsFRD.cc b/EventFilter/Utilities/src/DAQSourceModelsFRD.cc index c0dc23cdedeab..2784cef60ec55 100644 --- a/EventFilter/Utilities/src/DAQSourceModelsFRD.cc +++ b/EventFilter/Utilities/src/DAQSourceModelsFRD.cc @@ -153,7 +153,9 @@ std::string DataModeFRD::getChecksumError() const { * FRD Multi Test */ -void DataModeFRDStriped::makeDirectoryEntries(std::vector const& baseDirs, std::string const& runDir) { +void DataModeFRDStriped::makeDirectoryEntries(std::vector const& baseDirs, + std::vector const& numSources, + std::string const& runDir) { std::filesystem::path runDirP(runDir); for (auto& baseDir : baseDirs) { std::filesystem::path baseDirP(baseDir); diff --git a/EventFilter/Utilities/src/DAQSourceModelsScouting.cc b/EventFilter/Utilities/src/DAQSourceModelsScouting.cc deleted file mode 100644 index 4626975e6014e..0000000000000 --- a/EventFilter/Utilities/src/DAQSourceModelsScouting.cc +++ /dev/null @@ -1,312 +0,0 @@ -#include "EventFilter/Utilities/interface/DAQSource.h" -#include "EventFilter/Utilities/interface/DAQSourceModelsScouting.h" - -#include -#include -#include -#include - -#include "FWCore/Framework/interface/Event.h" -#include "DataFormats/Provenance/interface/EventAuxiliary.h" -#include "DataFormats/Provenance/interface/EventID.h" - -using namespace scouting; - -void DataModeScoutingRun2Muon::readEvent(edm::EventPrincipal& eventPrincipal) { - edm::TimeValue_t time; - timeval stv; - gettimeofday(&stv, nullptr); - time = stv.tv_sec; - time = (time << 32) + stv.tv_usec; - edm::Timestamp tstamp(time); - - std::unique_ptr> rawData(new BXVector); - //allow any bx - rawData->setBXRange(0, 4000); - - unpackOrbit(rawData.get(), (char*)event_->payload(), event_->eventSize()); - - uint32_t hdrEventID = event_->event(); - edm::EventID eventID = edm::EventID(daqSource_->eventRunNumber(), daqSource_->currentLumiSection(), hdrEventID); - edm::EventAuxiliary aux( - eventID, daqSource_->processGUID(), tstamp, event_->isRealData(), edm::EventAuxiliary::PhysicsTrigger); - - aux.setProcessHistoryID(daqSource_->processHistoryID()); - daqSource_->makeEventWrapper(eventPrincipal, aux); - - std::unique_ptr edp(new edm::Wrapper>(std::move(rawData))); - eventPrincipal.put( - daqProvenanceHelpers_[0]->branchDescription(), std::move(edp), daqProvenanceHelpers_[0]->dummyProvenance()); -} - -void DataModeScoutingRun2Muon::unpackOrbit(BXVector* muons, char* buf, size_t len) { - using namespace scouting; - size_t pos = 0; - uint32_t o_test = 0; - while (pos < len) { - assert(pos + 4 <= len); - uint32_t header = *((uint32*)(buf + pos)); - uint32_t mAcount = (header & header_masks::mAcount) >> header_shifts::mAcount; - uint32_t mBcount = (header & header_masks::mBcount) >> header_shifts::mBcount; - - block* bl = (block*)(buf + pos + 4); - - pos += 12 + (mAcount + mBcount) * 8; - assert(pos <= len); - - uint32_t bx = bl->bx; - - uint32_t orbit = bl->orbit; - o_test = orbit; - - //should cuts should be applied - bool excludeIntermediate = true; - - for (size_t i = 0; i < (mAcount + mBcount); i++) { - //unpack new muon - //variables: index, ietaext, ipt, qual, iphiext, iso, chrg, iphi, ieta - - // remove intermediate if required - // index==0 and ietaext==0 are a necessary and sufficient condition - uint32_t index = (bl->mu[i].s >> shifts::index) & masks::index; - int32_t ietaext = ((bl->mu[i].f >> shifts::etaext) & masks::etaextv); - if (((bl->mu[i].f >> shifts::etaext) & masks::etaexts) != 0) - ietaext -= 256; - - if (excludeIntermediate && index == 0 && ietaext == 0) - continue; - - //extract pt and quality and apply cut if required - uint32_t ipt = (bl->mu[i].f >> shifts::pt) & masks::pt; - //cuts?? - // if((ipt-1)mu[i].f >> shifts::qual) & masks::qual; - // if(qual < qualcut) {discarded++; continue;} - - //extract integer value for extrapolated phi - int32_t iphiext = ((bl->mu[i].f >> shifts::phiext) & masks::phiext); - - // extract iso bits and charge - uint32_t iso = (bl->mu[i].s >> shifts::iso) & masks::iso; - int32_t chrg = 0; - if (((bl->mu[i].s >> shifts::chrgv) & masks::chrgv) == 1) { - chrg = ((bl->mu[i].s >> shifts::chrg) & masks::chrg) == 1 ? -1 : 1; - } - - // extract eta and phi at muon station - int32_t iphi = ((bl->mu[i].s >> shifts::phi) & masks::phi); - int32_t ieta = (bl->mu[i].s >> shifts::eta) & masks::etav; - if (((bl->mu[i].s >> shifts::eta) & masks::etas) != 0) - ieta -= 256; - - l1t::Muon muon( - *dummyLVec_, ipt, ieta, iphi, qual, chrg, chrg != 0, iso, -1, 0, false, 0, 0, 0, 0, ietaext, iphiext); - muons->push_back(bx, muon); - } - } - std::cout << "end read ... " << o_test << std::endl << std::flush; -} //unpackOrbit - -std::vector>& DataModeScoutingRun2Muon::makeDaqProvenanceHelpers() { - //set FRD data collection - daqProvenanceHelpers_.clear(); - daqProvenanceHelpers_.emplace_back(std::make_shared( - edm::TypeID(typeid(l1t::MuonBxCollection)), "l1t::MuonBxCollection", "l1tMuonBxCollection", "DAQSource")); - return daqProvenanceHelpers_; -} - -bool DataModeScoutingRun2Muon::nextEventView() { - if (eventCached_) - return true; - event_ = std::make_unique(dataBlockAddr_); - if (event_->size() > dataBlockMax_) { - throw cms::Exception("DAQSource::getNextEvent") - << " event id:" << event_->event() << " lumi:" << event_->lumi() << " run:" << event_->run() - << " of size:" << event_->size() << " bytes does not fit into a chunk of size:" << dataBlockMax_ << " bytes"; - } - return true; -} - -bool DataModeScoutingRun2Muon::checksumValid() { return true; } - -std::string DataModeScoutingRun2Muon::getChecksumError() const { return std::string(); } - -// -//2nd model: read multiple input files with different data type -// - -std::pair> DataModeScoutingRun2Multi::defineAdditionalFiles( - std::string const& primaryName, bool fileListMode) const { - std::vector additionalFiles; - - auto fullpath = std::filesystem::path(primaryName); - auto fullname = fullpath.filename(); - std::string stem = fullname.stem().string(); - std::string ext = fullname.extension().string(); - std::regex regexz("_"); - std::vector nameTokens = {std::sregex_token_iterator(stem.begin(), stem.end(), regexz, -1), - std::sregex_token_iterator()}; - - if (nameTokens.size() < 3) { - throw cms::Exception("DAQSource::getNextEvent") - << primaryName << " name doesn't start with run#_ls#_index#_*.ext syntax"; - } - - //Can also filter out non-matching primary files (if detected by DaqDirector). false will tell source to skip the primary file. - if (nameTokens.size() > 3 && nameTokens[3].rfind("secondary", 0) == 0) - return std::make_pair(false, additionalFiles); - - //TODO: provisional, name syntax should be better defined - - additionalFiles.push_back(fullpath.parent_path().string() + "/" + nameTokens[0] + "_" + nameTokens[1] + "_" + - nameTokens[2] + "_secondary" + ext); - //additionalFiles.push_back(fullpath.parent_path.string() + "/" + nameTokens[0] + "_" + nameTokens[1] + "_" + nameTokens[2] + "_tertiary" + ".raw"); - - return std::make_pair(true, additionalFiles); -} - -void DataModeScoutingRun2Multi::readEvent(edm::EventPrincipal& eventPrincipal) { - edm::TimeValue_t time; - timeval stv; - gettimeofday(&stv, nullptr); - time = stv.tv_sec; - time = (time << 32) + stv.tv_usec; - edm::Timestamp tstamp(time); - - std::unique_ptr> rawData(new BXVector); - //allow any bx - rawData->setBXRange(0, 4000); - - unpackMuonOrbit(rawData.get(), (char*)events_[0]->payload(), events_[0]->eventSize()); - - //TODO: implement here other object type (e.g. unpackCaloOrbit) - // - std::unique_ptr> rawDataSec(new BXVector); - //allow any bx - rawDataSec->setBXRange(0, 4000); - - unpackMuonOrbit(rawDataSec.get(), (char*)events_[1]->payload(), events_[1]->eventSize()); - - uint32_t hdrEventID = events_[0]->event(); //take from 1st file - edm::EventID eventID = edm::EventID(daqSource_->eventRunNumber(), daqSource_->currentLumiSection(), hdrEventID); - edm::EventAuxiliary aux( - eventID, daqSource_->processGUID(), tstamp, events_[0]->isRealData(), edm::EventAuxiliary::PhysicsTrigger); - - aux.setProcessHistoryID(daqSource_->processHistoryID()); - daqSource_->makeEventWrapper(eventPrincipal, aux); - - std::unique_ptr edp(new edm::Wrapper>(std::move(rawData))); - eventPrincipal.put( - daqProvenanceHelpers_[0]->branchDescription(), std::move(edp), daqProvenanceHelpers_[0]->dummyProvenance()); - - //TODO: use other object and provenance helper (duplicate is just for demonstration) - // std::unique_ptr edpSec(new edm::Wrapper>(std::move(rawDataSec))); - // eventPrincipal.put(daqProvenanceHelpers_[1]->branchDescription(), std::move(edpSec), daqProvenanceHelpers_[1]->dummyProvenance()); - - eventCached_ = false; -} - -void DataModeScoutingRun2Multi::unpackMuonOrbit(BXVector* muons, char* buf, size_t len) { - using namespace scouting; - size_t pos = 0; - //uint32_t o_test = 0; - while (pos < len) { - assert(pos + 4 <= len); - uint32_t header = *((uint32*)(buf + pos)); - uint32_t mAcount = (header & header_masks::mAcount) >> header_shifts::mAcount; - uint32_t mBcount = (header & header_masks::mBcount) >> header_shifts::mBcount; - - block* bl = (block*)(buf + pos + 4); - - pos += 12 + (mAcount + mBcount) * 8; - assert(pos <= len); - - uint32_t bx = bl->bx; - - //uint32_t orbit = bl->orbit; - //o_test = orbit; - - //should cuts should be applied - bool excludeIntermediate = true; - - for (size_t i = 0; i < (mAcount + mBcount); i++) { - //unpack new muon - //variables: index, ietaext, ipt, qual, iphiext, iso, chrg, iphi, ieta - - // remove intermediate if required - // index==0 and ietaext==0 are a necessary and sufficient condition - uint32_t index = (bl->mu[i].s >> shifts::index) & masks::index; - int32_t ietaext = ((bl->mu[i].f >> shifts::etaext) & masks::etaextv); - if (((bl->mu[i].f >> shifts::etaext) & masks::etaexts) != 0) - ietaext -= 256; - - if (excludeIntermediate && index == 0 && ietaext == 0) - continue; - - //extract pt and quality and apply cut if required - uint32_t ipt = (bl->mu[i].f >> shifts::pt) & masks::pt; - //cuts?? - // if((ipt-1)mu[i].f >> shifts::qual) & masks::qual; - // if(qual < qualcut) {discarded++; continue;} - - //extract integer value for extrapolated phi - int32_t iphiext = ((bl->mu[i].f >> shifts::phiext) & masks::phiext); - - // extract iso bits and charge - uint32_t iso = (bl->mu[i].s >> shifts::iso) & masks::iso; - int32_t chrg = 0; - if (((bl->mu[i].s >> shifts::chrgv) & masks::chrgv) == 1) { - chrg = ((bl->mu[i].s >> shifts::chrg) & masks::chrg) == 1 ? -1 : 1; - } - - // extract eta and phi at muon station - int32_t iphi = ((bl->mu[i].s >> shifts::phi) & masks::phi); - int32_t ieta = (bl->mu[i].s >> shifts::eta) & masks::etav; - if (((bl->mu[i].s >> shifts::eta) & masks::etas) != 0) - ieta -= 256; - - l1t::Muon muon( - *dummyLVec_, ipt, ieta, iphi, qual, chrg, chrg != 0, iso, -1, 0, false, 0, 0, 0, 0, ietaext, iphiext); - muons->push_back(bx, muon); - } - } -} //unpackOrbit - -std::vector>& DataModeScoutingRun2Multi::makeDaqProvenanceHelpers() { - //set FRD data collection - daqProvenanceHelpers_.clear(); - daqProvenanceHelpers_.emplace_back(std::make_shared( - edm::TypeID(typeid(l1t::MuonBxCollection)), "l1t::MuonBxCollection", "l1tMuonBxCollection", "DAQSource")); - //Note: two same kind of objects can not be put in the event from the source, so this example will be changed - daqProvenanceHelpers_.emplace_back(std::make_shared( - edm::TypeID(typeid(l1t::MuonBxCollection)), "l1t::MuonBxCollection", "l1tMuonBxCollection", "DAQSource")); - return daqProvenanceHelpers_; -} - -bool DataModeScoutingRun2Multi::nextEventView() { - blockCompleted_ = false; - if (eventCached_) - return true; - for (unsigned int i = 0; i < events_.size(); i++) { - //add last event length.. - dataBlockAddrs_[i] += events_[i]->size(); - } - return makeEvents(); -} - -bool DataModeScoutingRun2Multi::makeEvents() { - events_.clear(); - for (int i = 0; i < numFiles_; i++) { - if (dataBlockAddrs_[i] >= dataBlockMaxAddrs_[i]) { - blockCompleted_ = true; - return false; - } - events_.emplace_back(std::make_unique(dataBlockAddrs_[i])); - } - return true; -} - -bool DataModeScoutingRun2Multi::checksumValid() { return true; } - -std::string DataModeScoutingRun2Multi::getChecksumError() const { return std::string(); } diff --git a/EventFilter/Utilities/src/DAQSourceModelsScoutingRun3.cc b/EventFilter/Utilities/src/DAQSourceModelsScoutingRun3.cc new file mode 100644 index 0000000000000..f856fdbed66ef --- /dev/null +++ b/EventFilter/Utilities/src/DAQSourceModelsScoutingRun3.cc @@ -0,0 +1,184 @@ +#include "EventFilter//Utilities/interface/DAQSourceModelsScoutingRun3.h" + +void DataModeScoutingRun3::makeDirectoryEntries(std::vector const& baseDirs, + std::vector const& numSources, + std::string const& runDir) { + std::filesystem::path runDirP(runDir); + for (auto& baseDir : baseDirs) { + std::filesystem::path baseDirP(baseDir); + buPaths_.emplace_back(baseDirP / runDirP); + } + + // store the number of sources in each BU + buNumSources_ = numSources; +} + +std::pair> DataModeScoutingRun3::defineAdditionalFiles(std::string const& primaryName, + bool fileListMode) const { + std::vector additionalFiles; + + if (fileListMode) { + // Expected file naming when working in file list mode + for (int j = 1; j < buNumSources_[0]; j++) { + additionalFiles.push_back(primaryName + "_" + std::to_string(j)); + } + return std::make_pair(true, additionalFiles); + } + + auto fullpath = std::filesystem::path(primaryName); + auto fullname = fullpath.filename(); + + for (size_t i = 0; i < buPaths_.size(); i++) { + std::filesystem::path newPath = buPaths_[i] / fullname; + + if (i != 0) { + // secondary files from other ramdisks + additionalFiles.push_back(newPath.generic_string()); + } + + // add extra sources from the same ramdisk + for (int j = 1; j < buNumSources_[i]; j++) { + additionalFiles.push_back(newPath.generic_string() + "_" + std::to_string(j)); + } + } + return std::make_pair(true, additionalFiles); +} + +void DataModeScoutingRun3::readEvent(edm::EventPrincipal& eventPrincipal) { + assert(!events_.empty()); + + edm::TimeValue_t time; + timeval stv; + gettimeofday(&stv, nullptr); + time = stv.tv_sec; + time = (time << 32) + stv.tv_usec; + edm::Timestamp tstamp(time); + + // set provenance helpers + uint32_t hdrEventID = currOrbit_; + edm::EventID eventID = edm::EventID(daqSource_->eventRunNumber(), daqSource_->currentLumiSection(), hdrEventID); + edm::EventAuxiliary aux( + eventID, daqSource_->processGUID(), tstamp, events_[0]->isRealData(), edm::EventAuxiliary::PhysicsTrigger); + + aux.setProcessHistoryID(daqSource_->processHistoryID()); + daqSource_->makeEventWrapper(eventPrincipal, aux); + + // create scouting raw data collection + std::unique_ptr rawData(new SDSRawDataCollection); + + // Fill the ScoutingRawDataCollection with valid orbit data from the multiple sources + for (const auto& pair : sourceValidOrbitPair_) { + fillSDSRawDataCollection(*rawData, (char*)events_[pair.second]->payload(), events_[pair.second]->eventSize()); + } + + std::unique_ptr edp(new edm::Wrapper(std::move(rawData))); + eventPrincipal.put( + daqProvenanceHelpers_[0]->branchDescription(), std::move(edp), daqProvenanceHelpers_[0]->dummyProvenance()); + + eventCached_ = false; +} + +void DataModeScoutingRun3::fillSDSRawDataCollection(SDSRawDataCollection& rawData, char* buff, size_t len) { + size_t pos = 0; + + // get the source ID + int sourceId = *((uint32_t*)(buff + pos)); + pos += 4; + + // size of the orbit paylod + size_t orbitSize = len - pos; + + // set the size (=orbit size) in the SRDColletion of the current source. + // FRD size is expecting 8 bytes words, while scouting is using 4 bytes + // words. This could be different for some future sources. + FEDRawData& fedData = rawData.FEDData(sourceId); + fedData.resize(orbitSize, 4); + + memcpy(fedData.data(), buff + pos, orbitSize); + + return; +} + +std::vector>& DataModeScoutingRun3::makeDaqProvenanceHelpers() { + //set SRD data collection + daqProvenanceHelpers_.clear(); + daqProvenanceHelpers_.emplace_back(std::make_shared( + edm::TypeID(typeid(SDSRawDataCollection)), "SDSRawDataCollection", "SDSRawDataCollection", "DAQSource")); + return daqProvenanceHelpers_; +} + +bool DataModeScoutingRun3::nextEventView() { + blockCompleted_ = false; + if (eventCached_) + return true; + + // move the data block address only for the sources processed + // un the previous event by adding the last event size + for (const auto& pair : sourceValidOrbitPair_) { + dataBlockAddrs_[pair.first] += events_[pair.second]->size(); + } + + return makeEvents(); +} + +bool DataModeScoutingRun3::makeEvents() { + // clear events and reset current orbit + events_.clear(); + sourceValidOrbitPair_.clear(); + currOrbit_ = 0xFFFFFFFF; // max uint + assert(!blockCompleted_); + + // create current "events" (= orbits) list from each data source, + // check if one dataBlock terminated earlier than others. + for (int i = 0; i < numFiles_; i++) { + if (dataBlockAddrs_[i] >= dataBlockMaxAddrs_[i]) { + completedBlocks_[i] = true; + continue; + } + + // event contains data, add it to the events list + events_.emplace_back(std::make_unique(dataBlockAddrs_[i])); + if (dataBlockAddrs_[i] + events_.back()->size() > dataBlockMaxAddrs_[i]) + throw cms::Exception("DAQSource::getNextEvent") + << " event id:" << events_.back()->event() << " lumi:" << events_.back()->lumi() + << " run:" << events_.back()->run() << " of size:" << events_.back()->size() + << " bytes does not fit into the buffer or has corrupted header"; + + // find the minimum orbit for the current event between all files + if ((events_.back()->event() < currOrbit_) && (!completedBlocks_[i])) { + currOrbit_ = events_.back()->event(); + } + } + + // mark valid orbits from each data source + // e.g. find when orbit is missing from one source + bool allBlocksCompleted = true; + int evt_idx = 0; + for (int i = 0; i < numFiles_; i++) { + if (completedBlocks_[i]) { + continue; + } + + if (events_[evt_idx]->event() != currOrbit_) { + // current source (=i-th source) doesn't contain the expected orbit. + // skip it, and move to the next orbit + } else { + // add a pair + // evt_idx can be different from variable i, as some data blocks can be + // completed before others + sourceValidOrbitPair_.emplace_back(std::make_pair(i, evt_idx)); + allBlocksCompleted = false; + } + + evt_idx++; + } + + if (allBlocksCompleted) { + blockCompleted_ = true; + } + return !allBlocksCompleted; +} + +bool DataModeScoutingRun3::checksumValid() { return true; } + +std::string DataModeScoutingRun3::getChecksumError() const { return std::string(); } diff --git a/EventFilter/Utilities/src/EvFDaqDirector.cc b/EventFilter/Utilities/src/EvFDaqDirector.cc index b89a2e4b032ce..05c6ecc92fc39 100644 --- a/EventFilter/Utilities/src/EvFDaqDirector.cc +++ b/EventFilter/Utilities/src/EvFDaqDirector.cc @@ -40,6 +40,7 @@ namespace evf { : base_dir_(pset.getUntrackedParameter("baseDir")), bu_base_dir_(pset.getUntrackedParameter("buBaseDir")), bu_base_dirs_all_(pset.getUntrackedParameter>("buBaseDirsAll")), + bu_base_dirs_nSources_(pset.getUntrackedParameter>("buBaseDirsNumStreams")), run_(pset.getUntrackedParameter("runNumber")), useFileBroker_(pset.getUntrackedParameter("useFileBroker")), fileBrokerHostFromCfg_(pset.getUntrackedParameter("fileBrokerHostFromCfg", true)), @@ -146,6 +147,23 @@ namespace evf { } } + // set number of streams in each BU's ramdisk + if (bu_base_dirs_nSources_.empty()) { + // default is 1 stream per ramdisk + for (unsigned int i = 0; i < bu_base_dirs_all_.size(); i++) { + bu_base_dirs_nSources_.push_back(1); + } + } else if (bu_base_dirs_nSources_.size() != bu_base_dirs_all_.size()) { + throw cms::Exception("DaqDirector") + << " Error while setting number of sources: size mismatch with BU base directory vector"; + } else { + for (unsigned int i = 0; i < bu_base_dirs_all_.size(); i++) { + bu_base_dirs_nSources_.push_back(bu_base_dirs_nSources_[i]); + edm::LogInfo("EvFDaqDirector") << "Setting " << bu_base_dirs_nSources_[i] << " sources" + << " for ramdisk " << bu_base_dirs_all_[i]; + } + } + std::stringstream ss; ss << "run" << std::setfill('0') << std::setw(6) << run_; run_string_ = ss.str(); @@ -365,6 +383,8 @@ namespace evf { desc.addUntracked("buBaseDir", ".")->setComment("BU base ramdisk directory "); desc.addUntracked>("buBaseDirsAll", std::vector()) ->setComment("BU base ramdisk directories for multi-file DAQSource models"); + desc.addUntracked>("buBaseDirsNumStreams", std::vector()) + ->setComment("Number of streams for each BU base ramdisk directories for multi-file DAQSource models"); desc.addUntracked("runNumber", 0)->setComment("Run Number in ramdisk to open"); desc.addUntracked("useFileBroker", false) ->setComment("Use BU file service to grab input data instead of NFS file locking"); diff --git a/EventFilter/Utilities/test/FU_scouting.py b/EventFilter/Utilities/test/FU_scouting.py deleted file mode 100644 index 96f1af7d0a436..0000000000000 --- a/EventFilter/Utilities/test/FU_scouting.py +++ /dev/null @@ -1,114 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms -import FWCore.ParameterSet.VarParsing as VarParsing -import os - -options = VarParsing.VarParsing ('analysis') - -options.register ('runNumber', -# 325175, # default value - 325172, # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, # string, int, or float - "Run Number") - -options.register ('buBaseDir', - 'ramdisk', # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, # string, int, or float - "BU base directory") - -options.register ('fuBaseDir', - 'data', # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, # string, int, or float - "BU base directory") - -options.register ('fffBaseDir', - '.', # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, # string, int, or float - "FFF base directory") - -options.register ('numThreads', - 4, # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, # string, int, or float - "Number of CMSSW threads") - -options.register ('numFwkStreams', - 4, # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, # string, int, or float - "Number of CMSSW streams") - - -options.parseArguments() - -cmsswbase = os.path.expandvars("$CMSSW_BASE/") - -process = cms.Process("TESTFU") -process.maxEvents.input - -1 - -process.options = dict( - numberOfThreads = options.numThreads, - numberOfStreams = options.numFwkStreams, -# numberOfConcurrentLuminosityBlocks = 1 -) - -process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet(threshold = cms.untracked.string( "ERROR" )), - destinations = cms.untracked.vstring( 'cout' ) -) - -process.FastMonitoringService = cms.Service("FastMonitoringService", - sleepTime = cms.untracked.int32(1) -) - -process.EvFDaqDirector = cms.Service("EvFDaqDirector", - useFileBroker = cms.untracked.bool(False), - fileBrokerHostFromCfg = cms.untracked.bool(True), - fileBrokerHost = cms.untracked.string("htcp40.cern.ch"), - runNumber = cms.untracked.uint32(options.runNumber), - baseDir = cms.untracked.string(options.fffBaseDir+"/"+options.fuBaseDir), - buBaseDir = cms.untracked.string(options.fffBaseDir+"/"+options.buBaseDir), - directorIsBU = cms.untracked.bool(False), -) - -try: - os.makedirs(options.fffBaseDir+"/"+options.fuBaseDir+"/run"+str(options.runNumber).zfill(6)) -except Exception as ex: - print(str(ex)) - pass - -ram_dir_path=options.buBaseDir+"/run"+str(options.runNumber).zfill(6)+"/" - -process.source = cms.Source("DAQSource", - dataMode = cms.untracked.string("ScoutingRun2"), - verifyChecksum = cms.untracked.bool(True), - useL1EventID = cms.untracked.bool(False), - eventChunkSize = cms.untracked.uint32(8), - eventChunkBlock = cms.untracked.uint32(8), - numBuffers = cms.untracked.uint32(2), - maxBufferedFiles = cms.untracked.uint32(2), - fileListMode = cms.untracked.bool(True), - fileNames = cms.untracked.vstring( -# ram_dir_path+"run325175_ls0001_index000001.raw" - ram_dir_path+"run325172_ls0455_index000000.raw" - ) - -) - -process.output = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('file:PoolOutputTest.root'), - outputCommands = cms.untracked.vstring("drop *","keep *_rawDataCollector_*_*") - ) - - -process.ep = cms.EndPath( -# process.streamA -# + process.streamB -# + process.streamC -# + process.streamD - process.output -) diff --git a/EventFilter/Utilities/test/FU_scouting_2.py b/EventFilter/Utilities/test/FU_scouting_2.py deleted file mode 100644 index a45fb4194babc..0000000000000 --- a/EventFilter/Utilities/test/FU_scouting_2.py +++ /dev/null @@ -1,117 +0,0 @@ -from __future__ import print_function -import FWCore.ParameterSet.Config as cms -import FWCore.ParameterSet.VarParsing as VarParsing -import os - -options = VarParsing.VarParsing ('analysis') - -options.register ('runNumber', -# 325175, # default value - 325172, # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, # string, int, or float - "Run Number") - -options.register ('buBaseDir', - 'ramdisk', # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, # string, int, or float - "BU base directory") - -options.register ('fuBaseDir', - 'data', # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, # string, int, or float - "BU base directory") - -options.register ('fffBaseDir', - '.', # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.string, # string, int, or float - "FFF base directory") - -options.register ('numThreads', - 1, # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, # string, int, or float - "Number of CMSSW threads") - -options.register ('numFwkStreams', - 1, # default value - VarParsing.VarParsing.multiplicity.singleton, - VarParsing.VarParsing.varType.int, # string, int, or float - "Number of CMSSW streams") - - -options.parseArguments() - -cmsswbase = os.path.expandvars("$CMSSW_BASE/") - -process = cms.Process("TESTFU") -process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(-1) -) - -process.options = cms.untracked.PSet( - numberOfThreads = cms.untracked.uint32(options.numThreads), - numberOfStreams = cms.untracked.uint32(options.numFwkStreams), - numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1) # ShmStreamConsumer requires synchronization at LuminosityBlock boundaries -) -process.MessageLogger = cms.Service("MessageLogger", - cout = cms.untracked.PSet(threshold = cms.untracked.string( "INFO" )), - destinations = cms.untracked.vstring( 'cout' ) -) - -process.FastMonitoringService = cms.Service("FastMonitoringService", - sleepTime = cms.untracked.int32(1) -) - -process.EvFDaqDirector = cms.Service("EvFDaqDirector", - useFileBroker = cms.untracked.bool(False), - fileBrokerHostFromCfg = cms.untracked.bool(True), - fileBrokerHost = cms.untracked.string("htcp40.cern.ch"), - runNumber = cms.untracked.uint32(options.runNumber), - baseDir = cms.untracked.string(options.fffBaseDir+"/"+options.fuBaseDir), - buBaseDir = cms.untracked.string(options.fffBaseDir+"/"+options.buBaseDir), - directorIsBU = cms.untracked.bool(False), -) - -try: - os.makedirs(options.fffBaseDir+"/"+options.fuBaseDir+"/run"+str(options.runNumber).zfill(6)) -except Exception as ex: - print(str(ex)) - pass - -ram_dir_path=options.buBaseDir+"/run"+str(options.runNumber).zfill(6)+"/" - -process.source = cms.Source("DAQSource", -# dataMode = cms.untracked.string("ScoutingRun2Muon"), - dataMode = cms.untracked.string("ScoutingRun2Multi"), - verifyChecksum = cms.untracked.bool(True), - useL1EventID = cms.untracked.bool(False), - eventChunkSize = cms.untracked.uint32(8), - eventChunkBlock = cms.untracked.uint32(8), - numBuffers = cms.untracked.uint32(2), - maxBufferedFiles = cms.untracked.uint32(2), - fileListMode = cms.untracked.bool(True), - fileNames = cms.untracked.vstring( -# ram_dir_path+"run325175_ls0001_index000001.raw" - ram_dir_path+"run325172_ls0010_index000000.raw", - ram_dir_path+"run325172_ls0380_index000000.raw" - ) - -) - -process.output = cms.OutputModule("PoolOutputModule", - fileName = cms.untracked.string('file:PoolOutputTest.root'), - outputCommands = cms.untracked.vstring("drop *","keep *_rawDataCollector_*_*") - ) - - -process.ep = cms.EndPath( -# process.streamA -# + process.streamB -# + process.streamC -# + process.streamD - process.output -) diff --git a/EventFilter/Utilities/test/dumpMuonScouting.py b/EventFilter/Utilities/test/dumpMuonScouting.py deleted file mode 100644 index f09081855f5ab..0000000000000 --- a/EventFilter/Utilities/test/dumpMuonScouting.py +++ /dev/null @@ -1,30 +0,0 @@ -import FWCore.ParameterSet.Config as cms - -process = cms.Process( "DUMP" ) - -process.MessageLogger = cms.Service("MessageLogger", - cerr = cms.untracked.PSet( - enable = cms.untracked.bool(False) - ), - cout = cms.untracked.PSet( - enable = cms.untracked.bool(True), - threshold = cms.untracked.string('INFO') - ) -) - - -process.source = cms.Source("PoolSource", - fileNames = cms.untracked.vstring("file:PoolOutputTest.root") -) - -process.dump = cms.EDAnalyzer("DumpMuonScouting", - muInputTag = cms.InputTag("rawDataCollector"), - minBx = cms.int32(0), - maxBx = cms.int32(4000) -) - - -process.p = cms.Path( - process.dump -) - diff --git a/EventFilter/Utilities/test/testScoutingRun3_unpackers.py b/EventFilter/Utilities/test/testScoutingRun3_unpackers.py new file mode 100644 index 0000000000000..b5e961df12de3 --- /dev/null +++ b/EventFilter/Utilities/test/testScoutingRun3_unpackers.py @@ -0,0 +1,160 @@ +from __future__ import print_function +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing +import os, sys + +options = VarParsing.VarParsing ("analysis") + +options.register ("runNumber", + 368636, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Run Number") + +options.register ("daqSourceMode", + "ScoutingRun3", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "DAQ source data mode") + +options.register ("buBaseDir", + "/dev/shm", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "BU base directory") + +options.register ("fuBaseDir", + "/tmp/", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "BU base directory") + +options.register ("fffBaseDir", + "/dev/shm", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "FFF base directory") + +options.register ("numThreads", + 8, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Number of CMSSW threads") + +options.register ("numFwkStreams", + 8, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Number of CMSSW streams") + +options.parseArguments() + +cmsswbase = os.path.expandvars("$CMSSW_BASE/") + +process = cms.Process("SCPU") +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(-1) +) + +process.options = cms.untracked.PSet( + wantSummary = cms.untracked.bool(True), + numberOfThreads = cms.untracked.uint32(options.numThreads), + numberOfStreams = cms.untracked.uint32(options.numFwkStreams), + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1) +) +process.MessageLogger = cms.Service("MessageLogger", + cout = cms.untracked.PSet( + threshold = cms.untracked.string( "WARNING" ) + ), + destinations = cms.untracked.vstring( "cout" ), +) + +process.FastMonitoringService = cms.Service("FastMonitoringService", + sleepTime = cms.untracked.int32(1) +) + +process.Timing = cms.Service("Timing", + summaryOnly = cms.untracked.bool(True), + useJobReport = cms.untracked.bool(True) +) + +process.EvFDaqDirector = cms.Service("EvFDaqDirector", + useFileBroker = cms.untracked.bool(False), + buBaseDirsAll = cms.untracked.vstring( + options.buBaseDir + ), + buBaseDirsNumStreams = cms.untracked.vint32( + 2 + ), + fileBrokerHostFromCfg = cms.untracked.bool(True), + fileBrokerHost = cms.untracked.string("htcp40.cern.ch"), + runNumber = cms.untracked.uint32(options.runNumber), + baseDir = cms.untracked.string(options.fffBaseDir+"/"+options.fuBaseDir), + buBaseDir = cms.untracked.string(options.fffBaseDir+"/"+options.buBaseDir), + directorIsBU = cms.untracked.bool(False), +) + +try: + os.makedirs(options.fffBaseDir+"/"+options.fuBaseDir+"/run"+str(options.runNumber).zfill(6)) +except Exception as ex: + print(str(ex)) + pass + +ram_dir_path=options.buBaseDir+"/run"+str(options.runNumber).zfill(6)+"/" +flist = [ + ram_dir_path + "run" + str(options.runNumber) + "_ls0340_index000028.raw" +] + +process.source = cms.Source("DAQSource", + testing = cms.untracked.bool(True), + dataMode = cms.untracked.string(options.daqSourceMode), + verifyChecksum = cms.untracked.bool(False), + useL1EventID = cms.untracked.bool(False), + eventChunkBlock = cms.untracked.uint32(64), + eventChunkSize = cms.untracked.uint32(128), + maxChunkSize = cms.untracked.uint32(256), + numBuffers = cms.untracked.uint32(2), + maxBufferedFiles = cms.untracked.uint32(2), + fileListMode = cms.untracked.bool(True), + fileNames = cms.untracked.vstring(*flist) + +) + +fuDir = options.fuBaseDir+("/run%06d" % options.runNumber) +buDir = options.buBaseDir+("/run%06d" % options.runNumber) +for d in fuDir, buDir, options.fuBaseDir, options.buBaseDir: + if not os.path.isdir(d): + os.makedirs(d) +os.system("touch " + buDir + "/" + "fu.lock") + +process.GmtUnpacker = cms.EDProducer('ScGMTRawToDigi', + srcInputTag = cms.InputTag('rawDataCollector'), + debug = cms.untracked.bool(False) +) + +process.CaloUnpacker = cms.EDProducer('ScCaloRawToDigi', + srcInputTag = cms.InputTag('rawDataCollector'), + enableAllSums = cms.untracked.bool(True), + debug = cms.untracked.bool(False) +) + +process.outputZB = cms.OutputModule("PoolOutputModule", + fileName = cms.untracked.string('file:/dev/shm/PoolOutputTest.root'), + outputCommands = cms.untracked.vstring( + "drop *", + "keep *_GmtUnpacker_*_*", + "keep *_CaloUnpacker_*_*" + ), + #compressionAlgorithm = cms.untracked.string("ZSTD"), + #compressionLevel = cms.untracked.int32(4) +) + +rawToDigiTask = cms.Task( + process.GmtUnpacker,process.CaloUnpacker +) + +process.p = cms.Path(rawToDigiTask) + +process.ep = cms.EndPath( + process.outputZB +) diff --git a/FWCore/Framework/interface/EventProcessor.h b/FWCore/Framework/interface/EventProcessor.h index 7740f0afbd2b2..a63d6299f7150 100644 --- a/FWCore/Framework/interface/EventProcessor.h +++ b/FWCore/Framework/interface/EventProcessor.h @@ -185,8 +185,9 @@ namespace edm { // The following functions are used by the code implementing // transition handling. - InputSource::ItemType nextTransitionType(); - InputSource::ItemType lastTransitionType() const { return lastSourceTransition_; } + InputSource::ItemTypeInfo nextTransitionType(); + InputSource::ItemTypeInfo lastTransitionType() const { return lastSourceTransition_; } + void nextTransitionTypeAsync(std::shared_ptr iRunStatus, WaitingTaskHolder nextTask); void readFile(); bool fileBlockValid() { return fb_.get() != nullptr; } @@ -294,6 +295,10 @@ namespace edm { void throwAboutModulesRequiringLuminosityBlockSynchronization() const; void warnAboutModulesRequiringRunSynchronization() const; void warnAboutLegacyModules() const; + + bool needToCallNext() const { return needToCallNext_; } + void setNeedToCallNext(bool val) { needToCallNext_ = val; } + //------------------------------------------------------------------ // // Data members below. @@ -311,7 +316,7 @@ namespace edm { edm::propagate_const> thinnedAssociationsHelper_; ServiceToken serviceToken_; edm::propagate_const> input_; - InputSource::ItemType lastSourceTransition_ = InputSource::IsInvalid; + InputSource::ItemTypeInfo lastSourceTransition_; edm::propagate_const> moduleTypeResolverMaker_; edm::propagate_const> espController_; edm::propagate_const> esp_; @@ -369,7 +374,7 @@ namespace edm { bool printDependencies_ = false; bool deleteNonConsumedUnscheduledModules_ = true; - bool firstItemAfterLumiMerge_ = true; + bool needToCallNext_ = true; }; // class EventProcessor //-------------------------------------------------------------------- diff --git a/FWCore/Framework/interface/InputSource.h b/FWCore/Framework/interface/InputSource.h index 82eefaf6612b8..859b2b27088d1 100644 --- a/FWCore/Framework/interface/InputSource.h +++ b/FWCore/Framework/interface/InputSource.h @@ -51,7 +51,36 @@ namespace edm { class InputSource { public: - enum ItemType { IsInvalid, IsStop, IsFile, IsRun, IsLumi, IsEvent, IsRepeat, IsSynchronize }; + enum class ItemType : char { IsInvalid, IsStop, IsFile, IsRun, IsLumi, IsEvent, IsRepeat, IsSynchronize }; + enum class ItemPosition : char { Invalid, LastItemToBeMerged, NotLastItemToBeMerged }; + + class ItemTypeInfo { + public: + constexpr ItemTypeInfo(ItemType type = ItemType::IsInvalid, ItemPosition position = ItemPosition::Invalid) + : type_(type), position_(position) {} + ItemType itemType() const { return type_; } + ItemPosition itemPosition() const { return position_; } + + // Note that conversion to ItemType is defined and often used to + // compare an ItemTypeInfo with an ItemType. + // operator== of two ItemTypeInfo's is intentionally NOT defined. + // The constructor also allows implicit conversion from ItemType and + // often assignment from ItemType to ItemTypeInfo occurs. + operator ItemType() const { return type_; } + + private: + ItemType type_; + + // position_ should always be Invalid if the itemType_ is not IsRun or IsLumi. + // Even for runs and lumis, it is OK to leave it Invalid because the + // Framework can figure this out based on the next item. Offline it is + // simplest to always leave it Invalid. For online sources, there are + // optimizations that the Framework can use when it knows that a run or + // lumi is the last to be merged before the following item is known. This + // is useful in cases where the function named getNextItemType + // might take a long time to return. + ItemPosition position_; + }; enum ProcessingMode { Runs, RunsAndLumis, RunsLumisAndEvents }; @@ -70,7 +99,7 @@ namespace edm { static void prevalidate(ConfigurationDescriptions&); /// Advances the source to the next item - ItemType nextItemType(); + ItemTypeInfo nextItemType(); /// Read next event void readEvent(EventPrincipal& ep, StreamContext&); @@ -329,7 +358,7 @@ namespace edm { ProductRegistry& productRegistryUpdate() { return *productRegistry_; } ProcessHistoryRegistry& processHistoryRegistryForUpdate() { return *processHistoryRegistry_; } - ItemType state() const { return state_; } + ItemTypeInfo state() const { return state_; } void setRunAuxiliary(RunAuxiliary* rp) { runAuxiliary_.reset(rp); newRun_ = newLumi_ = true; @@ -349,7 +378,7 @@ namespace edm { void reset() const { resetLuminosityBlockAuxiliary(); resetRunAuxiliary(); - state_ = IsInvalid; + state_ = ItemTypeInfo(); } bool newRun() const { return newRun_; } void setNewRun() { newRun_ = true; } @@ -386,8 +415,8 @@ namespace edm { return false; } bool limitReached() const { return eventLimitReached() || lumiLimitReached(); } - virtual ItemType getNextItemType() = 0; - ItemType nextItemType_(); + virtual ItemTypeInfo getNextItemType() = 0; + ItemTypeInfo nextItemType_(); virtual std::shared_ptr readRunAuxiliary_() = 0; virtual std::shared_ptr readLuminosityBlockAuxiliary_() = 0; virtual void fillProcessBlockHelper_(); @@ -431,7 +460,7 @@ namespace edm { mutable bool newRun_; mutable bool newLumi_; bool eventCached_; - mutable ItemType state_; + mutable ItemTypeInfo state_; mutable std::shared_ptr runAuxiliary_; mutable std::shared_ptr lumiAuxiliary_; std::string statusFileName_; diff --git a/FWCore/Framework/interface/moduleAbilityEnums.h b/FWCore/Framework/interface/moduleAbilityEnums.h index 9b2c2a4488c9b..323702643b34b 100644 --- a/FWCore/Framework/interface/moduleAbilityEnums.h +++ b/FWCore/Framework/interface/moduleAbilityEnums.h @@ -45,49 +45,13 @@ namespace edm { kOneSharedResources, kOneWatchRuns, kOneWatchLuminosityBlocks, + kStreamWatchRuns, + kStreamWatchLuminosityBlocks, kWatchInputFiles, kExternalWork, kAccumulator, kTransformer }; - - namespace AbilityBits { - enum Bits { - kGlobalCache = 1, - kStreamCache = 2, - kRunCache = 4, - kLuminosityBlockCache = 8, - kRunSummaryCache = 16, - kLuminosityBlockSummaryCache = 32, - kBeginRunProducer = 64, - kEndRunProducer = 128, - kOneSharedResources = 256, - kOneWatchRuns = 512, - kOneWatchLuminosityBlocks = 1024, - kWatchInputFiles = 2048 - }; - } - - namespace AbilityToTransitions { - enum Bits { - kBeginStream = AbilityBits::kStreamCache, - kEndStream = AbilityBits::kStreamCache, - - kGlobalBeginRun = AbilityBits::kRunCache | AbilityBits::kRunSummaryCache | AbilityBits::kOneWatchRuns, - kGlobalEndRun = AbilityBits::kRunCache | AbilityBits::kRunSummaryCache | AbilityBits::kEndRunProducer | - AbilityBits::kOneWatchRuns, - kStreamBeginRun = AbilityBits::kStreamCache, - kStreamEndRun = AbilityBits::kStreamCache | AbilityBits::kRunSummaryCache, - - kGlobalBeginLuminosityBlock = AbilityBits::kLuminosityBlockCache | AbilityBits::kLuminosityBlockSummaryCache | - AbilityBits::kOneWatchLuminosityBlocks, - kGlobalEndLuminosityBlock = AbilityBits::kLuminosityBlockCache | AbilityBits::kLuminosityBlockSummaryCache | - AbilityBits::kOneWatchLuminosityBlocks, - kStreamBeginLuminosityBlock = AbilityBits::kStreamCache | AbilityBits::kLuminosityBlockSummaryCache, - kStreamEndLuminosityBlock = AbilityBits::kStreamCache | AbilityBits::kLuminosityBlockSummaryCache - - }; - } } // namespace module } // namespace edm diff --git a/FWCore/Framework/interface/stream/AbilityChecker.h b/FWCore/Framework/interface/stream/AbilityChecker.h index 7b74ba896fe02..58a58fc800436 100644 --- a/FWCore/Framework/interface/stream/AbilityChecker.h +++ b/FWCore/Framework/interface/stream/AbilityChecker.h @@ -22,6 +22,7 @@ // user include files #include "FWCore/Framework/interface/moduleAbilities.h" +#include "FWCore/Framework/interface/stream/moduleAbilities.h" // forward declarations namespace edm { @@ -112,6 +113,16 @@ namespace edm { static constexpr bool kAccumulator = true; }; + template + struct HasAbility : public HasAbility { + static constexpr bool kWatchLuminosityBlocks = true; + }; + + template + struct HasAbility : public HasAbility { + static constexpr bool kWatchRuns = true; + }; + template <> struct HasAbility { static constexpr bool kGlobalCache = false; @@ -130,6 +141,8 @@ namespace edm { static constexpr bool kExternalWork = false; static constexpr bool kAccumulator = false; static constexpr bool kTransformer = false; + static constexpr bool kWatchLuminosityBlocks = true; + static constexpr bool kWatchRuns = true; }; } // namespace impl template diff --git a/FWCore/Framework/interface/stream/AbilityToImplementor.h b/FWCore/Framework/interface/stream/AbilityToImplementor.h index bf63478c0fa5c..c956caec1ed33 100644 --- a/FWCore/Framework/interface/stream/AbilityToImplementor.h +++ b/FWCore/Framework/interface/stream/AbilityToImplementor.h @@ -22,6 +22,7 @@ // user include files #include "FWCore/Framework/interface/moduleAbilities.h" +#include "FWCore/Framework/interface/stream/moduleAbilities.h" #include "FWCore/Framework/interface/stream/implementors.h" // forward declarations @@ -113,6 +114,17 @@ namespace edm { struct AbilityToImplementor { using Type = edm::stream::impl::Accumulator; }; + + template <> + struct AbilityToImplementor { + using Type = edm::stream::impl::WatchRuns; + }; + + template <> + struct AbilityToImplementor { + using Type = edm::stream::impl::WatchLuminosityBlocks; + }; + } // namespace stream } // namespace edm diff --git a/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h b/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h index 2a4e28760f961..d13a364889d88 100644 --- a/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h +++ b/FWCore/Framework/interface/stream/EDAnalyzerAdaptor.h @@ -73,9 +73,11 @@ namespace edm { bool wantsProcessBlocks() const final { return T::HasAbility::kWatchProcessBlock; } bool wantsInputProcessBlocks() const final { return T::HasAbility::kInputProcessBlockCache; } bool wantsGlobalRuns() const final { return T::HasAbility::kRunCache or T::HasAbility::kRunSummaryCache; } + bool wantsStreamRuns() const final { return T::HasAbility::kWatchRuns; } bool wantsGlobalLuminosityBlocks() const final { return T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache; } + bool wantsStreamLuminosityBlocks() const final { return T::HasAbility::kWatchLuminosityBlocks; } private: using MyGlobal = CallGlobal; diff --git a/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h b/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h index ceaa19ea4b43f..b2cdea8816e8e 100644 --- a/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h +++ b/FWCore/Framework/interface/stream/EDAnalyzerAdaptorBase.h @@ -86,8 +86,8 @@ namespace edm { virtual bool wantsInputProcessBlocks() const = 0; virtual bool wantsGlobalRuns() const = 0; virtual bool wantsGlobalLuminosityBlocks() const = 0; - bool wantsStreamRuns() const { return true; } - bool wantsStreamLuminosityBlocks() const { return true; } + virtual bool wantsStreamRuns() const = 0; + virtual bool wantsStreamLuminosityBlocks() const = 0; std::string workerType() const { return "WorkerT"; } void registerProductsAndCallbacks(EDAnalyzerAdaptorBase const*, ProductRegistry* reg); diff --git a/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h b/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h index afef036dfbcb2..545c125638750 100644 --- a/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h +++ b/FWCore/Framework/interface/stream/ProducingModuleAdaptor.h @@ -67,10 +67,13 @@ namespace edm { return T::HasAbility::kRunCache or T::HasAbility::kRunSummaryCache or T::HasAbility::kBeginRunProducer or T::HasAbility::kEndRunProducer; } + bool wantsStreamRuns() const final { return T::HasAbility::kWatchRuns; } + bool wantsGlobalLuminosityBlocks() const final { return T::HasAbility::kLuminosityBlockCache or T::HasAbility::kLuminosityBlockSummaryCache or T::HasAbility::kBeginLuminosityBlockProducer or T::HasAbility::kEndLuminosityBlockProducer; } + bool wantsStreamLuminosityBlocks() const final { return T::HasAbility::kWatchLuminosityBlocks; } bool hasAcquire() const final { return T::HasAbility::kExternalWork; } diff --git a/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h b/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h index b68806dcab1dc..99c2581fbf288 100644 --- a/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h +++ b/FWCore/Framework/interface/stream/ProducingModuleAdaptorBase.h @@ -93,8 +93,8 @@ namespace edm { virtual bool wantsGlobalLuminosityBlocks() const = 0; virtual bool hasAcquire() const = 0; virtual bool hasAccumulator() const = 0; - bool wantsStreamRuns() const { return true; } - bool wantsStreamLuminosityBlocks() const { return true; } + virtual bool wantsStreamRuns() const = 0; + virtual bool wantsStreamLuminosityBlocks() const = 0; void registerProductsAndCallbacks(ProducingModuleAdaptorBase const*, ProductRegistry* reg); diff --git a/FWCore/Framework/interface/stream/implementors.h b/FWCore/Framework/interface/stream/implementors.h index a49a4132c34f6..64ffe5acc87cc 100644 --- a/FWCore/Framework/interface/stream/implementors.h +++ b/FWCore/Framework/interface/stream/implementors.h @@ -291,6 +291,27 @@ namespace edm { virtual void acquire(Event const&, edm::EventSetup const&, WaitingTaskWithArenaHolder) = 0; }; + class WatchLuminosityBlocks { + public: + WatchLuminosityBlocks() = default; + WatchLuminosityBlocks(WatchLuminosityBlocks const&) = delete; + WatchLuminosityBlocks& operator=(WatchLuminosityBlocks const&) = delete; + virtual ~WatchLuminosityBlocks() noexcept(false){}; + + // virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) = 0; + // virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {} + }; + + class WatchRuns { + public: + WatchRuns() = default; + WatchRuns(WatchRuns const&) = delete; + WatchRuns& operator=(WatchRuns const&) = delete; + virtual ~WatchRuns() noexcept(false){}; + + // virtual void beginRun(edm::Run const&, edm::EventSetup const&) = 0; + // virtual void endRun(edm::Run const&, edm::EventSetup const&) {} + }; class Transformer : private TransformerBase, public EDProducerBase { public: Transformer() = default; diff --git a/FWCore/Framework/interface/stream/moduleAbilities.h b/FWCore/Framework/interface/stream/moduleAbilities.h new file mode 100644 index 0000000000000..0d1a56408a53d --- /dev/null +++ b/FWCore/Framework/interface/stream/moduleAbilities.h @@ -0,0 +1,42 @@ +#ifndef FWCore_Framework_stream_moduleAbilities_h +#define FWCore_Framework_stream_moduleAbilities_h +// -*- C++ -*- +// +// Package: FWCore/Framework +// Class : moduleAbilities +// +/**\file moduleAbilities moduleAbilities.h "FWCore/Framework/interface/one/moduleAbilities.h" + + Description: Template arguments which only apply to stream::{Module} classes + + Usage: + + +*/ +// +// Original Author: Chris Jones +// Created: Fri, 22 Dec 2023 19:38:53 GMT +// + +// system include files + +// user include files +#include "FWCore/Framework/interface/moduleAbilities.h" + +// forward declarations + +namespace edm { + namespace stream { + struct WatchRuns { + static constexpr module::Abilities kAbilities = module::Abilities::kStreamWatchRuns; + using Type = module::Empty; + }; + + struct WatchLuminosityBlocks { + static constexpr module::Abilities kAbilities = module::Abilities::kStreamWatchLuminosityBlocks; + using Type = module::Empty; + }; + } // namespace stream +} // namespace edm + +#endif diff --git a/FWCore/Framework/src/EventPrincipal.cc b/FWCore/Framework/src/EventPrincipal.cc index 8e25e00bd5063..4919d9b821151 100644 --- a/FWCore/Framework/src/EventPrincipal.cc +++ b/FWCore/Framework/src/EventPrincipal.cc @@ -81,7 +81,7 @@ namespace edm { } else { provRetrieverPtr_->mergeParentProcessRetriever(provRetriever); } - if (wasBranchListIndexesChangedFromInput(branchListIndexes)) { + if (wasBranchListIndexesChangedFromInput(branchListIndexes) or branchListIndexes_.empty()) { if (branchIDListHelper_->hasProducedProducts()) { // Add index into BranchIDListRegistry for products produced this process branchListIndexes.push_back(branchIDListHelper_->producedBranchListIndex()); @@ -99,7 +99,7 @@ namespace edm { DelayedReader* reader) { eventSelectionIDs_ = std::move(eventSelectionIDs); - if (wasBranchListIndexesChangedFromInput(branchListIndexes)) { + if (wasBranchListIndexesChangedFromInput(branchListIndexes) or branchListIndexes_.empty()) { if (branchIDListHelper_->hasProducedProducts()) { // Add index into BranchIDListRegistry for products produced this process branchListIndexes.push_back(branchIDListHelper_->producedBranchListIndex()); diff --git a/FWCore/Framework/src/EventProcessor.cc b/FWCore/Framework/src/EventProcessor.cc index 76de43cb7a500..25c48d59e80c1 100644 --- a/FWCore/Framework/src/EventProcessor.cc +++ b/FWCore/Framework/src/EventProcessor.cc @@ -867,29 +867,53 @@ namespace edm { edm::ActivityRegistry& act_; }; } // namespace - InputSource::ItemType EventProcessor::nextTransitionType() { + + InputSource::ItemTypeInfo EventProcessor::nextTransitionType() { SendSourceTerminationSignalIfException sentry(actReg_.get()); - InputSource::ItemType itemType; + InputSource::ItemTypeInfo itemTypeInfo; { SourceNextGuard guard(*actReg_.get()); //For now, do nothing with InputSource::IsSynchronize do { - itemType = input_->nextItemType(); - } while (itemType == InputSource::IsSynchronize); + itemTypeInfo = input_->nextItemType(); + } while (itemTypeInfo == InputSource::ItemType::IsSynchronize); } - lastSourceTransition_ = itemType; + lastSourceTransition_ = itemTypeInfo; sentry.completedSuccessfully(); StatusCode returnCode = epSuccess; if (checkForAsyncStopRequest(returnCode)) { actReg_->preSourceEarlyTerminationSignal_(TerminationOrigin::ExternalSignal); - lastSourceTransition_ = InputSource::IsStop; + lastSourceTransition_ = InputSource::ItemType::IsStop; } return lastSourceTransition_; } + void EventProcessor::nextTransitionTypeAsync(std::shared_ptr iRunStatus, + WaitingTaskHolder nextTask) { + auto group = nextTask.group(); + sourceResourcesAcquirer_.serialQueueChain().push( + *group, [this, runStatus = std::move(iRunStatus), nextHolder = std::move(nextTask)]() mutable { + CMS_SA_ALLOW try { + ServiceRegistry::Operate operate(serviceToken_); + std::lock_guard guard(*(sourceMutex_.get())); + nextTransitionType(); + if (lastTransitionType() == InputSource::ItemType::IsRun && + runStatus->runPrincipal()->run() == input_->run() && + runStatus->runPrincipal()->reducedProcessHistoryID() == input_->reducedProcessHistoryID()) { + throw Exception(errors::LogicError) + << "InputSource claimed previous Run Entry was last to be merged in this file,\n" + << "but the next entry has the same run number and reduced ProcessHistoryID.\n" + << "This is probably a bug in the InputSource. Please report to the Core group.\n"; + } + } catch (...) { + nextHolder.doneWaiting(std::current_exception()); + } + }); + } + EventProcessor::StatusCode EventProcessor::runToCompletion() { beginJob(); //make sure this was called @@ -919,11 +943,11 @@ namespace edm { if (deferredExceptionPtrIsSet_.load()) { std::rethrow_exception(deferredExceptionPtr_); } - if (trans != InputSource::IsStop) { + if (trans != InputSource::ItemType::IsStop) { //problem with the source doErrorStuff(); - throw cms::Exception("BadTransition") << "Unexpected transition change " << trans; + throw cms::Exception("BadTransition") << "Unexpected transition change " << static_cast(trans); } } while (not endOfLoop()); }); // convertException::wrap @@ -1152,7 +1176,7 @@ namespace edm { InputSource::ItemType EventProcessor::processRuns() { FinalWaitingTask waitTask{taskGroup_}; - assert(lastTransitionType() == InputSource::IsRun); + assert(lastTransitionType() == InputSource::ItemType::IsRun); if (streamRunActive_ == 0) { assert(streamLumiActive_ == 0); @@ -1163,12 +1187,15 @@ namespace edm { auto runStatus = streamRunStatus_[0]; - while (lastTransitionType() == InputSource::IsRun and runStatus->runPrincipal()->run() == input_->run() and + while (lastTransitionType() == InputSource::ItemType::IsRun and + runStatus->runPrincipal()->run() == input_->run() and runStatus->runPrincipal()->reducedProcessHistoryID() == input_->reducedProcessHistoryID()) { readAndMergeRun(*runStatus); nextTransitionType(); } + setNeedToCallNext(false); + WaitingTaskHolder holder{taskGroup_, &waitTask}; runStatus->setHolderOfTaskInProcessRuns(holder); if (streamLumiActive_ > 0) { @@ -1261,7 +1288,13 @@ namespace edm { using namespace edm::waiting_task::chain; chain::first([this, status](auto nextTask) mutable { - CMS_SA_ALLOW try { readAndMergeRunEntriesAsync(std::move(status), nextTask); } catch (...) { + CMS_SA_ALLOW try { + if (lastTransitionType().itemPosition() != InputSource::ItemPosition::LastItemToBeMerged) { + readAndMergeRunEntriesAsync(status, nextTask); + } else { + setNeedToCallNext(true); + } + } catch (...) { status->setStopBeforeProcessingRun(true); nextTask.doneWaiting(std::current_exception()); } @@ -1465,7 +1498,7 @@ namespace edm { } }); - if (lastTransitionType() == InputSource::IsRun) { + if (lastTransitionType() == InputSource::ItemType::IsRun) { CMS_SA_ALLOW try { beginRunAsync(IOVSyncValue(EventID(input_->run(), 0, 0), input_->runAuxiliary()->beginTime()), nextTask); } catch (...) { @@ -1625,7 +1658,7 @@ namespace edm { runStatus->setCleaningUpAfterException(cleaningUpAfterException); WaitingTaskHolder holder{taskGroup_, &waitTask}; runStatus->setHolderOfTaskInProcessRuns(holder); - lastSourceTransition_ = InputSource::IsStop; + lastSourceTransition_ = InputSource::ItemType::IsStop; endRunAsync(streamRunStatus_[0], std::move(holder)); waitTask.wait(); } @@ -1698,8 +1731,11 @@ namespace edm { using namespace edm::waiting_task::chain; chain::first([this, status](auto nextTask) mutable { - readAndMergeLumiEntriesAsync(std::move(status), std::move(nextTask)); - firstItemAfterLumiMerge_ = true; + if (lastTransitionType().itemPosition() != InputSource::ItemPosition::LastItemToBeMerged) { + readAndMergeLumiEntriesAsync(std::move(status), std::move(nextTask)); + } else { + setNeedToCallNext(true); + } }) | then([this, status, &es, &lumiPrincipal](auto nextTask) { LumiTransitionInfo transitionInfo(lumiPrincipal, es, &status->eventSetupImpls()); using Traits = OccurrenceTraits; @@ -1799,12 +1835,11 @@ namespace edm { auto status = streamLumiStatus_[0]; //read from streamLumiActive_ happened in calling routine status->setEventProcessingState(LuminosityBlockProcessingStatus::EventProcessingState::kProcessing); - while (lastTransitionType() == InputSource::IsLumi and + while (lastTransitionType() == InputSource::ItemType::IsLumi and status->lumiPrincipal()->luminosityBlock() == input_->luminosityBlock()) { readAndMergeLumi(*status); nextTransitionType(); } - firstItemAfterLumiMerge_ = true; }) | chain::then([this](auto nextTask) mutable { unsigned int streamIndex = 0; oneapi::tbb::task_arena arena{oneapi::tbb::task_arena::attach()}; @@ -2091,13 +2126,20 @@ namespace edm { std::lock_guard guard(*(sourceMutex_.get())); nextTransitionType(); - while (lastTransitionType() == InputSource::IsRun and status->runPrincipal()->run() == input_->run() and + setNeedToCallNext(false); + + while (lastTransitionType() == InputSource::ItemType::IsRun and + status->runPrincipal()->run() == input_->run() and status->runPrincipal()->reducedProcessHistoryID() == input_->reducedProcessHistoryID()) { if (status->holderOfTaskInProcessRuns().taskHasFailed()) { status->setStopBeforeProcessingRun(true); return; } readAndMergeRun(*status); + if (lastTransitionType().itemPosition() == InputSource::ItemPosition::LastItemToBeMerged) { + setNeedToCallNext(true); + return; + } nextTransitionType(); } } catch (...) { @@ -2118,9 +2160,15 @@ namespace edm { std::lock_guard guard(*(sourceMutex_.get())); nextTransitionType(); - while (lastTransitionType() == InputSource::IsLumi and + setNeedToCallNext(false); + + while (lastTransitionType() == InputSource::ItemType::IsLumi and iLumiStatus->lumiPrincipal()->luminosityBlock() == input_->luminosityBlock()) { readAndMergeLumi(*iLumiStatus); + if (lastTransitionType().itemPosition() == InputSource::ItemPosition::LastItemToBeMerged) { + setNeedToCallNext(true); + return; + } nextTransitionType(); } } catch (...) { @@ -2131,25 +2179,36 @@ namespace edm { void EventProcessor::handleNextItemAfterMergingRunEntries(std::shared_ptr iRunStatus, WaitingTaskHolder iHolder) { - if (lastTransitionType() == InputSource::IsFile) { - iRunStatus->holderOfTaskInProcessRuns().doneWaiting(std::exception_ptr{}); - iHolder.doneWaiting(std::exception_ptr{}); - } else if (lastTransitionType() == InputSource::IsLumi && !iHolder.taskHasFailed()) { - CMS_SA_ALLOW try { - beginLumiAsync(IOVSyncValue(EventID(input_->run(), input_->luminosityBlock(), 0), - input_->luminosityBlockAuxiliary()->beginTime()), - iRunStatus, - iHolder); - } catch (...) { - WaitingTaskHolder copyHolder(iHolder); - iHolder.doneWaiting(std::current_exception()); - endRunAsync(std::move(iRunStatus), std::move(iHolder)); + chain::first([this, iRunStatus](auto nextTask) mutable { + if (needToCallNext()) { + nextTransitionTypeAsync(std::move(iRunStatus), std::move(nextTask)); + } + }) | chain::then([this, iRunStatus](std::exception_ptr const* iException, auto nextTask) { + ServiceRegistry::Operate operate(serviceToken_); + if (iException) { + WaitingTaskHolder copyHolder(nextTask); + copyHolder.doneWaiting(*iException); + } + if (lastTransitionType() == InputSource::ItemType::IsFile) { + iRunStatus->holderOfTaskInProcessRuns().doneWaiting(std::exception_ptr{}); + return; + } + if (lastTransitionType() == InputSource::ItemType::IsLumi && !nextTask.taskHasFailed()) { + CMS_SA_ALLOW try { + beginLumiAsync(IOVSyncValue(EventID(input_->run(), input_->luminosityBlock(), 0), + input_->luminosityBlockAuxiliary()->beginTime()), + iRunStatus, + nextTask); + return; + } catch (...) { + WaitingTaskHolder copyHolder(nextTask); + copyHolder.doneWaiting(std::current_exception()); + } } - } else { // Note that endRunAsync will call beginRunAsync for the following run // if appropriate. - endRunAsync(std::move(iRunStatus), std::move(iHolder)); - } + endRunAsync(iRunStatus, std::move(nextTask)); + }) | chain::runLast(std::move(iHolder)); } bool EventProcessor::readNextEventForStream(WaitingTaskHolder const& iTask, @@ -2175,7 +2234,7 @@ namespace edm { // Are output modules or the looper requesting we stop? if (shouldWeStop()) { - lastSourceTransition_ = InputSource::IsStop; + lastSourceTransition_ = InputSource::ItemType::IsStop; iStatus.setEventProcessingState(LuminosityBlockProcessingStatus::EventProcessingState::kStopLumi); return false; } @@ -2190,17 +2249,24 @@ namespace edm { // If we didn't already call nextTransitionType while merging lumis, call it here. // This asks the input source what is next and also checks for signals. - InputSource::ItemType itemType = firstItemAfterLumiMerge_ ? lastTransitionType() : nextTransitionType(); - firstItemAfterLumiMerge_ = false; + InputSource::ItemType itemType = needToCallNext() ? nextTransitionType() : lastTransitionType(); + setNeedToCallNext(true); - if (InputSource::IsEvent != itemType) { + if (InputSource::ItemType::IsEvent != itemType) { // IsFile may continue processing the lumi and // looper_ can cause the input source to declare a new IsRun which is actually // just a continuation of the previous run - if (InputSource::IsStop == itemType or InputSource::IsLumi == itemType or - (InputSource::IsRun == itemType and + if (InputSource::ItemType::IsStop == itemType or InputSource::ItemType::IsLumi == itemType or + (InputSource::ItemType::IsRun == itemType and (iStatus.lumiPrincipal()->run() != input_->run() or iStatus.lumiPrincipal()->runPrincipal().reducedProcessHistoryID() != input_->reducedProcessHistoryID()))) { + if (itemType == InputSource::ItemType::IsLumi && + iStatus.lumiPrincipal()->luminosityBlock() == input_->luminosityBlock()) { + throw Exception(errors::LogicError) + << "InputSource claimed previous Lumi Entry was last to be merged in this file,\n" + << "but the next lumi entry has the same lumi number.\n" + << "This is probably a bug in the InputSource. Please report to the Core group.\n"; + } iStatus.setEventProcessingState(LuminosityBlockProcessingStatus::EventProcessingState::kStopLumi); } else { iStatus.setEventProcessingState(LuminosityBlockProcessingStatus::EventProcessingState::kPauseForFileTransition); @@ -2241,7 +2307,7 @@ namespace edm { if (status->eventProcessingState() == LuminosityBlockProcessingStatus::EventProcessingState::kStopLumi) { if (not status->haveStartedNextLumiOrEndedRun()) { status->startNextLumiOrEndRun(); - if (lastTransitionType() == InputSource::IsLumi && !iTask.taskHasFailed()) { + if (lastTransitionType() == InputSource::ItemType::IsLumi && !iTask.taskHasFailed()) { CMS_SA_ALLOW try { beginLumiAsync(IOVSyncValue(EventID(input_->run(), input_->luminosityBlock(), 0), input_->luminosityBlockAuxiliary()->beginTime()), diff --git a/FWCore/Framework/src/InputSource.cc b/FWCore/Framework/src/InputSource.cc index 8303180b6c1c4..7f676089aa725 100644 --- a/FWCore/Framework/src/InputSource.cc +++ b/FWCore/Framework/src/InputSource.cc @@ -64,7 +64,7 @@ namespace edm { newRun_(true), newLumi_(true), eventCached_(false), - state_(IsInvalid), + state_(), runAuxiliary_(), lumiAuxiliary_(), statusFileName_(), @@ -133,61 +133,62 @@ namespace edm { // implement the skipping internally, so that the performance gain is realized. // If this is done for a source, the 'if' blocks in this function will never be entered // for that source. - InputSource::ItemType InputSource::nextItemType_() { - ItemType itemType = callWithTryCatchAndPrint([this]() { return getNextItemType(); }, - "Calling InputSource::getNextItemType"); + InputSource::ItemTypeInfo InputSource::nextItemType_() { + ItemTypeInfo itemTypeInfo = callWithTryCatchAndPrint([this]() { return getNextItemType(); }, + "Calling InputSource::getNextItemType"); - if (itemType == IsEvent && processingMode() != RunsLumisAndEvents) { + if (itemTypeInfo == ItemType::IsEvent && processingMode() != RunsLumisAndEvents) { skipEvents(1); return nextItemType_(); } - if (itemType == IsLumi && processingMode() == Runs) { + if (itemTypeInfo == ItemType::IsLumi && processingMode() == Runs) { // QQQ skipLuminosityBlock_(); return nextItemType_(); } - return itemType; + return itemTypeInfo; } - InputSource::ItemType InputSource::nextItemType() { - ItemType oldState = state_; + InputSource::ItemTypeInfo InputSource::nextItemType() { + ItemType oldType = state_.itemType(); if (eventLimitReached()) { // If the maximum event limit has been reached, stop. - state_ = IsStop; + state_ = ItemType::IsStop; } else if (lumiLimitReached()) { // If the maximum lumi limit has been reached, stop // when reaching a new file, run, or lumi. - if (oldState == IsInvalid || oldState == IsFile || oldState == IsRun || processingMode() != RunsLumisAndEvents) { - state_ = IsStop; + if (oldType == ItemType::IsInvalid || oldType == ItemType::IsFile || oldType == ItemType::IsRun || + processingMode() != RunsLumisAndEvents) { + state_ = ItemType::IsStop; } else { - ItemType newState = nextItemType_(); - if (newState == IsEvent) { + ItemTypeInfo newState = nextItemType_(); + if (newState == ItemType::IsEvent) { assert(processingMode() == RunsLumisAndEvents); - state_ = IsEvent; + state_ = ItemType::IsEvent; } else { - state_ = IsStop; + state_ = ItemType::IsStop; } } } else { - ItemType newState = nextItemType_(); - if (newState == IsStop) { - state_ = IsStop; - } else if (newState == IsSynchronize) { - state_ = IsSynchronize; - } else if (newState == IsFile || oldState == IsInvalid) { - state_ = IsFile; - } else if (newState == IsRun || oldState == IsFile) { + ItemTypeInfo newState = nextItemType_(); + if (newState == ItemType::IsStop) { + state_ = ItemType::IsStop; + } else if (newState == ItemType::IsSynchronize) { + state_ = ItemType::IsSynchronize; + } else if (newState == ItemType::IsFile || oldType == ItemType::IsInvalid) { + state_ = ItemType::IsFile; + } else if (newState == ItemType::IsRun || oldType == ItemType::IsFile) { runAuxiliary_ = readRunAuxiliary(); - state_ = IsRun; - } else if (newState == IsLumi || oldState == IsRun) { + state_ = (newState == ItemType::IsRun) ? newState : ItemTypeInfo(ItemType::IsRun); + } else if (newState == ItemType::IsLumi || oldType == ItemType::IsRun) { assert(processingMode() != Runs); lumiAuxiliary_ = readLuminosityBlockAuxiliary(); - state_ = IsLumi; + state_ = (newState == ItemType::IsLumi) ? newState : ItemTypeInfo(ItemType::IsLumi); } else { assert(processingMode() == RunsLumisAndEvents); - state_ = IsEvent; + state_ = ItemType::IsEvent; } } - if (state_ == IsStop) { + if (state_ == ItemType::IsStop) { lumiAuxiliary_.reset(); runAuxiliary_.reset(); } @@ -220,7 +221,7 @@ namespace edm { // Return a dummy file block. std::shared_ptr InputSource::readFile() { - assert(state_ == IsFile); + assert(state_ == ItemType::IsFile); assert(!limitReached()); return callWithTryCatchAndPrint >([this]() { return readFile_(); }, "Calling InputSource::readFile_"); @@ -299,7 +300,7 @@ namespace edm { } void InputSource::readEvent(EventPrincipal& ep, StreamContext& streamContext) { - assert(state_ == IsEvent); + assert(state_ == ItemType::IsEvent); assert(!eventLimitReached()); { // block scope, in order to issue the PostSourceEvent signal before calling postRead and issueReports @@ -345,7 +346,7 @@ namespace edm { } void InputSource::rewind() { - state_ = IsInvalid; + state_ = ItemTypeInfo(); remainingEvents_ = maxEvents_; setNewRun(); setNewLumi(); diff --git a/FWCore/Framework/src/Path.cc b/FWCore/Framework/src/Path.cc index b9498a03ff23c..ba6462aa6f3e1 100644 --- a/FWCore/Framework/src/Path.cc +++ b/FWCore/Framework/src/Path.cc @@ -311,11 +311,13 @@ namespace edm { if (pathStatusInserter_) { // pathStatusInserter is null for EndPaths pathStatusInserter_->setPathStatus(streamID, status); } - std::exception_ptr jException = - pathStatusInserterWorker_->runModuleDirectly>( - iInfo, streamID, ParentContext(iContext), iContext); - if (jException && not iException) { - iException = jException; + if (pathStatusInserterWorker_) { + std::exception_ptr jException = + pathStatusInserterWorker_->runModuleDirectly>( + iInfo, streamID, ParentContext(iContext), iContext); + if (jException && not iException) { + iException = jException; + } } actReg_->postPathEventSignal_(*iContext, pathContext_, status); } catch (...) { diff --git a/FWCore/Framework/src/PathsAndConsumesOfModules.cc b/FWCore/Framework/src/PathsAndConsumesOfModules.cc index 343015af93415..89981a576fab0 100644 --- a/FWCore/Framework/src/PathsAndConsumesOfModules.cc +++ b/FWCore/Framework/src/PathsAndConsumesOfModules.cc @@ -328,6 +328,28 @@ namespace edm { return allDependenciesRan; } + + void findAllDependenciesForModule(unsigned int iModID, + std::vector const& iStatus, + std::vector>& oDependencies) { + auto const& dependsOn = iStatus[iModID].dependsOn_; + if (dependsOn.empty() or !oDependencies[iModID].empty()) { + return; + } + oDependencies[iModID].insert(dependsOn.begin(), dependsOn.end()); + for (auto dep : dependsOn) { + findAllDependenciesForModule(dep, iStatus, oDependencies); + oDependencies[iModID].merge(oDependencies[dep]); + } + } + std::vector> findAllDependenciesForModules( + std::vector const& iStatus) { + std::vector> ret(iStatus.size()); + for (unsigned int id = 0; id < iStatus.size(); ++id) { + findAllDependenciesForModule(id, iStatus, ret); + } + return ret; + } } // namespace void checkForModuleDependencyCorrectness(edm::PathsAndConsumesOfModulesBase const& iPnC, bool iPrintDependencies) { constexpr auto kInvalidIndex = std::numeric_limits::max(); @@ -425,12 +447,14 @@ namespace edm { statusOfModules[mod->id()].pathsOn_.push_back(p + offset); } } - status.nModules_ = uniqueModules.size() + 1; + status.nModules_ = uniqueModules.size(); //add the EndPathStatusInserter at the end auto found = pathStatusInserterModuleLabelToModuleID.find(iPnC.endPaths()[p]); - assert(found != pathStatusInserterModuleLabelToModuleID.end()); - status.modulesOnPath_.push_back(found->second); + if (found != pathStatusInserterModuleLabelToModuleID.end()) { + status.modulesOnPath_.push_back(found->second); + ++status.nModules_; + } } } @@ -450,6 +474,11 @@ namespace edm { } unsigned int nPathsFinished = 0; + for (auto const& status : statusOfPaths) { + if (status.nModules_ == 0) { + ++nPathsFinished; + } + } //if a circular dependency exception happens, stackTrace has the info std::vector stackTrace; @@ -636,26 +665,6 @@ namespace edm { //NOTE: although the following conditions are not needed for safe running, they are // policy choices the collaboration has made. - //Check to see if for each path if the order of the modules is correct based on dependencies - for (auto& p : statusOfPaths) { - for (unsigned long int i = 0; p.nModules_ > 0 and i < p.nModules_ - 1; ++i) { - auto moduleID = p.modulesOnPath_[i]; - if (not statusOfModules[moduleID].dependsOn_.empty()) { - for (unsigned long int j = i + 1; j < p.nModules_; ++j) { - auto testModuleID = p.modulesOnPath_[j]; - for (auto depModuleID : statusOfModules[moduleID].dependsOn_) { - if (depModuleID == testModuleID) { - throw edm::Exception(edm::errors::ScheduleExecutionFailure, "Unrunnable schedule\n") - << "Dependent module later on Path\n" - << " module '" << moduleIndexToNames[moduleID] << "' depends on '" - << moduleIndexToNames[depModuleID] << "' which is later on path " << pathName(p); - } - } - } - } - } - } - //HLT wants all paths to be equivalent. If a path has a module A that needs data from module B and module B appears on one path // as module A then B must appear on ALL paths that have A. unsigned int modIndex = 0; @@ -704,5 +713,24 @@ namespace edm { } ++modIndex; } + + //Check to see if for each path if the order of the modules is correct based on dependencies + auto allDependencies = findAllDependenciesForModules(statusOfModules); + for (auto& p : statusOfPaths) { + for (unsigned long int i = 0; p.nModules_ > 0 and i < p.nModules_ - 1; ++i) { + auto moduleID = p.modulesOnPath_[i]; + if (not allDependencies[moduleID].empty()) { + for (unsigned long int j = i + 1; j < p.nModules_; ++j) { + auto testModuleID = p.modulesOnPath_[j]; + if (allDependencies[moduleID].find(testModuleID) != allDependencies[moduleID].end()) { + throw edm::Exception(edm::errors::ScheduleExecutionFailure, "Unrunnable schedule\n") + << "Dependent module later on Path\n" + << " module '" << moduleIndexToNames[moduleID] << "' depends on '" + << moduleIndexToNames[testModuleID] << "' which is later on path " << pathName(p); + } + } + } + } + } } } // namespace edm diff --git a/FWCore/Framework/src/ProductResolvers.cc b/FWCore/Framework/src/ProductResolvers.cc index b5277365037e8..0346563353373 100644 --- a/FWCore/Framework/src/ProductResolvers.cc +++ b/FWCore/Framework/src/ProductResolvers.cc @@ -159,13 +159,12 @@ namespace edm { } namespace { - cms::Exception& extendException(cms::Exception& e, BranchDescription const& bd, ModuleCallingContext const* mcc) { + void extendException(cms::Exception& e, BranchDescription const& bd, ModuleCallingContext const* mcc) { e.addContext(std::string("While reading from source ") + bd.className() + " " + bd.moduleLabel() + " '" + bd.productInstanceName() + "' " + bd.processName()); if (mcc) { edm::exceptionContext(e, *mcc); } - return e; } } // namespace ProductResolverBase::Resolution DelayedReaderInputProductResolver::resolveProduct_( @@ -197,10 +196,12 @@ namespace edm { //another thread could have beaten us here setProduct(reader->getProduct(branchDescription().branchID(), &principal, mcc)); } catch (cms::Exception& e) { - throw extendException(e, branchDescription(), mcc); + extendException(e, branchDescription(), mcc); + throw; } catch (std::exception const& e) { auto newExcept = edm::Exception(errors::StdException) << e.what(); - throw extendException(newExcept, branchDescription(), mcc); + extendException(newExcept, branchDescription(), mcc); + throw newExcept; } } } @@ -299,10 +300,12 @@ namespace edm { //another thread could have finished this while we were waiting setProduct(reader->getProduct(branchDescription().branchID(), &principal, mcc)); } catch (cms::Exception& e) { - throw extendException(e, branchDescription(), mcc); + extendException(e, branchDescription(), mcc); + throw; } catch (std::exception const& e) { auto newExcept = edm::Exception(errors::StdException) << e.what(); - throw extendException(newExcept, branchDescription(), mcc); + extendException(newExcept, branchDescription(), mcc); + throw newExcept; } } } diff --git a/FWCore/Framework/src/Schedule.cc b/FWCore/Framework/src/Schedule.cc index 6c32305da7be5..da81825479246 100644 --- a/FWCore/Framework/src/Schedule.cc +++ b/FWCore/Framework/src/Schedule.cc @@ -510,13 +510,16 @@ namespace edm { processConfiguration, std::string("PathStatusInserter")); - makePathStatusInserters(endPathStatusInserters_, - *endPathNames_, - prealloc, - preg, - areg, - processConfiguration, - std::string("EndPathStatusInserter")); + if (endPathNames_->size() > 1) { + //NOTE: FinalPaths are a type of EndPath + makePathStatusInserters(endPathStatusInserters_, + *endPathNames_, + prealloc, + preg, + areg, + processConfiguration, + std::string("EndPathStatusInserter")); + } assert(0 < prealloc.numberOfStreams()); streamSchedules_.reserve(prealloc.numberOfStreams()); diff --git a/FWCore/Framework/src/StreamSchedule.cc b/FWCore/Framework/src/StreamSchedule.cc index 433f60b78c5c2..d1a4d1df2a393 100644 --- a/FWCore/Framework/src/StreamSchedule.cc +++ b/FWCore/Framework/src/StreamSchedule.cc @@ -1027,13 +1027,16 @@ namespace edm { return; } } - for (int empty_end_path : empty_end_paths_) { - std::exception_ptr except = endPathStatusInserterWorkers_[empty_end_path] - ->runModuleDirectly>( - info, streamID_, ParentContext(&streamContext_), &streamContext_); - if (except) { - iTask.doneWaiting(except); - return; + if (not endPathStatusInserterWorkers_.empty()) { + for (int empty_end_path : empty_end_paths_) { + std::exception_ptr except = + endPathStatusInserterWorkers_[empty_end_path] + ->runModuleDirectly>( + info, streamID_, ParentContext(&streamContext_), &streamContext_); + if (except) { + iTask.doneWaiting(except); + return; + } } } diff --git a/FWCore/Framework/src/TransitionProcessors.icc b/FWCore/Framework/src/TransitionProcessors.icc index 5757def9e30c3..dc819428738ea 100644 --- a/FWCore/Framework/src/TransitionProcessors.icc +++ b/FWCore/Framework/src/TransitionProcessors.icc @@ -101,17 +101,17 @@ public: edm::InputSource::ItemType processFiles(EventProcessor& iEP) { bool finished = false; - auto nextTransition = iEP.nextTransitionType(); - if (nextTransition != edm::InputSource::IsFile) + edm::InputSource::ItemType nextTransition = iEP.nextTransitionType(); + if (nextTransition != edm::InputSource::ItemType::IsFile) return nextTransition; do { switch (nextTransition) { - case edm::InputSource::IsFile: { + case edm::InputSource::ItemType::IsFile: { processFile(iEP); nextTransition = iEP.nextTransitionType(); break; } - case edm::InputSource::IsRun: { + case edm::InputSource::ItemType::IsRun: { nextTransition = runs_.processRuns(iEP); break; } diff --git a/FWCore/Framework/test/BuildFile.xml b/FWCore/Framework/test/BuildFile.xml index 03296780a276b..e4f8b00603f68 100644 --- a/FWCore/Framework/test/BuildFile.xml +++ b/FWCore/Framework/test/BuildFile.xml @@ -367,6 +367,7 @@ + diff --git a/FWCore/Framework/test/MockEventProcessor.cc b/FWCore/Framework/test/MockEventProcessor.cc index 5747c48a15e30..2854873ebabb9 100644 --- a/FWCore/Framework/test/MockEventProcessor.cc +++ b/FWCore/Framework/test/MockEventProcessor.cc @@ -48,7 +48,7 @@ namespace edm { token t; if (not(input_ >> t)) { reachedEndOfInput_ = true; - return lastTransition_ = InputSource::IsStop; + return lastTransition_ = InputSource::ItemType::IsStop; } char ch = t.id; @@ -57,11 +57,11 @@ namespace edm { if (ch == 'r') { output_ << " *** nextItemType: Run " << t.value << " ***\n"; nextRun_ = static_cast(t.value); - return lastTransition_ = InputSource::IsRun; + return lastTransition_ = InputSource::ItemType::IsRun; } else if (ch == 'l') { output_ << " *** nextItemType: Lumi " << t.value << " ***\n"; nextLumi_ = static_cast(t.value); - return lastTransition_ = InputSource::IsLumi; + return lastTransition_ = InputSource::ItemType::IsLumi; } else if (ch == 'e') { output_ << " *** nextItemType: Event ***\n"; // a special value for test purposes only @@ -71,7 +71,7 @@ namespace edm { } else { shouldWeStop_ = false; } - return lastTransition_ = InputSource::IsEvent; + return lastTransition_ = InputSource::ItemType::IsEvent; } else if (ch == 'f') { output_ << " *** nextItemType: File " << t.value << " ***\n"; // a special value for test purposes only @@ -79,7 +79,7 @@ namespace edm { shouldWeCloseOutput_ = false; else shouldWeCloseOutput_ = true; - return lastTransition_ = InputSource::IsFile; + return lastTransition_ = InputSource::ItemType::IsFile; } else if (ch == 's') { output_ << " *** nextItemType: Stop " << t.value << " ***\n"; // a special value for test purposes only @@ -87,17 +87,17 @@ namespace edm { shouldWeEndLoop_ = false; else shouldWeEndLoop_ = true; - return lastTransition_ = InputSource::IsStop; + return lastTransition_ = InputSource::ItemType::IsStop; } else if (ch == 'x') { output_ << " *** nextItemType: Restart " << t.value << " ***\n"; shouldWeEndLoop_ = t.value; - return lastTransition_ = InputSource::IsStop; + return lastTransition_ = InputSource::ItemType::IsStop; } else if (ch == 't') { output_ << " *** nextItemType: Throw " << t.value << " ***\n"; shouldThrow_ = true; return nextTransitionType(); } - return lastTransition_ = InputSource::IsInvalid; + return lastTransition_ = InputSource::ItemType::IsInvalid; } InputSource::ItemType MockEventProcessor::lastTransitionType() const { return lastTransition_; } @@ -112,9 +112,9 @@ namespace edm { } readAndProcessEvent(); if (shouldWeStop()) { - return InputSource::IsEvent; + return InputSource::ItemType::IsEvent; } - } while (nextTransitionType() == InputSource::IsEvent); + } while (nextTransitionType() == InputSource::ItemType::IsEvent); return lastTransitionType(); } @@ -137,7 +137,7 @@ namespace edm { fp.normalEnd(); - if (trans != InputSource::IsStop) { + if (trans != InputSource::ItemType::IsStop) { //problem with the source doErrorStuff(); break; @@ -188,15 +188,15 @@ namespace edm { InputSource::ItemType MockEventProcessor::processRuns() { bool finished = false; - auto nextTransition = edm::InputSource::IsRun; + auto nextTransition = edm::InputSource::ItemType::IsRun; do { switch (nextTransition) { - case edm::InputSource::IsRun: { + case edm::InputSource::ItemType::IsRun: { processRun(); nextTransition = nextTransitionType(); break; } - case edm::InputSource::IsLumi: { + case edm::InputSource::ItemType::IsLumi: { nextTransition = processLumis(); break; } @@ -225,10 +225,10 @@ namespace edm { InputSource::ItemType MockEventProcessor::processLumis() { if (lumiStatus_ and currentLumiNumber_ == nextLumi_) { readAndMergeLumi(); - if (nextTransitionType() == InputSource::IsEvent) { + if (nextTransitionType() == InputSource::ItemType::IsEvent) { readAndProcessEvents(); if (shouldWeStop()) { - return edm::InputSource::IsStop; + return edm::InputSource::ItemType::IsStop; } } } else { @@ -239,10 +239,10 @@ namespace edm { throwIfNeeded(); didGlobalBeginLumiSucceed_ = true; //Need to do event processing here - if (nextTransitionType() == InputSource::IsEvent) { + if (nextTransitionType() == InputSource::ItemType::IsEvent) { readAndProcessEvents(); if (shouldWeStop()) { - return edm::InputSource::IsStop; + return edm::InputSource::ItemType::IsStop; } } } diff --git a/FWCore/Framework/test/MockEventProcessor.h b/FWCore/Framework/test/MockEventProcessor.h index 2768bc821f422..87c41793c0e0a 100644 --- a/FWCore/Framework/test/MockEventProcessor.h +++ b/FWCore/Framework/test/MockEventProcessor.h @@ -118,7 +118,7 @@ namespace edm { bool lumiStatus_ = false; LuminosityBlockNumber_t currentLumiNumber_ = 0; bool didGlobalBeginLumiSucceed_ = false; - InputSource::ItemType lastTransition_ = InputSource::IsInvalid; + InputSource::ItemType lastTransition_ = InputSource::ItemType::IsInvalid; bool currentRun_ = false; RunNumber_t currentRunNumber_ = 0; diff --git a/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc b/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc index 71f84e4469ea6..ae6a0f6357751 100644 --- a/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc +++ b/FWCore/Framework/test/stubs/TestStreamAnalyzers.cc @@ -105,7 +105,7 @@ namespace edmtest { } }; - class RunIntAnalyzer : public edm::stream::EDAnalyzer> { + class RunIntAnalyzer : public edm::stream::EDAnalyzer, edm::stream::WatchRuns> { public: static std::atomic m_count; unsigned int trans_; @@ -163,7 +163,8 @@ namespace edmtest { } }; - class LumiIntAnalyzer : public edm::stream::EDAnalyzer> { + class LumiIntAnalyzer + : public edm::stream::EDAnalyzer, edm::stream::WatchLuminosityBlocks> { public: static std::atomic m_count; unsigned int trans_; @@ -236,8 +237,9 @@ namespace edmtest { } }; - class RunSummaryIntAnalyzer - : public edm::stream::EDAnalyzer, edm::RunSummaryCache> { + class RunSummaryIntAnalyzer : public edm::stream::EDAnalyzer, + edm::RunSummaryCache, + edm::stream::WatchRuns> { public: static std::atomic m_count; unsigned int trans_; @@ -321,7 +323,8 @@ namespace edmtest { }; class LumiSummaryIntAnalyzer : public edm::stream::EDAnalyzer, - edm::LuminosityBlockSummaryCache> { + edm::LuminosityBlockSummaryCache, + edm::stream::WatchLuminosityBlocks> { public: static std::atomic m_count; unsigned int trans_; diff --git a/FWCore/Framework/test/stubs/TestStreamFilters.cc b/FWCore/Framework/test/stubs/TestStreamFilters.cc index 6f773b8dc8cd8..3d8122fb9a567 100644 --- a/FWCore/Framework/test/stubs/TestStreamFilters.cc +++ b/FWCore/Framework/test/stubs/TestStreamFilters.cc @@ -106,7 +106,7 @@ namespace edmtest { } }; - class RunIntFilter : public edm::stream::EDFilter> { + class RunIntFilter : public edm::stream::EDFilter, edm::stream::WatchRuns> { public: static std::atomic m_count; unsigned int trans_; @@ -163,7 +163,8 @@ namespace edmtest { } }; - class LumiIntFilter : public edm::stream::EDFilter> { + class LumiIntFilter + : public edm::stream::EDFilter, edm::stream::WatchLuminosityBlocks> { public: static std::atomic m_count; unsigned int trans_; @@ -235,7 +236,8 @@ namespace edmtest { } }; - class RunSummaryIntFilter : public edm::stream::EDFilter, edm::RunSummaryCache> { + class RunSummaryIntFilter + : public edm::stream::EDFilter, edm::RunSummaryCache, edm::stream::WatchRuns> { public: static std::atomic m_count; unsigned int trans_; @@ -321,8 +323,9 @@ namespace edmtest { } }; - class LumiSummaryIntFilter - : public edm::stream::EDFilter, edm::LuminosityBlockSummaryCache> { + class LumiSummaryIntFilter : public edm::stream::EDFilter, + edm::LuminosityBlockSummaryCache, + edm::stream::WatchLuminosityBlocks> { public: static std::atomic m_count; unsigned int trans_; diff --git a/FWCore/Framework/test/stubs/TestStreamProducers.cc b/FWCore/Framework/test/stubs/TestStreamProducers.cc index 148b4abeec2fd..254ebfe2ed048 100644 --- a/FWCore/Framework/test/stubs/TestStreamProducers.cc +++ b/FWCore/Framework/test/stubs/TestStreamProducers.cc @@ -105,7 +105,7 @@ namespace edmtest { } }; - class RunIntProducer : public edm::stream::EDProducer> { + class RunIntProducer : public edm::stream::EDProducer, edm::stream::WatchRuns> { public: static std::atomic m_count; unsigned int trans_; @@ -160,7 +160,8 @@ namespace edmtest { } }; - class LumiIntProducer : public edm::stream::EDProducer> { + class LumiIntProducer + : public edm::stream::EDProducer, edm::stream::WatchLuminosityBlocks> { public: static std::atomic m_count; unsigned int trans_; @@ -229,8 +230,9 @@ namespace edmtest { } }; - class RunSummaryIntProducer - : public edm::stream::EDProducer, edm::RunSummaryCache> { + class RunSummaryIntProducer : public edm::stream::EDProducer, + edm::RunSummaryCache, + edm::stream::WatchRuns> { public: static std::atomic m_count; unsigned int trans_; @@ -315,7 +317,8 @@ namespace edmtest { }; class LumiSummaryIntProducer : public edm::stream::EDProducer, - edm::LuminosityBlockSummaryCache> { + edm::LuminosityBlockSummaryCache, + edm::stream::WatchLuminosityBlocks> { public: static std::atomic m_count; unsigned int trans_; diff --git a/FWCore/Framework/test/test_bad_schedule_exception_message_cfg.py b/FWCore/Framework/test/test_bad_schedule_exception_message_cfg.py index bd5d0995b32b1..cdc135313670d 100644 --- a/FWCore/Framework/test/test_bad_schedule_exception_message_cfg.py +++ b/FWCore/Framework/test/test_bad_schedule_exception_message_cfg.py @@ -98,4 +98,14 @@ process.p1 = cms.Path(process.a, cms.Task(process.b, process.c)) - +elif mod == 8: + #cycle with filter on other path + process.a = cms.EDProducer("IntProducer", ivalue = cms.int32(10)) + process.b = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("c")) + process.c = process.b.clone(labels=["a"]) + process.dependingFilter = cms.EDFilter("IntProductFilter", label=cms.InputTag("b"), threshold=cms.int32(1000)) + process.rejectingFilter = cms.EDFilter("TestFilterModule", acceptValue = cms.untracked.int32(-1)) + + process.p1 = cms.Path(process.c) + process.p2 = cms.Path(process.b + process.dependingFilter + process.a) + process.p3 = cms.Path(process.rejectingFilter + process.a) diff --git a/FWCore/Framework/test/unit_test_outputs/test_bad_schedule_8.log b/FWCore/Framework/test/unit_test_outputs/test_bad_schedule_8.log new file mode 100644 index 0000000000000..a01ba08a1f058 --- /dev/null +++ b/FWCore/Framework/test/unit_test_outputs/test_bad_schedule_8.log @@ -0,0 +1,6 @@ +An exception of category 'ScheduleExecutionFailure' occurred while + [0] Calling beginJob +Exception Message: +Unrunnable schedule +Dependent module later on Path + module 'dependingFilter' depends on 'a' which is later on path p2 diff --git a/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log b/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log index cffed5d4487cd..666665139e80b 100644 --- a/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log +++ b/FWCore/Framework/test/unit_test_outputs/test_deepCall_unscheduled.log @@ -80,9 +80,6 @@ ModuleCallingContext state = Running ++++ finished: source run ++++ starting: global begin run 1 : time = 1000000 ++++ finished: global begin run 1 : time = 1000000 -++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 -++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 -++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 1 time = 1000000 ++++++ starting: begin run for module: stream = 0 label = 'one' id = 4 StreamContext: StreamID = 0 transition = BeginRun @@ -109,6 +106,9 @@ ModuleCallingContext state = Running ProcessContext: TEST cf65ff121f7d0ed0d094247b80407269 ++++ finished: begin run: stream = 0 run = 1 time = 1000000 +++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 +++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 +++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: source lumi ++++ finished: source lumi ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1000000 diff --git a/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log b/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log index 5f7598a2fd68c..7313caaa3ae8a 100644 --- a/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log +++ b/FWCore/Framework/test/unit_test_outputs/test_onPath_unscheduled.log @@ -48,15 +48,15 @@ ++++ finished: source run ++++ starting: global begin run 1 : time = 1000000 ++++ finished: global begin run 1 : time = 1000000 -++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 -++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 -++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 1 time = 1000000 ++++++ starting: begin run for module: stream = 0 label = 'two' id = 5 ++++++ finished: begin run for module: stream = 0 label = 'two' id = 5 ++++++ starting: begin run for module: stream = 0 label = 'one' id = 3 ++++++ finished: begin run for module: stream = 0 label = 'one' id = 3 ++++ finished: begin run: stream = 0 run = 1 time = 1000000 +++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 +++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 +++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: source lumi ++++ finished: source lumi ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1000000 diff --git a/FWCore/Integration/plugins/PutOrMergeTestSource.cc b/FWCore/Integration/plugins/PutOrMergeTestSource.cc index b7f654e3ab458..2e57b5e81d1a5 100644 --- a/FWCore/Integration/plugins/PutOrMergeTestSource.cc +++ b/FWCore/Integration/plugins/PutOrMergeTestSource.cc @@ -30,7 +30,7 @@ namespace edmtest { void registerProducts() final; private: - ItemType getNextItemType() final; + ItemTypeInfo getNextItemType() final; std::shared_ptr readRunAuxiliary_() final; std::shared_ptr readLuminosityBlockAuxiliary_() final; std::shared_ptr readFile_() final; @@ -109,21 +109,21 @@ void PutOrMergeTestSource::registerProducts() { productRegistryUpdate().copyProduct(thingWithEqualDesc_); } -InputSource::ItemType PutOrMergeTestSource::getNextItemType() { +InputSource::ItemTypeInfo PutOrMergeTestSource::getNextItemType() { switch (stage_) { case 0: { - return IsFile; + return ItemType::IsFile; } case 1: { - return IsRun; + return ItemType::IsRun; } case 2: { - return IsRun; + return ItemType::IsRun; } default: - return IsStop; + return ItemType::IsStop; } - return IsInvalid; + return ItemType::IsInvalid; } std::shared_ptr PutOrMergeTestSource::readRunAuxiliary_() { diff --git a/FWCore/Integration/plugins/SourceWithWaits.cc b/FWCore/Integration/plugins/SourceWithWaits.cc index 3175c84458f04..22b6009f8b394 100644 --- a/FWCore/Integration/plugins/SourceWithWaits.cc +++ b/FWCore/Integration/plugins/SourceWithWaits.cc @@ -63,14 +63,19 @@ namespace edmtest { static void fillDescriptions(edm::ConfigurationDescriptions&); private: - edm::InputSource::ItemType getNextItemType() override; + edm::InputSource::ItemTypeInfo getNextItemType() override; std::shared_ptr readRunAuxiliary_() override; std::shared_ptr readLuminosityBlockAuxiliary_() override; void readEvent_(edm::EventPrincipal&) override; - unsigned int timePerLumi_; // seconds + double timePerLumi_; // seconds + double sleepAfterStartOfRun_; // seconds std::vector eventsPerLumi_; unsigned int lumisPerRun_; + unsigned int multipleEntriesForRun_; + unsigned int multipleEntriesForLumi_; + bool declareLast_; + bool declareAllLast_; edm::EventNumber_t currentEvent_ = 0; edm::LuminosityBlockNumber_t currentLumi_ = 0; @@ -78,66 +83,148 @@ namespace edmtest { unsigned int currentFile_ = 0; unsigned int eventInCurrentLumi_ = 0; unsigned int lumiInCurrentRun_ = 0; + bool startedNewRun_ = false; + bool lastEventOfLumi_ = false; + bool noEventsInLumi_ = false; }; SourceWithWaits::SourceWithWaits(edm::ParameterSet const& pset, edm::InputSourceDescription const& desc) : edm::InputSource(pset, desc), - timePerLumi_(pset.getUntrackedParameter("timePerLumi")), + timePerLumi_(pset.getUntrackedParameter("timePerLumi")), + sleepAfterStartOfRun_(pset.getUntrackedParameter("sleepAfterStartOfRun")), eventsPerLumi_(pset.getUntrackedParameter>("eventsPerLumi")), - lumisPerRun_(pset.getUntrackedParameter("lumisPerRun")) {} + lumisPerRun_(pset.getUntrackedParameter("lumisPerRun")), + multipleEntriesForRun_(pset.getUntrackedParameter("multipleEntriesForRun")), + multipleEntriesForLumi_(pset.getUntrackedParameter("multipleEntriesForLumi")), + declareLast_(pset.getUntrackedParameter("declareLast")), + declareAllLast_(pset.getUntrackedParameter("declareAllLast")) {} SourceWithWaits::~SourceWithWaits() {} void SourceWithWaits::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; - desc.addUntracked("timePerLumi"); + desc.addUntracked("timePerLumi"); + desc.addUntracked("sleepAfterStartOfRun"); desc.addUntracked>("eventsPerLumi"); desc.addUntracked("lumisPerRun"); + desc.addUntracked("multipleEntriesForRun", 0); + desc.addUntracked("multipleEntriesForLumi", 0); + desc.addUntracked("declareLast", false); + desc.addUntracked("declareAllLast", false); descriptions.add("source", desc); } - edm::InputSource::ItemType SourceWithWaits::getNextItemType() { + edm::InputSource::ItemTypeInfo SourceWithWaits::getNextItemType() { constexpr unsigned int secondsToMicroseconds = 1000000; + if (startedNewRun_) { + usleep(secondsToMicroseconds * sleepAfterStartOfRun_); + startedNewRun_ = false; + } + + if (lastEventOfLumi_ || noEventsInLumi_) { + usleep(secondsToMicroseconds * timePerLumi_ / (eventsPerLumi_[currentLumi_ - 1] + 1)); + lastEventOfLumi_ = false; + noEventsInLumi_ = false; + } + // First three cases are for the initial file, run, and lumi transitions // Note that there will always be at exactly one file and at least // one run from this test source. if (currentFile_ == 0u) { ++currentFile_; - return edm::InputSource::IsFile; - } else if (currentRun_ == 0u) { + return ItemType::IsFile; + } + // First Run + else if (currentRun_ == 0u) { ++currentRun_; - return edm::InputSource::IsRun; - } else if (currentLumi_ == 0u) { + if (currentRun_ != multipleEntriesForRun_) { + startedNewRun_ = true; + auto const position = + (declareLast_ || declareAllLast_) ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsRun, position); + } else { + // declareAllLast_ with multipleEntriesForRun_ or multipleEntriesForLumi_ is an intentional bug, used to test + // if the Framework detects the potential InputSource bug and throws an exception. + auto const position = declareAllLast_ ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsRun, position); + } + } + // If configured, a second Entry for the same run number and reduced ProcessHistoryID + else if (currentRun_ == multipleEntriesForRun_) { + multipleEntriesForRun_ = 0; + startedNewRun_ = true; + auto const position = + (declareLast_ || declareAllLast_) ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsRun, position); + } + // First lumi + else if (currentLumi_ == 0u && lumisPerRun_ != 0) { ++currentLumi_; ++lumiInCurrentRun_; // The job will stop when we hit the end of the eventsPerLumi vector // unless maxEvents stopped it earlier. if ((currentLumi_ - 1) >= eventsPerLumi_.size()) { - return edm::InputSource::IsStop; + return ItemType::IsStop; } - return edm::InputSource::IsLumi; + if (currentLumi_ != multipleEntriesForLumi_) { + if (eventsPerLumi_[currentLumi_ - 1] == 0) { + noEventsInLumi_ = true; + } + auto const position = + (declareLast_ || declareAllLast_) ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsLumi, position); + } else { + // declareAllLast_ with multipleEntriesForRun_ or multipleEntriesForLumi_ is an intentional bug, used to test + // if the Framework detects the potential InputSource bug and throws an exception. + auto const position = declareAllLast_ ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsLumi, position); + } + } + // If configured, a second Entry for the same lumi number in the same run + else if (currentLumi_ == multipleEntriesForLumi_ && lumisPerRun_ != 0) { + multipleEntriesForLumi_ = 0; + if (eventsPerLumi_[currentLumi_ - 1] == 0) { + noEventsInLumi_ = true; + } + auto const position = + (declareLast_ || declareAllLast_) ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsLumi, position); } - // Handle more events in the current lumi - else if (eventInCurrentLumi_ < eventsPerLumi_[currentLumi_ - 1]) { + // Handle events in the current lumi + else if (eventInCurrentLumi_ < eventsPerLumi_[currentLumi_ - 1] && lumisPerRun_ != 0) { // note the argument to usleep is microseconds, timePerLumi_ is in seconds usleep(secondsToMicroseconds * timePerLumi_ / (eventsPerLumi_[currentLumi_ - 1] + 1)); ++eventInCurrentLumi_; ++currentEvent_; - return edm::InputSource::IsEvent; + if (eventInCurrentLumi_ == eventsPerLumi_[currentLumi_ - 1]) { + lastEventOfLumi_ = true; + } + return ItemType::IsEvent; } // Next lumi else if (lumiInCurrentRun_ < lumisPerRun_) { - usleep(secondsToMicroseconds * timePerLumi_ / (eventsPerLumi_[currentLumi_ - 1] + 1)); ++currentLumi_; ++lumiInCurrentRun_; // The job will stop when we hit the end of the eventsPerLumi vector // unless maxEvents stopped it earlier. if ((currentLumi_ - 1) >= eventsPerLumi_.size()) { - return edm::InputSource::IsStop; + return ItemType::IsStop; } eventInCurrentLumi_ = 0; - return edm::InputSource::IsLumi; + if (currentLumi_ != multipleEntriesForLumi_) { + if (eventsPerLumi_[currentLumi_ - 1] == 0) { + noEventsInLumi_ = true; + } + auto const position = + (declareLast_ || declareAllLast_) ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsLumi, position); + } else { + // declareAllLast_ with multipleEntriesForRun_ or multipleEntriesForLumi_ is an intentional bug, used to test + // if the Framework detects the potential InputSource bug and throws an exception. + auto const position = declareAllLast_ ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsLumi, position); + } } // Next run else { @@ -145,16 +232,30 @@ namespace edmtest { // unless maxEvents stopped it earlier. Don't start the run if // it will end with no lumis in it. if (currentLumi_ >= eventsPerLumi_.size()) { - return edm::InputSource::IsStop; + return ItemType::IsStop; } ++currentRun_; + // Avoid infinite job if lumisPerRun_ is 0 + if (currentRun_ > 100) { + return ItemType::IsStop; + } lumiInCurrentRun_ = 0; - return edm::InputSource::IsRun; + if (currentRun_ != multipleEntriesForRun_) { + startedNewRun_ = true; + auto const position = + (declareLast_ || declareAllLast_) ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsRun, position); + } else { + // declareAllLast_ with multipleEntriesForRun_ or multipleEntriesForLumi_ is an intentional bug, used to test + // if the Framework detects the potential InputSource bug and throws an exception. + auto const position = declareAllLast_ ? ItemPosition::LastItemToBeMerged : ItemPosition::NotLastItemToBeMerged; + return ItemTypeInfo(ItemType::IsRun, position); + } } // Should be impossible to get here assert(false); // return something so it will compile - return edm::InputSource::IsStop; + return ItemType::IsStop; } std::shared_ptr SourceWithWaits::readRunAuxiliary_() { diff --git a/FWCore/Integration/test/BuildFile.xml b/FWCore/Integration/test/BuildFile.xml index 1cdb6b8998d14..9a56a76ce0497 100644 --- a/FWCore/Integration/test/BuildFile.xml +++ b/FWCore/Integration/test/BuildFile.xml @@ -40,6 +40,7 @@ + @@ -96,6 +97,8 @@ + + diff --git a/FWCore/Integration/test/check_empty_event_cfg.py b/FWCore/Integration/test/check_empty_event_cfg.py new file mode 100644 index 0000000000000..bb0c69925e27a --- /dev/null +++ b/FWCore/Integration/test/check_empty_event_cfg.py @@ -0,0 +1,14 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("EMPTY") + +process.test = cms.EDAnalyzer("EventContentAnalyzer", listPathStatus = cms.untracked.bool(True)) + +process.e = cms.EndPath(process.test) + +#process.out = cms.OutputModule("AsciiOutputModule") +#process.e2 = cms.EndPath(process.out) + +process.source = cms.Source("EmptySource") + +process.maxEvents.input = 1 diff --git a/FWCore/Integration/test/inputSourceTest.sh b/FWCore/Integration/test/inputSourceTest.sh index 5e58120c58178..a2dc21bb77753 100755 --- a/FWCore/Integration/test/inputSourceTest.sh +++ b/FWCore/Integration/test/inputSourceTest.sh @@ -5,3 +5,20 @@ function die { echo $1: status $2 ; exit $2; } cmsRun ${SCRAM_TEST_PATH}/inputSourceTest_cfg.py || die 'Failed in inputSourceTest_cfg.py' $? cmsRun ${SCRAM_TEST_PATH}/testLateLumiClosure_cfg.py || die 'Failed in testLateLumiClosure_cfg.py' $? + +# The following demonstrates declaring the last run or lumi entry to be merged eliminates the delay +# before globalBeginRun and globalBeginLumi while waiting for the next thing to arrive +# to know that the last entry to be merged has already arrived. (Note the previous test is very similar +# and shows the delay, running without enableDeclareLast will also demonstrate it). + +cmsRun ${SCRAM_TEST_PATH}/testDeclareLastEntryForMerge_cfg.py --enableDeclareLast --multipleEntriesForRun 2 --multipleEntriesForLumi 4 || die 'Failed in testDeclareLastEntryForMerge_cfg.py' $? + +# The next two cmsRun processes should throw an exception (intentional) +# These two tests show the Framework will detect a buggy InputSource that +# declares something last that is NOT last. + +cmsRun ${SCRAM_TEST_PATH}/testDeclareLastEntryForMerge_cfg.py --enableDeclareAllLast --multipleEntriesForRun 1 && die 'Failed in testDeclareLastEntryForMerge_cfg.py, last run source bug not detected' 1 + +cmsRun ${SCRAM_TEST_PATH}/testDeclareLastEntryForMerge_cfg.py --enableDeclareAllLast --multipleEntriesForLumi 2 && die 'Failed in testDeclareLastEntryForMerge_cfg.py, last lumi source bug not detected' 1 + +exit 0 diff --git a/FWCore/Integration/test/makeEmptyRootFile.py b/FWCore/Integration/test/makeEmptyRootFile.py new file mode 100644 index 0000000000000..21e395362cb1d --- /dev/null +++ b/FWCore/Integration/test/makeEmptyRootFile.py @@ -0,0 +1,13 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("WRITE") + +process.source = cms.Source("EmptySource") + +process.maxEvents.input = 10 + +process.out = cms.OutputModule("PoolOutputModule", + outputCommands = cms.untracked.vstring("drop *"), + fileName = cms.untracked.string("empty.root")) + +process.o = cms.EndPath(process.out) diff --git a/FWCore/Integration/test/run_TestEmptyRootFile.sh b/FWCore/Integration/test/run_TestEmptyRootFile.sh new file mode 100755 index 0000000000000..a5c4ec3e9bcdf --- /dev/null +++ b/FWCore/Integration/test/run_TestEmptyRootFile.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +function die { echo Failure $1: status $2 ; exit $2 ; } + +LOCAL_TEST_DIR=${SCRAM_TEST_PATH} + +echo "write empty file" +cmsRun ${LOCAL_TEST_DIR}/makeEmptyRootFile.py || die "cmsRun makeEmptyRootFile.py" $? + +echo "read empty file" +cmsRun ${LOCAL_TEST_DIR}/useEmptyRootFile.py || die "cmsRun useEmptyRootFile.py" $? + +exit 0 diff --git a/FWCore/Integration/test/testDeclareLastEntryForMerge_cfg.py b/FWCore/Integration/test/testDeclareLastEntryForMerge_cfg.py new file mode 100644 index 0000000000000..58bedbbb7dbe0 --- /dev/null +++ b/FWCore/Integration/test/testDeclareLastEntryForMerge_cfg.py @@ -0,0 +1,57 @@ + +import FWCore.ParameterSet.Config as cms +import sys +import argparse + +parser = argparse.ArgumentParser(prog=sys.argv[0], description='Test InputSource Declaring last run or lumi entry for merge') + +parser.add_argument("--enableDeclareLast", action="store_true", help="Declare last entry for merge") +parser.add_argument("--enableDeclareAllLast", action="store_true", help="Declare all entries as last for merge (force intentional source bug)") +parser.add_argument("--multipleEntriesForRun", type=int) +parser.add_argument("--multipleEntriesForLumi", type=int) + +args = parser.parse_args() + +process = cms.Process("PROD") + +process.options = dict( + numberOfThreads = 2, + numberOfStreams = 2, + numberOfConcurrentRuns = 1, + numberOfConcurrentLuminosityBlocks = 2 +) + +process.Tracer = cms.Service("Tracer", + printTimestamps = cms.untracked.bool(True) +) + +process.source = cms.Source("SourceWithWaits", + timePerLumi = cms.untracked.double(1), + sleepAfterStartOfRun = cms.untracked.double(0.25), + eventsPerLumi = cms.untracked.vuint32(4,0,5,4,0,5), + lumisPerRun = cms.untracked.uint32(3), + declareLast = cms.untracked.bool(False), + declareAllLast = cms.untracked.bool(False), + multipleEntriesForLumi = cms.untracked.uint32(0), + multipleEntriesForRun = cms.untracked.uint32(0) +) + +if args.enableDeclareLast: + process.source.declareLast = True + +if args.enableDeclareAllLast: + process.source.declareAllLast = True + +if args.multipleEntriesForLumi is not None: + process.source.multipleEntriesForLumi = args.multipleEntriesForLumi + +if args.multipleEntriesForRun is not None: + process.source.multipleEntriesForRun = args.multipleEntriesForRun + +process.sleepingProducer = cms.EDProducer("timestudy::SleepingProducer", + ivalue = cms.int32(1), + consumes = cms.VInputTag(), + eventTimes = cms.vdouble(0.1, 0.1, 0.6, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1) +) + +process.p = cms.Path(process.sleepingProducer) diff --git a/FWCore/Integration/test/testLateLumiClosure_cfg.py b/FWCore/Integration/test/testLateLumiClosure_cfg.py index 8b01cd99c132e..3589d7ac62277 100644 --- a/FWCore/Integration/test/testLateLumiClosure_cfg.py +++ b/FWCore/Integration/test/testLateLumiClosure_cfg.py @@ -56,7 +56,8 @@ ) process.source = cms.Source("SourceWithWaits", - timePerLumi = cms.untracked.uint32(1), + timePerLumi = cms.untracked.double(1), + sleepAfterStartOfRun = cms.untracked.double(0.25), eventsPerLumi = cms.untracked.vuint32(4,0,5), lumisPerRun = cms.untracked.uint32(100) ) diff --git a/FWCore/Integration/test/unit_test_outputs/testGetBy1.log b/FWCore/Integration/test/unit_test_outputs/testGetBy1.log index 0af9db0bd10ae..1b5454140ad28 100644 --- a/FWCore/Integration/test/unit_test_outputs/testGetBy1.log +++ b/FWCore/Integration/test/unit_test_outputs/testGetBy1.log @@ -6,73 +6,69 @@ Module type=IntSource, Module label=source, Parameter Set ID=6f0b3d3a362a6270c80 ++++ finished: constructing module with label 'TriggerResults' id = 1 ++++ starting: constructing module with label 'p' id = 2 ++++ finished: constructing module with label 'p' id = 2 -++++ starting: constructing module with label 'e' id = 3 -++++ finished: constructing module with label 'e' id = 3 -++++ starting: constructing module with label 'intProducer' id = 4 -++++ finished: constructing module with label 'intProducer' id = 4 -++++ starting: constructing module with label 'a1' id = 5 +++++ starting: constructing module with label 'intProducer' id = 3 +++++ finished: constructing module with label 'intProducer' id = 3 +++++ starting: constructing module with label 'a1' id = 4 Module type=TestFindProduct, Module label=a1, Parameter Set ID=a7caa43fcf5ef35dee69e4bd85169d4c -++++ finished: constructing module with label 'a1' id = 5 +++++ finished: constructing module with label 'a1' id = 4 Module type=TestFindProduct, Module label=a1, Parameter Set ID=a7caa43fcf5ef35dee69e4bd85169d4c -++++ starting: constructing module with label 'a2' id = 6 -++++ finished: constructing module with label 'a2' id = 6 -++++ starting: constructing module with label 'a3' id = 7 -++++ finished: constructing module with label 'a3' id = 7 -++++ starting: constructing module with label 'out' id = 8 -++++ finished: constructing module with label 'out' id = 8 -++++ starting: constructing module with label 'intProducerA' id = 9 +++++ starting: constructing module with label 'a2' id = 5 +++++ finished: constructing module with label 'a2' id = 5 +++++ starting: constructing module with label 'a3' id = 6 +++++ finished: constructing module with label 'a3' id = 6 +++++ starting: constructing module with label 'out' id = 7 +++++ finished: constructing module with label 'out' id = 7 +++++ starting: constructing module with label 'intProducerA' id = 8 Module type=IntProducer, Module label=intProducerA, Parameter Set ID=56ea7c8bbb02df4e1c3b945954838318 -++++ finished: constructing module with label 'intProducerA' id = 9 +++++ finished: constructing module with label 'intProducerA' id = 8 Module type=IntProducer, Module label=intProducerA, Parameter Set ID=56ea7c8bbb02df4e1c3b945954838318 -++++ starting: constructing module with label 'intProducerB' id = 10 -++++ finished: constructing module with label 'intProducerB' id = 10 -++++ starting: constructing module with label 'intProducerBeginProcessBlock' id = 11 -++++ finished: constructing module with label 'intProducerBeginProcessBlock' id = 11 -++++ starting: constructing module with label 'intProducerEndProcessBlock' id = 12 -++++ finished: constructing module with label 'intProducerEndProcessBlock' id = 12 -++++ starting: constructing module with label 'intProducerU' id = 13 -++++ finished: constructing module with label 'intProducerU' id = 13 -++++ starting: constructing module with label 'intVectorProducer' id = 14 -++++ finished: constructing module with label 'intVectorProducer' id = 14 +++++ starting: constructing module with label 'intProducerB' id = 9 +++++ finished: constructing module with label 'intProducerB' id = 9 +++++ starting: constructing module with label 'intProducerBeginProcessBlock' id = 10 +++++ finished: constructing module with label 'intProducerBeginProcessBlock' id = 10 +++++ starting: constructing module with label 'intProducerEndProcessBlock' id = 11 +++++ finished: constructing module with label 'intProducerEndProcessBlock' id = 11 +++++ starting: constructing module with label 'intProducerU' id = 12 +++++ finished: constructing module with label 'intProducerU' id = 12 +++++ starting: constructing module with label 'intVectorProducer' id = 13 +++++ finished: constructing module with label 'intVectorProducer' id = 13 ++ preallocate: 1 concurrent runs, 1 concurrent luminosity sections, 1 streams ++ starting: begin job -++++ starting: begin job for module with label 'intProducerA' id = 9 +++++ starting: begin job for module with label 'intProducerA' id = 8 Module type=IntProducer, Module label=intProducerA, Parameter Set ID=56ea7c8bbb02df4e1c3b945954838318 -++++ finished: begin job for module with label 'intProducerA' id = 9 +++++ finished: begin job for module with label 'intProducerA' id = 8 Module type=IntProducer, Module label=intProducerA, Parameter Set ID=56ea7c8bbb02df4e1c3b945954838318 -++++ starting: begin job for module with label 'intProducerB' id = 10 -++++ finished: begin job for module with label 'intProducerB' id = 10 -++++ starting: begin job for module with label 'intProducerBeginProcessBlock' id = 11 -++++ finished: begin job for module with label 'intProducerBeginProcessBlock' id = 11 -++++ starting: begin job for module with label 'intProducerEndProcessBlock' id = 12 -++++ finished: begin job for module with label 'intProducerEndProcessBlock' id = 12 -++++ starting: begin job for module with label 'intProducerU' id = 13 -++++ finished: begin job for module with label 'intProducerU' id = 13 -++++ starting: begin job for module with label 'intVectorProducer' id = 14 -++++ finished: begin job for module with label 'intVectorProducer' id = 14 -++++ starting: begin job for module with label 'intProducer' id = 4 -++++ finished: begin job for module with label 'intProducer' id = 4 -++++ starting: begin job for module with label 'a1' id = 5 +++++ starting: begin job for module with label 'intProducerB' id = 9 +++++ finished: begin job for module with label 'intProducerB' id = 9 +++++ starting: begin job for module with label 'intProducerBeginProcessBlock' id = 10 +++++ finished: begin job for module with label 'intProducerBeginProcessBlock' id = 10 +++++ starting: begin job for module with label 'intProducerEndProcessBlock' id = 11 +++++ finished: begin job for module with label 'intProducerEndProcessBlock' id = 11 +++++ starting: begin job for module with label 'intProducerU' id = 12 +++++ finished: begin job for module with label 'intProducerU' id = 12 +++++ starting: begin job for module with label 'intVectorProducer' id = 13 +++++ finished: begin job for module with label 'intVectorProducer' id = 13 +++++ starting: begin job for module with label 'intProducer' id = 3 +++++ finished: begin job for module with label 'intProducer' id = 3 +++++ starting: begin job for module with label 'a1' id = 4 Module type=TestFindProduct, Module label=a1, Parameter Set ID=a7caa43fcf5ef35dee69e4bd85169d4c -++++ finished: begin job for module with label 'a1' id = 5 +++++ finished: begin job for module with label 'a1' id = 4 Module type=TestFindProduct, Module label=a1, Parameter Set ID=a7caa43fcf5ef35dee69e4bd85169d4c -++++ starting: begin job for module with label 'a2' id = 6 -++++ finished: begin job for module with label 'a2' id = 6 -++++ starting: begin job for module with label 'a3' id = 7 -++++ finished: begin job for module with label 'a3' id = 7 -++++ starting: begin job for module with label 'out' id = 8 -++++ finished: begin job for module with label 'out' id = 8 +++++ starting: begin job for module with label 'a2' id = 5 +++++ finished: begin job for module with label 'a2' id = 5 +++++ starting: begin job for module with label 'a3' id = 6 +++++ finished: begin job for module with label 'a3' id = 6 +++++ starting: begin job for module with label 'out' id = 7 +++++ finished: begin job for module with label 'out' id = 7 ++++ starting: begin job for module with label 'TriggerResults' id = 1 ++++ finished: begin job for module with label 'TriggerResults' id = 1 ++++ starting: begin job for module with label 'p' id = 2 ++++ finished: begin job for module with label 'p' id = 2 -++++ starting: begin job for module with label 'e' id = 3 -++++ finished: begin job for module with label 'e' id = 3 ++ starting: begin job ++ finished: begin job -++++ starting: begin stream for module: stream = 0 label = 'intProducer' id = 4 -++++ finished: begin stream for module: stream = 0 label = 'intProducer' id = 4 -++++ starting: begin stream for module: stream = 0 label = 'a1' id = 5 +++++ starting: begin stream for module: stream = 0 label = 'intProducer' id = 3 +++++ finished: begin stream for module: stream = 0 label = 'intProducer' id = 3 +++++ starting: begin stream for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = BeginStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -84,7 +80,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ finished: begin stream for module: stream = 0 label = 'a1' id = 5 +++++ finished: begin stream for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = BeginStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -96,19 +92,17 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ starting: begin stream for module: stream = 0 label = 'a2' id = 6 -++++ finished: begin stream for module: stream = 0 label = 'a2' id = 6 -++++ starting: begin stream for module: stream = 0 label = 'a3' id = 7 -++++ finished: begin stream for module: stream = 0 label = 'a3' id = 7 +++++ starting: begin stream for module: stream = 0 label = 'a2' id = 5 +++++ finished: begin stream for module: stream = 0 label = 'a2' id = 5 +++++ starting: begin stream for module: stream = 0 label = 'a3' id = 6 +++++ finished: begin stream for module: stream = 0 label = 'a3' id = 6 ++++ starting: begin stream for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: begin stream for module: stream = 0 label = 'TriggerResults' id = 1 -++++ starting: begin stream for module: stream = 0 label = 'out' id = 8 -++++ finished: begin stream for module: stream = 0 label = 'out' id = 8 +++++ starting: begin stream for module: stream = 0 label = 'out' id = 7 +++++ finished: begin stream for module: stream = 0 label = 'out' id = 7 ++++ starting: begin stream for module: stream = 0 label = 'p' id = 2 ++++ finished: begin stream for module: stream = 0 label = 'p' id = 2 -++++ starting: begin stream for module: stream = 0 label = 'e' id = 3 -++++ finished: begin stream for module: stream = 0 label = 'e' id = 3 -++++ starting: begin stream for module: stream = 0 label = 'intProducerA' id = 9 +++++ starting: begin stream for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = BeginStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -120,7 +114,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ finished: begin stream for module: stream = 0 label = 'intProducerA' id = 9 +++++ finished: begin stream for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = BeginStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -132,25 +126,25 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ starting: begin stream for module: stream = 0 label = 'intProducerB' id = 10 -++++ finished: begin stream for module: stream = 0 label = 'intProducerB' id = 10 -++++ starting: begin stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 11 -++++ finished: begin stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 11 -++++ starting: begin stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 12 -++++ finished: begin stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 12 -++++ starting: begin stream for module: stream = 0 label = 'intProducerU' id = 13 -++++ finished: begin stream for module: stream = 0 label = 'intProducerU' id = 13 -++++ starting: begin stream for module: stream = 0 label = 'intVectorProducer' id = 14 -++++ finished: begin stream for module: stream = 0 label = 'intVectorProducer' id = 14 +++++ starting: begin stream for module: stream = 0 label = 'intProducerB' id = 9 +++++ finished: begin stream for module: stream = 0 label = 'intProducerB' id = 9 +++++ starting: begin stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 10 +++++ finished: begin stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 10 +++++ starting: begin stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 11 +++++ finished: begin stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 11 +++++ starting: begin stream for module: stream = 0 label = 'intProducerU' id = 12 +++++ finished: begin stream for module: stream = 0 label = 'intProducerU' id = 12 +++++ starting: begin stream for module: stream = 0 label = 'intVectorProducer' id = 13 +++++ finished: begin stream for module: stream = 0 label = 'intVectorProducer' id = 13 ++++ starting: begin process block GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'a3' id = 7 -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'a2' id = 6 -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'a3' id = 6 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'a2' id = 5 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'a1' id = 4 GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -162,12 +156,12 @@ ModuleCallingContext state = Prefetching runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 12 -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++ starting: begin process block for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++ finished: begin process block for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 11 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++ starting: begin process block for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++ finished: begin process block for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'a1' id = 4 GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -179,7 +173,7 @@ ModuleCallingContext state = Prefetching runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: begin process block for module: label = 'a1' id = 5 +++++++ starting: begin process block for module: label = 'a1' id = 4 GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -191,7 +185,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: begin process block for module: label = 'a1' id = 5 +++++++ finished: begin process block for module: label = 'a1' id = 4 GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -203,15 +197,15 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 12 -++++++ starting: begin process block for module: label = 'intProducerEndProcessBlock' id = 12 -++++++ finished: begin process block for module: label = 'intProducerEndProcessBlock' id = 12 -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'a2' id = 6 -++++++ starting: begin process block for module: label = 'a2' id = 6 -++++++ finished: begin process block for module: label = 'a2' id = 6 -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'a3' id = 7 -++++++ starting: begin process block for module: label = 'a3' id = 7 -++++++ finished: begin process block for module: label = 'a3' id = 7 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 11 +++++++ starting: begin process block for module: label = 'intProducerEndProcessBlock' id = 11 +++++++ finished: begin process block for module: label = 'intProducerEndProcessBlock' id = 11 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'a2' id = 5 +++++++ starting: begin process block for module: label = 'a2' id = 5 +++++++ finished: begin process block for module: label = 'a2' id = 5 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'a3' id = 6 +++++++ starting: begin process block for module: label = 'a3' id = 6 +++++++ finished: begin process block for module: label = 'a3' id = 6 ++++ finished: begin process block GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 @@ -243,9 +237,9 @@ GlobalContext: transition = BeginRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing global begin Run for module: label = 'a3' id = 7 -++++++++ starting: prefetching before processing global begin Run for module: label = 'a2' id = 6 -++++++++ starting: prefetching before processing global begin Run for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing global begin Run for module: label = 'a3' id = 6 +++++++++ starting: prefetching before processing global begin Run for module: label = 'a2' id = 5 +++++++++ starting: prefetching before processing global begin Run for module: label = 'a1' id = 4 GlobalContext: transition = BeginRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -257,7 +251,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global begin Run for module: label = 'a1' id = 5 +++++++++ finished: prefetching before processing global begin Run for module: label = 'a1' id = 4 GlobalContext: transition = BeginRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -269,7 +263,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: global begin run for module: label = 'a1' id = 5 +++++++ starting: global begin run for module: label = 'a1' id = 4 GlobalContext: transition = BeginRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -281,7 +275,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: global begin run for module: label = 'a1' id = 5 +++++++ finished: global begin run for module: label = 'a1' id = 4 GlobalContext: transition = BeginRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -293,12 +287,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global begin Run for module: label = 'a2' id = 6 -++++++ starting: global begin run for module: label = 'a2' id = 6 -++++++ finished: global begin run for module: label = 'a2' id = 6 -++++++++ finished: prefetching before processing global begin Run for module: label = 'a3' id = 7 -++++++ starting: global begin run for module: label = 'a3' id = 7 -++++++ finished: global begin run for module: label = 'a3' id = 7 +++++++++ finished: prefetching before processing global begin Run for module: label = 'a2' id = 5 +++++++ starting: global begin run for module: label = 'a2' id = 5 +++++++ finished: global begin run for module: label = 'a2' id = 5 +++++++++ finished: prefetching before processing global begin Run for module: label = 'a3' id = 6 +++++++ starting: global begin run for module: label = 'a3' id = 6 +++++++ finished: global begin run for module: label = 'a3' id = 6 ++++ finished: global begin run 1 : time = 1 GlobalContext: transition = BeginRun run: 1 luminosityBlock: 0 @@ -319,20 +313,17 @@ GlobalContext: transition = BeginRun ProcessContext: COPY 6f4335e86de793448be83fe14f12dcb7 parent ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 -++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 -++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 1 time = 1 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: begin run for module: stream = 0 label = 'intProducerU' id = 13 -++++++ finished: begin run for module: stream = 0 label = 'intProducerU' id = 13 -++++++ starting: begin run for module: stream = 0 label = 'intProducerB' id = 10 -++++++ finished: begin run for module: stream = 0 label = 'intProducerB' id = 10 -++++++ starting: begin run for module: stream = 0 label = 'intProducerA' id = 9 +++++++ starting: begin run for module: stream = 0 label = 'intProducerU' id = 12 +++++++ finished: begin run for module: stream = 0 label = 'intProducerU' id = 12 +++++++ starting: begin run for module: stream = 0 label = 'intProducerB' id = 9 +++++++ finished: begin run for module: stream = 0 label = 'intProducerB' id = 9 +++++++ starting: begin run for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -344,7 +335,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: begin run for module: stream = 0 label = 'intProducerA' id = 9 +++++++ finished: begin run for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -356,8 +347,8 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: begin run for module: stream = 0 label = 'intProducer' id = 4 -++++++ finished: begin run for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: begin run for module: stream = 0 label = 'intProducer' id = 3 +++++++ finished: begin run for module: stream = 0 label = 'intProducer' id = 3 ++++ finished: begin run: stream = 0 run = 1 time = 1 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 @@ -378,6 +369,9 @@ StreamContext: StreamID = 0 transition = BeginRun ProcessContext: COPY 6f4335e86de793448be83fe14f12dcb7 parent ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 +++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 +++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 +++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: source lumi ++++ finished: source lumi ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1 @@ -386,9 +380,9 @@ GlobalContext: transition = BeginLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'a3' id = 7 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'a2' id = 6 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'a3' id = 6 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'a2' id = 5 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'a1' id = 4 GlobalContext: transition = BeginLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -400,7 +394,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'a1' id = 5 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'a1' id = 4 GlobalContext: transition = BeginLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -412,7 +406,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: global begin lumi for module: label = 'a1' id = 5 +++++++ starting: global begin lumi for module: label = 'a1' id = 4 GlobalContext: transition = BeginLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -424,7 +418,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: global begin lumi for module: label = 'a1' id = 5 +++++++ finished: global begin lumi for module: label = 'a1' id = 4 GlobalContext: transition = BeginLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -436,12 +430,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'a2' id = 6 -++++++ starting: global begin lumi for module: label = 'a2' id = 6 -++++++ finished: global begin lumi for module: label = 'a2' id = 6 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'a3' id = 7 -++++++ starting: global begin lumi for module: label = 'a3' id = 7 -++++++ finished: global begin lumi for module: label = 'a3' id = 7 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'a2' id = 5 +++++++ starting: global begin lumi for module: label = 'a2' id = 5 +++++++ finished: global begin lumi for module: label = 'a2' id = 5 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'a3' id = 6 +++++++ starting: global begin lumi for module: label = 'a3' id = 6 +++++++ finished: global begin lumi for module: label = 'a3' id = 6 ++++ finished: global begin lumi: run = 1 lumi = 1 time = 1 GlobalContext: transition = BeginLuminosityBlock run: 1 luminosityBlock: 1 @@ -468,11 +462,11 @@ StreamContext: StreamID = 0 transition = BeginLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: begin lumi for module: stream = 0 label = 'intProducerU' id = 13 -++++++ finished: begin lumi for module: stream = 0 label = 'intProducerU' id = 13 -++++++ starting: begin lumi for module: stream = 0 label = 'intProducerB' id = 10 -++++++ finished: begin lumi for module: stream = 0 label = 'intProducerB' id = 10 -++++++ starting: begin lumi for module: stream = 0 label = 'intProducerA' id = 9 +++++++ starting: begin lumi for module: stream = 0 label = 'intProducerU' id = 12 +++++++ finished: begin lumi for module: stream = 0 label = 'intProducerU' id = 12 +++++++ starting: begin lumi for module: stream = 0 label = 'intProducerB' id = 9 +++++++ finished: begin lumi for module: stream = 0 label = 'intProducerB' id = 9 +++++++ starting: begin lumi for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = BeginLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -484,7 +478,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: begin lumi for module: stream = 0 label = 'intProducerA' id = 9 +++++++ finished: begin lumi for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = BeginLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -496,8 +490,8 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: begin lumi for module: stream = 0 label = 'intProducer' id = 4 -++++++ finished: begin lumi for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: begin lumi for module: stream = 0 label = 'intProducer' id = 3 +++++++ finished: begin lumi for module: stream = 0 label = 'intProducer' id = 3 ++++ finished: begin lumi: stream = 0 run = 1 lumi = 1 time = 1 StreamContext: StreamID = 0 transition = BeginLuminosityBlock run: 1 lumi: 1 event: 0 @@ -548,8 +542,8 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a3' id = 7 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a3' id = 6 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -565,8 +559,8 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -580,11 +574,11 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -598,7 +592,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -612,7 +606,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ finished: processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -626,7 +620,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -642,7 +636,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -658,7 +652,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -674,12 +668,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ starting: processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ finished: processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ starting: processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ finished: processing event for module: stream = 0 label = 'a2' id = 6 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ starting: processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ finished: processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ starting: processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ finished: processing event for module: stream = 0 label = 'a2' id = 5 ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 @@ -695,24 +689,22 @@ PathContext: pathName = p pathID = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 8 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 8 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 8 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 8 -++++++++ starting: processing event for module: stream = 0 label = 'e' id = 3 -++++++++ finished: processing event for module: stream = 0 label = 'e' id = 3 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 7 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 7 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 7 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 7 ++++++ finished: processing path 'e' : stream = 0 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 @@ -774,8 +766,8 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a3' id = 7 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a3' id = 6 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -791,8 +783,8 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -806,11 +798,11 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -824,7 +816,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -838,7 +830,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ finished: processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -852,7 +844,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -868,7 +860,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -884,7 +876,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -900,12 +892,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ starting: processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ finished: processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ starting: processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ finished: processing event for module: stream = 0 label = 'a2' id = 6 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ starting: processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ finished: processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ starting: processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ finished: processing event for module: stream = 0 label = 'a2' id = 5 ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 @@ -921,24 +913,22 @@ PathContext: pathName = p pathID = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 8 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 8 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 8 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 8 -++++++++ starting: processing event for module: stream = 0 label = 'e' id = 3 -++++++++ finished: processing event for module: stream = 0 label = 'e' id = 3 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 7 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 7 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 7 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 7 ++++++ finished: processing path 'e' : stream = 0 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 @@ -1000,8 +990,8 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a3' id = 7 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a3' id = 6 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1017,8 +1007,8 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1032,11 +1022,11 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 4 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 3 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1050,7 +1040,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ starting: processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1064,7 +1054,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: processing event for module: stream = 0 label = 'a1' id = 5 +++++++++ finished: processing event for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1078,7 +1068,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1094,7 +1084,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1110,7 +1100,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerA' id = 9 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1126,12 +1116,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ starting: processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ finished: processing event for module: stream = 0 label = 'a3' id = 7 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ starting: processing event for module: stream = 0 label = 'a2' id = 6 -++++++++ finished: processing event for module: stream = 0 label = 'a2' id = 6 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ starting: processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ finished: processing event for module: stream = 0 label = 'a3' id = 6 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ starting: processing event for module: stream = 0 label = 'a2' id = 5 +++++++++ finished: processing event for module: stream = 0 label = 'a2' id = 5 ++++++++ starting: processing event for module: stream = 0 label = 'p' id = 2 ++++++++ finished: processing event for module: stream = 0 label = 'p' id = 2 ++++++ finished: processing path 'p' : stream = 0 @@ -1147,24 +1137,22 @@ PathContext: pathName = p pathID = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 8 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 14 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 13 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerB' id = 10 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 8 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 8 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 8 -++++++++ starting: processing event for module: stream = 0 label = 'e' id = 3 -++++++++ finished: processing event for module: stream = 0 label = 'e' id = 3 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 7 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 13 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 12 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerB' id = 9 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 7 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 7 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 7 ++++++ finished: processing path 'e' : stream = 0 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 @@ -1205,11 +1193,11 @@ StreamContext: StreamID = 0 transition = EndLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: end lumi for module: stream = 0 label = 'intProducerU' id = 13 -++++++ finished: end lumi for module: stream = 0 label = 'intProducerU' id = 13 -++++++ starting: end lumi for module: stream = 0 label = 'intProducerB' id = 10 -++++++ finished: end lumi for module: stream = 0 label = 'intProducerB' id = 10 -++++++ starting: end lumi for module: stream = 0 label = 'intProducerA' id = 9 +++++++ starting: end lumi for module: stream = 0 label = 'intProducerU' id = 12 +++++++ finished: end lumi for module: stream = 0 label = 'intProducerU' id = 12 +++++++ starting: end lumi for module: stream = 0 label = 'intProducerB' id = 9 +++++++ finished: end lumi for module: stream = 0 label = 'intProducerB' id = 9 +++++++ starting: end lumi for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = EndLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1221,7 +1209,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: end lumi for module: stream = 0 label = 'intProducerA' id = 9 +++++++ finished: end lumi for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = EndLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -1233,8 +1221,8 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: end lumi for module: stream = 0 label = 'intProducer' id = 4 -++++++ finished: end lumi for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: end lumi for module: stream = 0 label = 'intProducer' id = 3 +++++++ finished: end lumi for module: stream = 0 label = 'intProducer' id = 3 ++++ finished: end lumi: stream = 0 run = 1 lumi = 1 time = 15000001 StreamContext: StreamID = 0 transition = EndLuminosityBlock run: 1 lumi: 1 event: 0 @@ -1261,9 +1249,9 @@ GlobalContext: transition = EndLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'a3' id = 7 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'a2' id = 6 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'a3' id = 6 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'a2' id = 5 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'a1' id = 4 GlobalContext: transition = EndLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -1275,7 +1263,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'a1' id = 5 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'a1' id = 4 GlobalContext: transition = EndLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -1287,7 +1275,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: global end lumi for module: label = 'a1' id = 5 +++++++ starting: global end lumi for module: label = 'a1' id = 4 GlobalContext: transition = EndLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -1299,7 +1287,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: global end lumi for module: label = 'a1' id = 5 +++++++ finished: global end lumi for module: label = 'a1' id = 4 GlobalContext: transition = EndLuminosityBlock run: 1 luminosityBlock: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -1311,12 +1299,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'a2' id = 6 -++++++ starting: global end lumi for module: label = 'a2' id = 6 -++++++ finished: global end lumi for module: label = 'a2' id = 6 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'a3' id = 7 -++++++ starting: global end lumi for module: label = 'a3' id = 7 -++++++ finished: global end lumi for module: label = 'a3' id = 7 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'a2' id = 5 +++++++ starting: global end lumi for module: label = 'a2' id = 5 +++++++ finished: global end lumi for module: label = 'a2' id = 5 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'a3' id = 6 +++++++ starting: global end lumi for module: label = 'a3' id = 6 +++++++ finished: global end lumi for module: label = 'a3' id = 6 ++++ finished: global end lumi: run = 1 lumi = 1 time = 1 GlobalContext: transition = EndLuminosityBlock run: 1 luminosityBlock: 1 @@ -1343,8 +1331,8 @@ GlobalContext: transition = WriteLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: write lumi for module: label = 'out' id = 8 -++++++ finished: write lumi for module: label = 'out' id = 8 +++++++ starting: write lumi for module: label = 'out' id = 7 +++++++ finished: write lumi for module: label = 'out' id = 7 ++++ finished: global write lumi: run = 1 lumi = 1 time = 1 GlobalContext: transition = WriteLuminosityBlock run: 1 luminosityBlock: 1 @@ -1371,11 +1359,11 @@ StreamContext: StreamID = 0 transition = EndRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: end run for module: stream = 0 label = 'intProducerU' id = 13 -++++++ finished: end run for module: stream = 0 label = 'intProducerU' id = 13 -++++++ starting: end run for module: stream = 0 label = 'intProducerB' id = 10 -++++++ finished: end run for module: stream = 0 label = 'intProducerB' id = 10 -++++++ starting: end run for module: stream = 0 label = 'intProducerA' id = 9 +++++++ starting: end run for module: stream = 0 label = 'intProducerU' id = 12 +++++++ finished: end run for module: stream = 0 label = 'intProducerU' id = 12 +++++++ starting: end run for module: stream = 0 label = 'intProducerB' id = 9 +++++++ finished: end run for module: stream = 0 label = 'intProducerB' id = 9 +++++++ starting: end run for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = EndRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -1387,7 +1375,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: end run for module: stream = 0 label = 'intProducerA' id = 9 +++++++ finished: end run for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = EndRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -1399,8 +1387,8 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: end run for module: stream = 0 label = 'intProducer' id = 4 -++++++ finished: end run for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: end run for module: stream = 0 label = 'intProducer' id = 3 +++++++ finished: end run for module: stream = 0 label = 'intProducer' id = 3 ++++ finished: end run: stream = 0 run = 1 time = 15000001 StreamContext: StreamID = 0 transition = EndRun run: 1 lumi: 0 event: 0 @@ -1427,9 +1415,9 @@ GlobalContext: transition = EndRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing global end Run for module: label = 'a3' id = 7 -++++++++ starting: prefetching before processing global end Run for module: label = 'a2' id = 6 -++++++++ starting: prefetching before processing global end Run for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing global end Run for module: label = 'a3' id = 6 +++++++++ starting: prefetching before processing global end Run for module: label = 'a2' id = 5 +++++++++ starting: prefetching before processing global end Run for module: label = 'a1' id = 4 GlobalContext: transition = EndRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -1441,7 +1429,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global end Run for module: label = 'a1' id = 5 +++++++++ finished: prefetching before processing global end Run for module: label = 'a1' id = 4 GlobalContext: transition = EndRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -1453,7 +1441,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: global end run for module: label = 'a1' id = 5 +++++++ starting: global end run for module: label = 'a1' id = 4 GlobalContext: transition = EndRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -1465,7 +1453,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: global end run for module: label = 'a1' id = 5 +++++++ finished: global end run for module: label = 'a1' id = 4 GlobalContext: transition = EndRun run: 1 luminosityBlock: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -1477,12 +1465,12 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing global end Run for module: label = 'a2' id = 6 -++++++ starting: global end run for module: label = 'a2' id = 6 -++++++ finished: global end run for module: label = 'a2' id = 6 -++++++++ finished: prefetching before processing global end Run for module: label = 'a3' id = 7 -++++++ starting: global end run for module: label = 'a3' id = 7 -++++++ finished: global end run for module: label = 'a3' id = 7 +++++++++ finished: prefetching before processing global end Run for module: label = 'a2' id = 5 +++++++ starting: global end run for module: label = 'a2' id = 5 +++++++ finished: global end run for module: label = 'a2' id = 5 +++++++++ finished: prefetching before processing global end Run for module: label = 'a3' id = 6 +++++++ starting: global end run for module: label = 'a3' id = 6 +++++++ finished: global end run for module: label = 'a3' id = 6 ++++ finished: global end run 1 : time = 15000001 GlobalContext: transition = EndRun run: 1 luminosityBlock: 0 @@ -1509,8 +1497,8 @@ GlobalContext: transition = WriteRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: write run for module: label = 'out' id = 8 -++++++ finished: write run for module: label = 'out' id = 8 +++++++ starting: write run for module: label = 'out' id = 7 +++++++ finished: write run for module: label = 'out' id = 7 ++++ finished: global write run 1 : time = 15000001 GlobalContext: transition = WriteRun run: 1 luminosityBlock: 0 @@ -1537,9 +1525,9 @@ GlobalContext: transition = EndProcessBlock runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'a3' id = 7 -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'a2' id = 6 -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'a3' id = 6 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'a2' id = 5 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'a1' id = 4 GlobalContext: transition = EndProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1551,15 +1539,15 @@ ModuleCallingContext state = Prefetching runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 12 -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++ starting: end process block for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++ finished: end process block for module: label = 'intProducerBeginProcessBlock' id = 11 -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 12 -++++++ starting: end process block for module: label = 'intProducerEndProcessBlock' id = 12 -++++++ finished: end process block for module: label = 'intProducerEndProcessBlock' id = 12 -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'a1' id = 5 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 11 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++ starting: end process block for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++ finished: end process block for module: label = 'intProducerBeginProcessBlock' id = 10 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'intProducerEndProcessBlock' id = 11 +++++++ starting: end process block for module: label = 'intProducerEndProcessBlock' id = 11 +++++++ finished: end process block for module: label = 'intProducerEndProcessBlock' id = 11 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'a1' id = 4 GlobalContext: transition = EndProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1571,7 +1559,7 @@ ModuleCallingContext state = Prefetching runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: end process block for module: label = 'a1' id = 5 +++++++ starting: end process block for module: label = 'a1' id = 4 GlobalContext: transition = EndProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1583,7 +1571,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ finished: end process block for module: label = 'a1' id = 5 +++++++ finished: end process block for module: label = 'a1' id = 4 GlobalContext: transition = EndProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1595,12 +1583,12 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'a2' id = 6 -++++++ starting: end process block for module: label = 'a2' id = 6 -++++++ finished: end process block for module: label = 'a2' id = 6 -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'a3' id = 7 -++++++ starting: end process block for module: label = 'a3' id = 7 -++++++ finished: end process block for module: label = 'a3' id = 7 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'a2' id = 5 +++++++ starting: end process block for module: label = 'a2' id = 5 +++++++ finished: end process block for module: label = 'a2' id = 5 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'a3' id = 6 +++++++ starting: end process block for module: label = 'a3' id = 6 +++++++ finished: end process block for module: label = 'a3' id = 6 ++++ finished: end process block GlobalContext: transition = EndProcessBlock run: 0 luminosityBlock: 0 @@ -1655,8 +1643,8 @@ GlobalContext: transition = WriteProcessBlock runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++++ starting: write process block for module: label = 'out' id = 8 -++++++ finished: write process block for module: label = 'out' id = 8 +++++++ starting: write process block for module: label = 'out' id = 7 +++++++ finished: write process block for module: label = 'out' id = 7 ++++ finished: write process block GlobalContext: transition = WriteProcessBlock run: 0 luminosityBlock: 0 @@ -1677,9 +1665,9 @@ GlobalContext: transition = WriteProcessBlock ProcessContext: COPY 6f4335e86de793448be83fe14f12dcb7 parent ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ starting: end stream for module: stream = 0 label = 'intProducer' id = 4 -++++ finished: end stream for module: stream = 0 label = 'intProducer' id = 4 -++++ starting: end stream for module: stream = 0 label = 'a1' id = 5 +++++ starting: end stream for module: stream = 0 label = 'intProducer' id = 3 +++++ finished: end stream for module: stream = 0 label = 'intProducer' id = 3 +++++ starting: end stream for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = EndStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1691,7 +1679,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ finished: end stream for module: stream = 0 label = 'a1' id = 5 +++++ finished: end stream for module: stream = 0 label = 'a1' id = 4 StreamContext: StreamID = 0 transition = EndStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1703,19 +1691,17 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ starting: end stream for module: stream = 0 label = 'a2' id = 6 -++++ finished: end stream for module: stream = 0 label = 'a2' id = 6 -++++ starting: end stream for module: stream = 0 label = 'a3' id = 7 -++++ finished: end stream for module: stream = 0 label = 'a3' id = 7 +++++ starting: end stream for module: stream = 0 label = 'a2' id = 5 +++++ finished: end stream for module: stream = 0 label = 'a2' id = 5 +++++ starting: end stream for module: stream = 0 label = 'a3' id = 6 +++++ finished: end stream for module: stream = 0 label = 'a3' id = 6 ++++ starting: end stream for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: end stream for module: stream = 0 label = 'TriggerResults' id = 1 -++++ starting: end stream for module: stream = 0 label = 'out' id = 8 -++++ finished: end stream for module: stream = 0 label = 'out' id = 8 +++++ starting: end stream for module: stream = 0 label = 'out' id = 7 +++++ finished: end stream for module: stream = 0 label = 'out' id = 7 ++++ starting: end stream for module: stream = 0 label = 'p' id = 2 ++++ finished: end stream for module: stream = 0 label = 'p' id = 2 -++++ starting: end stream for module: stream = 0 label = 'e' id = 3 -++++ finished: end stream for module: stream = 0 label = 'e' id = 3 -++++ starting: end stream for module: stream = 0 label = 'intProducerA' id = 9 +++++ starting: end stream for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = EndStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1727,7 +1713,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ finished: end stream for module: stream = 0 label = 'intProducerA' id = 9 +++++ finished: end stream for module: stream = 0 label = 'intProducerA' id = 8 StreamContext: StreamID = 0 transition = EndStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -1739,49 +1725,47 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD1 cf8fb4a5e3c9a108eac33826b2a17969 -++++ starting: end stream for module: stream = 0 label = 'intProducerB' id = 10 -++++ finished: end stream for module: stream = 0 label = 'intProducerB' id = 10 -++++ starting: end stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 11 -++++ finished: end stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 11 -++++ starting: end stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 12 -++++ finished: end stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 12 -++++ starting: end stream for module: stream = 0 label = 'intProducerU' id = 13 -++++ finished: end stream for module: stream = 0 label = 'intProducerU' id = 13 -++++ starting: end stream for module: stream = 0 label = 'intVectorProducer' id = 14 -++++ finished: end stream for module: stream = 0 label = 'intVectorProducer' id = 14 -++++ starting: end job for module with label 'intProducerA' id = 9 +++++ starting: end stream for module: stream = 0 label = 'intProducerB' id = 9 +++++ finished: end stream for module: stream = 0 label = 'intProducerB' id = 9 +++++ starting: end stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 10 +++++ finished: end stream for module: stream = 0 label = 'intProducerBeginProcessBlock' id = 10 +++++ starting: end stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 11 +++++ finished: end stream for module: stream = 0 label = 'intProducerEndProcessBlock' id = 11 +++++ starting: end stream for module: stream = 0 label = 'intProducerU' id = 12 +++++ finished: end stream for module: stream = 0 label = 'intProducerU' id = 12 +++++ starting: end stream for module: stream = 0 label = 'intVectorProducer' id = 13 +++++ finished: end stream for module: stream = 0 label = 'intVectorProducer' id = 13 +++++ starting: end job for module with label 'intProducerA' id = 8 Module type=IntProducer, Module label=intProducerA, Parameter Set ID=56ea7c8bbb02df4e1c3b945954838318 -++++ finished: end job for module with label 'intProducerA' id = 9 +++++ finished: end job for module with label 'intProducerA' id = 8 Module type=IntProducer, Module label=intProducerA, Parameter Set ID=56ea7c8bbb02df4e1c3b945954838318 -++++ starting: end job for module with label 'intProducerB' id = 10 -++++ finished: end job for module with label 'intProducerB' id = 10 -++++ starting: end job for module with label 'intProducerBeginProcessBlock' id = 11 -++++ finished: end job for module with label 'intProducerBeginProcessBlock' id = 11 -++++ starting: end job for module with label 'intProducerEndProcessBlock' id = 12 -++++ finished: end job for module with label 'intProducerEndProcessBlock' id = 12 -++++ starting: end job for module with label 'intProducerU' id = 13 -++++ finished: end job for module with label 'intProducerU' id = 13 -++++ starting: end job for module with label 'intVectorProducer' id = 14 -++++ finished: end job for module with label 'intVectorProducer' id = 14 -++++ starting: end job for module with label 'intProducer' id = 4 -++++ finished: end job for module with label 'intProducer' id = 4 -++++ starting: end job for module with label 'a1' id = 5 +++++ starting: end job for module with label 'intProducerB' id = 9 +++++ finished: end job for module with label 'intProducerB' id = 9 +++++ starting: end job for module with label 'intProducerBeginProcessBlock' id = 10 +++++ finished: end job for module with label 'intProducerBeginProcessBlock' id = 10 +++++ starting: end job for module with label 'intProducerEndProcessBlock' id = 11 +++++ finished: end job for module with label 'intProducerEndProcessBlock' id = 11 +++++ starting: end job for module with label 'intProducerU' id = 12 +++++ finished: end job for module with label 'intProducerU' id = 12 +++++ starting: end job for module with label 'intVectorProducer' id = 13 +++++ finished: end job for module with label 'intVectorProducer' id = 13 +++++ starting: end job for module with label 'intProducer' id = 3 +++++ finished: end job for module with label 'intProducer' id = 3 +++++ starting: end job for module with label 'a1' id = 4 Module type=TestFindProduct, Module label=a1, Parameter Set ID=a7caa43fcf5ef35dee69e4bd85169d4c TestFindProduct sum = 530021 -++++ finished: end job for module with label 'a1' id = 5 +++++ finished: end job for module with label 'a1' id = 4 Module type=TestFindProduct, Module label=a1, Parameter Set ID=a7caa43fcf5ef35dee69e4bd85169d4c -++++ starting: end job for module with label 'a2' id = 6 +++++ starting: end job for module with label 'a2' id = 5 TestFindProduct sum = 300 -++++ finished: end job for module with label 'a2' id = 6 -++++ starting: end job for module with label 'a3' id = 7 +++++ finished: end job for module with label 'a2' id = 5 +++++ starting: end job for module with label 'a3' id = 6 TestFindProduct sum = 300 -++++ finished: end job for module with label 'a3' id = 7 -++++ starting: end job for module with label 'out' id = 8 -++++ finished: end job for module with label 'out' id = 8 +++++ finished: end job for module with label 'a3' id = 6 +++++ starting: end job for module with label 'out' id = 7 +++++ finished: end job for module with label 'out' id = 7 ++++ starting: end job for module with label 'TriggerResults' id = 1 ++++ finished: end job for module with label 'TriggerResults' id = 1 ++++ starting: end job for module with label 'p' id = 2 ++++ finished: end job for module with label 'p' id = 2 -++++ starting: end job for module with label 'e' id = 3 -++++ finished: end job for module with label 'e' id = 3 ++ finished: end job diff --git a/FWCore/Integration/test/unit_test_outputs/testGetBy2.log b/FWCore/Integration/test/unit_test_outputs/testGetBy2.log index d3109fc8b8098..1f5691790acf9 100644 --- a/FWCore/Integration/test/unit_test_outputs/testGetBy2.log +++ b/FWCore/Integration/test/unit_test_outputs/testGetBy2.log @@ -8,38 +8,34 @@ Module type=PoolSource, Module label=source, Parameter Set ID=e26370152bd22c8709 ++++ finished: constructing module with label 'TriggerResults' id = 1 ++++ starting: constructing module with label 'p' id = 2 ++++ finished: constructing module with label 'p' id = 2 -++++ starting: constructing module with label 'e' id = 3 -++++ finished: constructing module with label 'e' id = 3 -++++ starting: constructing module with label 'intProducer' id = 4 +++++ starting: constructing module with label 'intProducer' id = 3 Module type=IntProducer, Module label=intProducer, Parameter Set ID=b4b90439a3015d748c803aa5c60a25d3 -++++ finished: constructing module with label 'intProducer' id = 4 +++++ finished: constructing module with label 'intProducer' id = 3 Module type=IntProducer, Module label=intProducer, Parameter Set ID=b4b90439a3015d748c803aa5c60a25d3 -++++ starting: constructing module with label 'out' id = 5 -++++ finished: constructing module with label 'out' id = 5 -++++ starting: constructing module with label 'intProducerU' id = 6 -++++ finished: constructing module with label 'intProducerU' id = 6 -++++ starting: constructing module with label 'intVectorProducer' id = 7 -++++ finished: constructing module with label 'intVectorProducer' id = 7 +++++ starting: constructing module with label 'out' id = 4 +++++ finished: constructing module with label 'out' id = 4 +++++ starting: constructing module with label 'intProducerU' id = 5 +++++ finished: constructing module with label 'intProducerU' id = 5 +++++ starting: constructing module with label 'intVectorProducer' id = 6 +++++ finished: constructing module with label 'intVectorProducer' id = 6 ++ preallocate: 1 concurrent runs, 1 concurrent luminosity sections, 1 streams ++ starting: begin job -++++ starting: begin job for module with label 'intProducerU' id = 6 -++++ finished: begin job for module with label 'intProducerU' id = 6 -++++ starting: begin job for module with label 'intVectorProducer' id = 7 -++++ finished: begin job for module with label 'intVectorProducer' id = 7 -++++ starting: begin job for module with label 'intProducer' id = 4 +++++ starting: begin job for module with label 'intProducerU' id = 5 +++++ finished: begin job for module with label 'intProducerU' id = 5 +++++ starting: begin job for module with label 'intVectorProducer' id = 6 +++++ finished: begin job for module with label 'intVectorProducer' id = 6 +++++ starting: begin job for module with label 'intProducer' id = 3 Module type=IntProducer, Module label=intProducer, Parameter Set ID=b4b90439a3015d748c803aa5c60a25d3 -++++ finished: begin job for module with label 'intProducer' id = 4 +++++ finished: begin job for module with label 'intProducer' id = 3 Module type=IntProducer, Module label=intProducer, Parameter Set ID=b4b90439a3015d748c803aa5c60a25d3 -++++ starting: begin job for module with label 'out' id = 5 -++++ finished: begin job for module with label 'out' id = 5 +++++ starting: begin job for module with label 'out' id = 4 +++++ finished: begin job for module with label 'out' id = 4 ++++ starting: begin job for module with label 'TriggerResults' id = 1 ++++ finished: begin job for module with label 'TriggerResults' id = 1 ++++ starting: begin job for module with label 'p' id = 2 ++++ finished: begin job for module with label 'p' id = 2 -++++ starting: begin job for module with label 'e' id = 3 -++++ finished: begin job for module with label 'e' id = 3 ++ finished: begin job -++++ starting: begin stream for module: stream = 0 label = 'intProducer' id = 4 +++++ starting: begin stream for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = BeginStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -51,7 +47,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++ finished: begin stream for module: stream = 0 label = 'intProducer' id = 4 +++++ finished: begin stream for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = BeginStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -65,16 +61,14 @@ ModuleCallingContext state = Running ++++ starting: begin stream for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: begin stream for module: stream = 0 label = 'TriggerResults' id = 1 -++++ starting: begin stream for module: stream = 0 label = 'out' id = 5 -++++ finished: begin stream for module: stream = 0 label = 'out' id = 5 +++++ starting: begin stream for module: stream = 0 label = 'out' id = 4 +++++ finished: begin stream for module: stream = 0 label = 'out' id = 4 ++++ starting: begin stream for module: stream = 0 label = 'p' id = 2 ++++ finished: begin stream for module: stream = 0 label = 'p' id = 2 -++++ starting: begin stream for module: stream = 0 label = 'e' id = 3 -++++ finished: begin stream for module: stream = 0 label = 'e' id = 3 -++++ starting: begin stream for module: stream = 0 label = 'intProducerU' id = 6 -++++ finished: begin stream for module: stream = 0 label = 'intProducerU' id = 6 -++++ starting: begin stream for module: stream = 0 label = 'intVectorProducer' id = 7 -++++ finished: begin stream for module: stream = 0 label = 'intVectorProducer' id = 7 +++++ starting: begin stream for module: stream = 0 label = 'intProducerU' id = 5 +++++ finished: begin stream for module: stream = 0 label = 'intProducerU' id = 5 +++++ starting: begin stream for module: stream = 0 label = 'intVectorProducer' id = 6 +++++ finished: begin stream for module: stream = 0 label = 'intVectorProducer' id = 6 ++++ starting: begin process block GlobalContext: transition = BeginProcessBlock run: 0 luminosityBlock: 0 @@ -107,8 +101,8 @@ GlobalContext: transition = WriteProcessBlock runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: write process block for module: label = 'out' id = 5 -++++++ finished: write process block for module: label = 'out' id = 5 +++++++ starting: write process block for module: label = 'out' id = 4 +++++++ finished: write process block for module: label = 'out' id = 4 ++++ finished: write process block GlobalContext: transition = WriteProcessBlock run: 0 luminosityBlock: 0 @@ -132,18 +126,15 @@ GlobalContext: transition = BeginRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 -++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 -++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 1 time = 1 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: begin run for module: stream = 0 label = 'intProducerU' id = 6 -++++++ finished: begin run for module: stream = 0 label = 'intProducerU' id = 6 -++++++ starting: begin run for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: begin run for module: stream = 0 label = 'intProducerU' id = 5 +++++++ finished: begin run for module: stream = 0 label = 'intProducerU' id = 5 +++++++ starting: begin run for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -155,7 +146,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ finished: begin run for module: stream = 0 label = 'intProducer' id = 4 +++++++ finished: begin run for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = BeginRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 @@ -173,6 +164,9 @@ StreamContext: StreamID = 0 transition = BeginRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 +++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 +++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 +++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: source lumi ++++ finished: source lumi ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1 @@ -193,9 +187,9 @@ StreamContext: StreamID = 0 transition = BeginLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: begin lumi for module: stream = 0 label = 'intProducerU' id = 6 -++++++ finished: begin lumi for module: stream = 0 label = 'intProducerU' id = 6 -++++++ starting: begin lumi for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: begin lumi for module: stream = 0 label = 'intProducerU' id = 5 +++++++ finished: begin lumi for module: stream = 0 label = 'intProducerU' id = 5 +++++++ starting: begin lumi for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = BeginLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -207,7 +201,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ finished: begin lumi for module: stream = 0 label = 'intProducer' id = 4 +++++++ finished: begin lumi for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = BeginLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 @@ -255,7 +249,7 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -269,7 +263,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -283,7 +277,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -297,7 +291,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 5000001 @@ -326,36 +320,34 @@ PathContext: pathName = p pathID = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 5 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 5 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 5 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 5 -++++++++ starting: processing event for module: stream = 0 label = 'e' id = 3 -++++++++ finished: processing event for module: stream = 0 label = 'e' id = 3 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 4 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 4 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 4 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 4 ++++++ finished: processing path 'e' : stream = 0 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 1 @@ -403,7 +395,7 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -417,7 +409,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -431,7 +423,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -445,7 +437,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 10000001 @@ -474,36 +466,34 @@ PathContext: pathName = p pathID = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 5 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 5 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 5 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 5 -++++++++ starting: processing event for module: stream = 0 label = 'e' id = 3 -++++++++ finished: processing event for module: stream = 0 label = 'e' id = 3 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 4 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 4 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 4 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 4 ++++++ finished: processing path 'e' : stream = 0 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 2 @@ -551,7 +541,7 @@ PathContext: pathName = p pathID = 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -565,7 +555,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -579,7 +569,7 @@ ModuleCallingContext state = Prefetching runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ starting: processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -593,7 +583,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 4 +++++++++ finished: processing event for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -622,36 +612,34 @@ PathContext: pathName = p pathID = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 1 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 1 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 5 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 7 -++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 6 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 5 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 5 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 5 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 5 -++++++++ starting: processing event for module: stream = 0 label = 'e' id = 3 -++++++++ finished: processing event for module: stream = 0 label = 'e' id = 3 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 4 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ starting: processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: processing event for module: stream = 0 label = 'intVectorProducer' id = 6 +++++++++++ finished: prefetching before processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ finished: processing event for module: stream = 0 label = 'intProducerU' id = 5 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ starting: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++++ finished: event delayed read from source: stream = 0 label = 'out' id = 4 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 4 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 4 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 4 ++++++ finished: processing path 'e' : stream = 0 StreamContext: StreamID = 0 transition = Event run: 1 lumi: 1 event: 3 @@ -678,9 +666,9 @@ StreamContext: StreamID = 0 transition = EndLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: end lumi for module: stream = 0 label = 'intProducerU' id = 6 -++++++ finished: end lumi for module: stream = 0 label = 'intProducerU' id = 6 -++++++ starting: end lumi for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: end lumi for module: stream = 0 label = 'intProducerU' id = 5 +++++++ finished: end lumi for module: stream = 0 label = 'intProducerU' id = 5 +++++++ starting: end lumi for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = EndLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -692,7 +680,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ finished: end lumi for module: stream = 0 label = 'intProducer' id = 4 +++++++ finished: end lumi for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = EndLuminosityBlock run: 1 lumi: 1 event: 0 runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 15000001 @@ -728,8 +716,8 @@ GlobalContext: transition = WriteLuminosityBlock runIndex = 0 luminosityBlockIndex = 0 unixTime = 0 microsecondOffset = 1 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: write lumi for module: label = 'out' id = 5 -++++++ finished: write lumi for module: label = 'out' id = 5 +++++++ starting: write lumi for module: label = 'out' id = 4 +++++++ finished: write lumi for module: label = 'out' id = 4 ++++ finished: global write lumi: run = 1 lumi = 1 time = 1 GlobalContext: transition = WriteLuminosityBlock run: 1 luminosityBlock: 1 @@ -742,9 +730,9 @@ StreamContext: StreamID = 0 transition = EndRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: end run for module: stream = 0 label = 'intProducerU' id = 6 -++++++ finished: end run for module: stream = 0 label = 'intProducerU' id = 6 -++++++ starting: end run for module: stream = 0 label = 'intProducer' id = 4 +++++++ starting: end run for module: stream = 0 label = 'intProducerU' id = 5 +++++++ finished: end run for module: stream = 0 label = 'intProducerU' id = 5 +++++++ starting: end run for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = EndRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -756,7 +744,7 @@ ModuleCallingContext state = Running runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ finished: end run for module: stream = 0 label = 'intProducer' id = 4 +++++++ finished: end run for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = EndRun run: 1 lumi: 0 event: 0 runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 @@ -792,8 +780,8 @@ GlobalContext: transition = WriteRun runIndex = 0 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 15000001 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: write run for module: label = 'out' id = 5 -++++++ finished: write run for module: label = 'out' id = 5 +++++++ starting: write run for module: label = 'out' id = 4 +++++++ finished: write run for module: label = 'out' id = 4 ++++ finished: global write run 1 : time = 15000001 GlobalContext: transition = WriteRun run: 1 luminosityBlock: 0 @@ -820,15 +808,15 @@ GlobalContext: transition = WriteProcessBlock runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++++ starting: write process block for module: label = 'out' id = 5 -++++++ finished: write process block for module: label = 'out' id = 5 +++++++ starting: write process block for module: label = 'out' id = 4 +++++++ finished: write process block for module: label = 'out' id = 4 ++++ finished: write process block GlobalContext: transition = WriteProcessBlock run: 0 luminosityBlock: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++ starting: end stream for module: stream = 0 label = 'intProducer' id = 4 +++++ starting: end stream for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = EndStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -840,7 +828,7 @@ ModuleCallingContext state = Running runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 ProcessContext: PROD2 9a42d7e4995aeb2a3c9d04a3ef0f3879 -++++ finished: end stream for module: stream = 0 label = 'intProducer' id = 4 +++++ finished: end stream for module: stream = 0 label = 'intProducer' id = 3 StreamContext: StreamID = 0 transition = EndStream run: 0 lumi: 0 event: 0 runIndex = 4294967295 luminosityBlockIndex = 4294967295 unixTime = 0 microsecondOffset = 0 @@ -854,30 +842,26 @@ ModuleCallingContext state = Running ++++ starting: end stream for module: stream = 0 label = 'TriggerResults' id = 1 ++++ finished: end stream for module: stream = 0 label = 'TriggerResults' id = 1 -++++ starting: end stream for module: stream = 0 label = 'out' id = 5 -++++ finished: end stream for module: stream = 0 label = 'out' id = 5 +++++ starting: end stream for module: stream = 0 label = 'out' id = 4 +++++ finished: end stream for module: stream = 0 label = 'out' id = 4 ++++ starting: end stream for module: stream = 0 label = 'p' id = 2 ++++ finished: end stream for module: stream = 0 label = 'p' id = 2 -++++ starting: end stream for module: stream = 0 label = 'e' id = 3 -++++ finished: end stream for module: stream = 0 label = 'e' id = 3 -++++ starting: end stream for module: stream = 0 label = 'intProducerU' id = 6 -++++ finished: end stream for module: stream = 0 label = 'intProducerU' id = 6 -++++ starting: end stream for module: stream = 0 label = 'intVectorProducer' id = 7 -++++ finished: end stream for module: stream = 0 label = 'intVectorProducer' id = 7 -++++ starting: end job for module with label 'intProducerU' id = 6 -++++ finished: end job for module with label 'intProducerU' id = 6 -++++ starting: end job for module with label 'intVectorProducer' id = 7 -++++ finished: end job for module with label 'intVectorProducer' id = 7 -++++ starting: end job for module with label 'intProducer' id = 4 +++++ starting: end stream for module: stream = 0 label = 'intProducerU' id = 5 +++++ finished: end stream for module: stream = 0 label = 'intProducerU' id = 5 +++++ starting: end stream for module: stream = 0 label = 'intVectorProducer' id = 6 +++++ finished: end stream for module: stream = 0 label = 'intVectorProducer' id = 6 +++++ starting: end job for module with label 'intProducerU' id = 5 +++++ finished: end job for module with label 'intProducerU' id = 5 +++++ starting: end job for module with label 'intVectorProducer' id = 6 +++++ finished: end job for module with label 'intVectorProducer' id = 6 +++++ starting: end job for module with label 'intProducer' id = 3 Module type=IntProducer, Module label=intProducer, Parameter Set ID=b4b90439a3015d748c803aa5c60a25d3 -++++ finished: end job for module with label 'intProducer' id = 4 +++++ finished: end job for module with label 'intProducer' id = 3 Module type=IntProducer, Module label=intProducer, Parameter Set ID=b4b90439a3015d748c803aa5c60a25d3 -++++ starting: end job for module with label 'out' id = 5 -++++ finished: end job for module with label 'out' id = 5 +++++ starting: end job for module with label 'out' id = 4 +++++ finished: end job for module with label 'out' id = 4 ++++ starting: end job for module with label 'TriggerResults' id = 1 ++++ finished: end job for module with label 'TriggerResults' id = 1 ++++ starting: end job for module with label 'p' id = 2 ++++ finished: end job for module with label 'p' id = 2 -++++ starting: end job for module with label 'e' id = 3 -++++ finished: end job for module with label 'e' id = 3 ++ finished: end job diff --git a/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt b/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt index 6c242b5af9b72..58c0e1f80ca95 100644 --- a/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt +++ b/FWCore/Integration/test/unit_test_outputs/testSubProcess.grep2.txt @@ -32,48 +32,44 @@ ++++ finished: constructing module with label 'path3' id = 15 ++++ starting: constructing module with label 'path4' id = 16 ++++ finished: constructing module with label 'path4' id = 16 -++++ starting: constructing module with label 'endPath1' id = 17 -++++ finished: constructing module with label 'endPath1' id = 17 -++++ starting: constructing module with label 'thingWithMergeProducer' id = 18 -++++ finished: constructing module with label 'thingWithMergeProducer' id = 18 -++++ starting: constructing module with label 'test' id = 19 -++++ finished: constructing module with label 'test' id = 19 -++++ starting: constructing module with label 'testmerge' id = 20 -++++ finished: constructing module with label 'testmerge' id = 20 -++++ starting: constructing module with label 'get' id = 21 -++++ finished: constructing module with label 'get' id = 21 -++++ starting: constructing module with label 'getInt' id = 22 -++++ finished: constructing module with label 'getInt' id = 22 -++++ starting: constructing module with label 'dependsOnNoPut' id = 23 -++++ finished: constructing module with label 'dependsOnNoPut' id = 23 -++++ starting: constructing module with label 'out' id = 24 -++++ finished: constructing module with label 'out' id = 24 -++++ starting: constructing module with label 'TriggerResults' id = 25 -++++ finished: constructing module with label 'TriggerResults' id = 25 -++++ starting: constructing module with label 'path1' id = 26 -++++ finished: constructing module with label 'path1' id = 26 -++++ starting: constructing module with label 'path2' id = 27 -++++ finished: constructing module with label 'path2' id = 27 -++++ starting: constructing module with label 'path3' id = 28 -++++ finished: constructing module with label 'path3' id = 28 -++++ starting: constructing module with label 'path4' id = 29 -++++ finished: constructing module with label 'path4' id = 29 -++++ starting: constructing module with label 'endPath1' id = 30 -++++ finished: constructing module with label 'endPath1' id = 30 -++++ starting: constructing module with label 'thingWithMergeProducer' id = 31 -++++ finished: constructing module with label 'thingWithMergeProducer' id = 31 -++++ starting: constructing module with label 'test' id = 32 -++++ finished: constructing module with label 'test' id = 32 -++++ starting: constructing module with label 'testmerge' id = 33 -++++ finished: constructing module with label 'testmerge' id = 33 -++++ starting: constructing module with label 'get' id = 34 -++++ finished: constructing module with label 'get' id = 34 -++++ starting: constructing module with label 'getInt' id = 35 -++++ finished: constructing module with label 'getInt' id = 35 -++++ starting: constructing module with label 'dependsOnNoPut' id = 36 -++++ finished: constructing module with label 'dependsOnNoPut' id = 36 -++++ starting: constructing module with label 'out' id = 37 -++++ finished: constructing module with label 'out' id = 37 +++++ starting: constructing module with label 'thingWithMergeProducer' id = 17 +++++ finished: constructing module with label 'thingWithMergeProducer' id = 17 +++++ starting: constructing module with label 'test' id = 18 +++++ finished: constructing module with label 'test' id = 18 +++++ starting: constructing module with label 'testmerge' id = 19 +++++ finished: constructing module with label 'testmerge' id = 19 +++++ starting: constructing module with label 'get' id = 20 +++++ finished: constructing module with label 'get' id = 20 +++++ starting: constructing module with label 'getInt' id = 21 +++++ finished: constructing module with label 'getInt' id = 21 +++++ starting: constructing module with label 'dependsOnNoPut' id = 22 +++++ finished: constructing module with label 'dependsOnNoPut' id = 22 +++++ starting: constructing module with label 'out' id = 23 +++++ finished: constructing module with label 'out' id = 23 +++++ starting: constructing module with label 'TriggerResults' id = 24 +++++ finished: constructing module with label 'TriggerResults' id = 24 +++++ starting: constructing module with label 'path1' id = 25 +++++ finished: constructing module with label 'path1' id = 25 +++++ starting: constructing module with label 'path2' id = 26 +++++ finished: constructing module with label 'path2' id = 26 +++++ starting: constructing module with label 'path3' id = 27 +++++ finished: constructing module with label 'path3' id = 27 +++++ starting: constructing module with label 'path4' id = 28 +++++ finished: constructing module with label 'path4' id = 28 +++++ starting: constructing module with label 'thingWithMergeProducer' id = 29 +++++ finished: constructing module with label 'thingWithMergeProducer' id = 29 +++++ starting: constructing module with label 'test' id = 30 +++++ finished: constructing module with label 'test' id = 30 +++++ starting: constructing module with label 'testmerge' id = 31 +++++ finished: constructing module with label 'testmerge' id = 31 +++++ starting: constructing module with label 'get' id = 32 +++++ finished: constructing module with label 'get' id = 32 +++++ starting: constructing module with label 'getInt' id = 33 +++++ finished: constructing module with label 'getInt' id = 33 +++++ starting: constructing module with label 'dependsOnNoPut' id = 34 +++++ finished: constructing module with label 'dependsOnNoPut' id = 34 +++++ starting: constructing module with label 'out' id = 35 +++++ finished: constructing module with label 'out' id = 35 ++ preallocate: 1 concurrent runs, 1 concurrent luminosity sections, 1 streams ++ starting: begin job ++ starting: begin job @@ -102,20 +98,20 @@ ++++ finished: begin job for module with label 'path2' id = 4 ++ starting: begin job ++ starting: begin job -++++ starting: begin job for module with label 'thingWithMergeProducer' id = 18 -++++ finished: begin job for module with label 'thingWithMergeProducer' id = 18 -++++ starting: begin job for module with label 'test' id = 19 -++++ finished: begin job for module with label 'test' id = 19 -++++ starting: begin job for module with label 'testmerge' id = 20 -++++ finished: begin job for module with label 'testmerge' id = 20 -++++ starting: begin job for module with label 'get' id = 21 -++++ finished: begin job for module with label 'get' id = 21 -++++ starting: begin job for module with label 'getInt' id = 22 -++++ finished: begin job for module with label 'getInt' id = 22 -++++ starting: begin job for module with label 'dependsOnNoPut' id = 23 -++++ finished: begin job for module with label 'dependsOnNoPut' id = 23 -++++ starting: begin job for module with label 'out' id = 24 -++++ finished: begin job for module with label 'out' id = 24 +++++ starting: begin job for module with label 'thingWithMergeProducer' id = 17 +++++ finished: begin job for module with label 'thingWithMergeProducer' id = 17 +++++ starting: begin job for module with label 'test' id = 18 +++++ finished: begin job for module with label 'test' id = 18 +++++ starting: begin job for module with label 'testmerge' id = 19 +++++ finished: begin job for module with label 'testmerge' id = 19 +++++ starting: begin job for module with label 'get' id = 20 +++++ finished: begin job for module with label 'get' id = 20 +++++ starting: begin job for module with label 'getInt' id = 21 +++++ finished: begin job for module with label 'getInt' id = 21 +++++ starting: begin job for module with label 'dependsOnNoPut' id = 22 +++++ finished: begin job for module with label 'dependsOnNoPut' id = 22 +++++ starting: begin job for module with label 'out' id = 23 +++++ finished: begin job for module with label 'out' id = 23 ++++ starting: begin job for module with label 'TriggerResults' id = 12 ++++ finished: begin job for module with label 'TriggerResults' id = 12 ++++ starting: begin job for module with label 'path1' id = 13 @@ -126,35 +122,31 @@ ++++ finished: begin job for module with label 'path3' id = 15 ++++ starting: begin job for module with label 'path4' id = 16 ++++ finished: begin job for module with label 'path4' id = 16 -++++ starting: begin job for module with label 'endPath1' id = 17 -++++ finished: begin job for module with label 'endPath1' id = 17 ++ starting: begin job -++++ starting: begin job for module with label 'thingWithMergeProducer' id = 31 -++++ finished: begin job for module with label 'thingWithMergeProducer' id = 31 -++++ starting: begin job for module with label 'test' id = 32 -++++ finished: begin job for module with label 'test' id = 32 -++++ starting: begin job for module with label 'testmerge' id = 33 -++++ finished: begin job for module with label 'testmerge' id = 33 -++++ starting: begin job for module with label 'get' id = 34 -++++ finished: begin job for module with label 'get' id = 34 -++++ starting: begin job for module with label 'getInt' id = 35 -++++ finished: begin job for module with label 'getInt' id = 35 -++++ starting: begin job for module with label 'dependsOnNoPut' id = 36 -++++ finished: begin job for module with label 'dependsOnNoPut' id = 36 -++++ starting: begin job for module with label 'out' id = 37 -++++ finished: begin job for module with label 'out' id = 37 -++++ starting: begin job for module with label 'TriggerResults' id = 25 -++++ finished: begin job for module with label 'TriggerResults' id = 25 -++++ starting: begin job for module with label 'path1' id = 26 -++++ finished: begin job for module with label 'path1' id = 26 -++++ starting: begin job for module with label 'path2' id = 27 -++++ finished: begin job for module with label 'path2' id = 27 -++++ starting: begin job for module with label 'path3' id = 28 -++++ finished: begin job for module with label 'path3' id = 28 -++++ starting: begin job for module with label 'path4' id = 29 -++++ finished: begin job for module with label 'path4' id = 29 -++++ starting: begin job for module with label 'endPath1' id = 30 -++++ finished: begin job for module with label 'endPath1' id = 30 +++++ starting: begin job for module with label 'thingWithMergeProducer' id = 29 +++++ finished: begin job for module with label 'thingWithMergeProducer' id = 29 +++++ starting: begin job for module with label 'test' id = 30 +++++ finished: begin job for module with label 'test' id = 30 +++++ starting: begin job for module with label 'testmerge' id = 31 +++++ finished: begin job for module with label 'testmerge' id = 31 +++++ starting: begin job for module with label 'get' id = 32 +++++ finished: begin job for module with label 'get' id = 32 +++++ starting: begin job for module with label 'getInt' id = 33 +++++ finished: begin job for module with label 'getInt' id = 33 +++++ starting: begin job for module with label 'dependsOnNoPut' id = 34 +++++ finished: begin job for module with label 'dependsOnNoPut' id = 34 +++++ starting: begin job for module with label 'out' id = 35 +++++ finished: begin job for module with label 'out' id = 35 +++++ starting: begin job for module with label 'TriggerResults' id = 24 +++++ finished: begin job for module with label 'TriggerResults' id = 24 +++++ starting: begin job for module with label 'path1' id = 25 +++++ finished: begin job for module with label 'path1' id = 25 +++++ starting: begin job for module with label 'path2' id = 26 +++++ finished: begin job for module with label 'path2' id = 26 +++++ starting: begin job for module with label 'path3' id = 27 +++++ finished: begin job for module with label 'path3' id = 27 +++++ starting: begin job for module with label 'path4' id = 28 +++++ finished: begin job for module with label 'path4' id = 28 ++ finished: begin job ++++ starting: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 5 ++++ finished: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 5 @@ -178,22 +170,22 @@ ++++ finished: begin stream for module: stream = 0 label = 'path1' id = 3 ++++ starting: begin stream for module: stream = 0 label = 'path2' id = 4 ++++ finished: begin stream for module: stream = 0 label = 'path2' id = 4 -++++ starting: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++ finished: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++ starting: begin stream for module: stream = 0 label = 'test' id = 19 -++++ finished: begin stream for module: stream = 0 label = 'test' id = 19 -++++ starting: begin stream for module: stream = 0 label = 'testmerge' id = 20 -++++ finished: begin stream for module: stream = 0 label = 'testmerge' id = 20 -++++ starting: begin stream for module: stream = 0 label = 'get' id = 21 -++++ finished: begin stream for module: stream = 0 label = 'get' id = 21 -++++ starting: begin stream for module: stream = 0 label = 'getInt' id = 22 -++++ finished: begin stream for module: stream = 0 label = 'getInt' id = 22 -++++ starting: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++ finished: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++ starting: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++ finished: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++ starting: begin stream for module: stream = 0 label = 'test' id = 18 +++++ finished: begin stream for module: stream = 0 label = 'test' id = 18 +++++ starting: begin stream for module: stream = 0 label = 'testmerge' id = 19 +++++ finished: begin stream for module: stream = 0 label = 'testmerge' id = 19 +++++ starting: begin stream for module: stream = 0 label = 'get' id = 20 +++++ finished: begin stream for module: stream = 0 label = 'get' id = 20 +++++ starting: begin stream for module: stream = 0 label = 'getInt' id = 21 +++++ finished: begin stream for module: stream = 0 label = 'getInt' id = 21 +++++ starting: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++ finished: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++ starting: begin stream for module: stream = 0 label = 'TriggerResults' id = 12 ++++ finished: begin stream for module: stream = 0 label = 'TriggerResults' id = 12 -++++ starting: begin stream for module: stream = 0 label = 'out' id = 24 -++++ finished: begin stream for module: stream = 0 label = 'out' id = 24 +++++ starting: begin stream for module: stream = 0 label = 'out' id = 23 +++++ finished: begin stream for module: stream = 0 label = 'out' id = 23 ++++ starting: begin stream for module: stream = 0 label = 'path1' id = 13 ++++ finished: begin stream for module: stream = 0 label = 'path1' id = 13 ++++ starting: begin stream for module: stream = 0 label = 'path2' id = 14 @@ -202,34 +194,30 @@ ++++ finished: begin stream for module: stream = 0 label = 'path3' id = 15 ++++ starting: begin stream for module: stream = 0 label = 'path4' id = 16 ++++ finished: begin stream for module: stream = 0 label = 'path4' id = 16 -++++ starting: begin stream for module: stream = 0 label = 'endPath1' id = 17 -++++ finished: begin stream for module: stream = 0 label = 'endPath1' id = 17 -++++ starting: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++ finished: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++ starting: begin stream for module: stream = 0 label = 'test' id = 32 -++++ finished: begin stream for module: stream = 0 label = 'test' id = 32 -++++ starting: begin stream for module: stream = 0 label = 'testmerge' id = 33 -++++ finished: begin stream for module: stream = 0 label = 'testmerge' id = 33 -++++ starting: begin stream for module: stream = 0 label = 'get' id = 34 -++++ finished: begin stream for module: stream = 0 label = 'get' id = 34 -++++ starting: begin stream for module: stream = 0 label = 'getInt' id = 35 -++++ finished: begin stream for module: stream = 0 label = 'getInt' id = 35 -++++ starting: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++ finished: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++ starting: begin stream for module: stream = 0 label = 'TriggerResults' id = 25 -++++ finished: begin stream for module: stream = 0 label = 'TriggerResults' id = 25 -++++ starting: begin stream for module: stream = 0 label = 'out' id = 37 -++++ finished: begin stream for module: stream = 0 label = 'out' id = 37 -++++ starting: begin stream for module: stream = 0 label = 'path1' id = 26 -++++ finished: begin stream for module: stream = 0 label = 'path1' id = 26 -++++ starting: begin stream for module: stream = 0 label = 'path2' id = 27 -++++ finished: begin stream for module: stream = 0 label = 'path2' id = 27 -++++ starting: begin stream for module: stream = 0 label = 'path3' id = 28 -++++ finished: begin stream for module: stream = 0 label = 'path3' id = 28 -++++ starting: begin stream for module: stream = 0 label = 'path4' id = 29 -++++ finished: begin stream for module: stream = 0 label = 'path4' id = 29 -++++ starting: begin stream for module: stream = 0 label = 'endPath1' id = 30 -++++ finished: begin stream for module: stream = 0 label = 'endPath1' id = 30 +++++ starting: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++ finished: begin stream for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++ starting: begin stream for module: stream = 0 label = 'test' id = 30 +++++ finished: begin stream for module: stream = 0 label = 'test' id = 30 +++++ starting: begin stream for module: stream = 0 label = 'testmerge' id = 31 +++++ finished: begin stream for module: stream = 0 label = 'testmerge' id = 31 +++++ starting: begin stream for module: stream = 0 label = 'get' id = 32 +++++ finished: begin stream for module: stream = 0 label = 'get' id = 32 +++++ starting: begin stream for module: stream = 0 label = 'getInt' id = 33 +++++ finished: begin stream for module: stream = 0 label = 'getInt' id = 33 +++++ starting: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++ finished: begin stream for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++ starting: begin stream for module: stream = 0 label = 'TriggerResults' id = 24 +++++ finished: begin stream for module: stream = 0 label = 'TriggerResults' id = 24 +++++ starting: begin stream for module: stream = 0 label = 'out' id = 35 +++++ finished: begin stream for module: stream = 0 label = 'out' id = 35 +++++ starting: begin stream for module: stream = 0 label = 'path1' id = 25 +++++ finished: begin stream for module: stream = 0 label = 'path1' id = 25 +++++ starting: begin stream for module: stream = 0 label = 'path2' id = 26 +++++ finished: begin stream for module: stream = 0 label = 'path2' id = 26 +++++ starting: begin stream for module: stream = 0 label = 'path3' id = 27 +++++ finished: begin stream for module: stream = 0 label = 'path3' id = 27 +++++ starting: begin stream for module: stream = 0 label = 'path4' id = 28 +++++ finished: begin stream for module: stream = 0 label = 'path4' id = 28 ++++ starting: begin process block ++++ finished: begin process block ++++ starting: begin process block @@ -243,16 +231,16 @@ ++++ starting: begin process block ++++ finished: begin process block ++++ starting: begin process block -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 22 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 21 ++++ starting: begin process block -++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 35 -++++++ starting: begin process block for module: label = 'getInt' id = 35 -++++++ finished: begin process block for module: label = 'getInt' id = 35 +++++++++ starting: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 33 +++++++ starting: begin process block for module: label = 'getInt' id = 33 +++++++ finished: begin process block for module: label = 'getInt' id = 33 ++++ finished: begin process block -++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 22 -++++++ starting: begin process block for module: label = 'getInt' id = 22 -++++++ finished: begin process block for module: label = 'getInt' id = 22 +++++++++ finished: prefetching before processing begin ProcessBlock for module: label = 'getInt' id = 21 +++++++ starting: begin process block for module: label = 'getInt' id = 21 +++++++ finished: begin process block for module: label = 'getInt' id = 21 ++++ finished: begin process block ++++ queuing: EventSetup synchronization run: 1 lumi: 0 event: 0 ++++ pre: EventSetup synchronizing run: 1 lumi: 0 event: 0 @@ -288,62 +276,61 @@ ++++ starting: global begin run 1 : time = 1 ++++ finished: global begin run 1 : time = 1 ++++ starting: global begin run 1 : time = 1 -++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 21 +++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 20 ++++++++ starting: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd -++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin run 1 : time = 1 -++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 32 -++++++ starting: global begin run for module: label = 'test' id = 32 -++++++ finished: global begin run for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 33 -++++++ starting: global begin run for module: label = 'testmerge' id = 33 -++++++ finished: global begin run for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 35 -++++++ starting: global begin run for module: label = 'getInt' id = 35 -++++++ finished: global begin run for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 36 -++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 19 -++++++ starting: global begin run for module: label = 'test' id = 19 -++++++ finished: global begin run for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 20 -++++++ starting: global begin run for module: label = 'testmerge' id = 20 -++++++ finished: global begin run for module: label = 'testmerge' id = 20 +++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 30 +++++++ starting: global begin run for module: label = 'test' id = 30 +++++++ finished: global begin run for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 31 +++++++ starting: global begin run for module: label = 'testmerge' id = 31 +++++++ finished: global begin run for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 33 +++++++ starting: global begin run for module: label = 'getInt' id = 33 +++++++ finished: global begin run for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 34 +++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 18 +++++++ starting: global begin run for module: label = 'test' id = 18 +++++++ finished: global begin run for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 19 +++++++ starting: global begin run for module: label = 'testmerge' id = 19 +++++++ finished: global begin run for module: label = 'testmerge' id = 19 ++++++++ finished: prefetching for esmodule: label = '' type = DoodadESSource in record = GadgetRcd ++++++++ starting: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd ++++++++ finished: processing esmodule: label = '' type = DoodadESSource in record = GadgetRcd -++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 21 -++++++ starting: global begin run for module: label = 'get' id = 21 -++++++ finished: global begin run for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 34 -++++++ starting: global begin run for module: label = 'get' id = 34 -++++++ finished: global begin run for module: label = 'get' id = 34 +++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 20 +++++++ starting: global begin run for module: label = 'get' id = 20 +++++++ finished: global begin run for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 32 +++++++ starting: global begin run for module: label = 'get' id = 32 +++++++ finished: global begin run for module: label = 'get' id = 32 ++++ finished: global begin run 1 : time = 1 -++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 22 -++++++ starting: global begin run for module: label = 'getInt' id = 22 -++++++ finished: global begin run for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 21 +++++++ starting: global begin run for module: label = 'getInt' id = 21 +++++++ finished: global begin run for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin run 1 : time = 1 -++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 1 time = 1 ++++ finished: begin run: stream = 0 run = 1 time = 1 ++++ starting: begin run: stream = 0 run = 1 time = 1 @@ -362,6 +349,7 @@ ++++ finished: begin run: stream = 0 run = 1 time = 1 ++++ starting: begin run: stream = 0 run = 1 time = 1 ++++ finished: begin run: stream = 0 run = 1 time = 1 +++++ queuing: EventSetup synchronization run: 1 lumi: 1 event: 0 ++++ pre: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ post: EventSetup synchronizing run: 1 lumi: 1 event: 0 ++++ starting: source lumi @@ -391,56 +379,56 @@ ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1 ++++ finished: global begin lumi: run = 1 lumi = 1 time = 1 ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 1 lumi = 1 time = 1 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 1 lumi = 1 time = 1 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 1 lumi = 1 time = 1 ++++ starting: begin lumi: stream = 0 run = 1 lumi = 1 time = 1 ++++ finished: begin lumi: stream = 0 run = 1 lumi = 1 time = 1 @@ -515,105 +503,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 5000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 5000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 5000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 1 time = 5000001 ++++ starting: source event @@ -671,105 +655,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 10000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 10000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 10000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 2 time = 10000001 ++++ starting: source event @@ -827,105 +807,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 15000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 15000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 15000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 3 time = 15000001 ++++ starting: source event @@ -983,105 +959,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 4 time = 20000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 1 event = 4 time = 20000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 4 time = 20000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 1 event = 4 time = 20000001 ++++ queuing: EventSetup synchronization run: 1 lumi: 2 event: 0 @@ -1130,56 +1102,56 @@ ++++ starting: global end lumi: run = 1 lumi = 1 time = 1 ++++ finished: global end lumi: run = 1 lumi = 1 time = 1 ++++ starting: global end lumi: run = 1 lumi = 1 time = 1 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 1 lumi = 1 time = 1 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 1 lumi = 1 time = 1 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 1 lumi = 1 time = 1 ++++ starting: global write lumi: run = 1 lumi = 1 time = 1 ++++ finished: global write lumi: run = 1 lumi = 1 time = 1 @@ -1191,11 +1163,11 @@ ++++ finished: global write lumi: run = 1 lumi = 1 time = 1 ++++ starting: global write lumi: run = 1 lumi = 1 time = 1 ++++ starting: global write lumi: run = 1 lumi = 1 time = 1 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 1 lumi = 1 time = 1 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 1 lumi = 1 time = 1 ++++ starting: source lumi ++++ finished: source lumi @@ -1224,56 +1196,56 @@ ++++ starting: global begin lumi: run = 1 lumi = 2 time = 25000001 ++++ finished: global begin lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: global begin lumi: run = 1 lumi = 2 time = 25000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 1 lumi = 2 time = 25000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 1 lumi = 2 time = 25000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: begin lumi: stream = 0 run = 1 lumi = 2 time = 25000001 ++++ finished: begin lumi: stream = 0 run = 1 lumi = 2 time = 25000001 @@ -1348,105 +1320,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 5 time = 25000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 5 time = 25000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 5 time = 25000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 5 time = 25000001 ++++ starting: source event @@ -1504,105 +1472,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 6 time = 30000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 6 time = 30000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 6 time = 30000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 6 time = 30000001 ++++ starting: source event @@ -1660,105 +1624,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 7 time = 35000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 7 time = 35000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 7 time = 35000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 7 time = 35000001 ++++ starting: source event @@ -1816,105 +1776,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 8 time = 40000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 2 event = 8 time = 40000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 8 time = 40000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 2 event = 8 time = 40000001 ++++ queuing: EventSetup synchronization run: 1 lumi: 3 event: 0 @@ -1963,56 +1919,56 @@ ++++ starting: global end lumi: run = 1 lumi = 2 time = 25000001 ++++ finished: global end lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: global end lumi: run = 1 lumi = 2 time = 25000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 1 lumi = 2 time = 25000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 1 lumi = 2 time = 25000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: global write lumi: run = 1 lumi = 2 time = 25000001 ++++ finished: global write lumi: run = 1 lumi = 2 time = 25000001 @@ -2024,11 +1980,11 @@ ++++ finished: global write lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: global write lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: global write lumi: run = 1 lumi = 2 time = 25000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 1 lumi = 2 time = 25000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 1 lumi = 2 time = 25000001 ++++ starting: source lumi ++++ finished: source lumi @@ -2057,56 +2013,56 @@ ++++ starting: global begin lumi: run = 1 lumi = 3 time = 45000001 ++++ finished: global begin lumi: run = 1 lumi = 3 time = 45000001 ++++ starting: global begin lumi: run = 1 lumi = 3 time = 45000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 1 lumi = 3 time = 45000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 1 lumi = 3 time = 45000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 1 lumi = 3 time = 45000001 ++++ starting: begin lumi: stream = 0 run = 1 lumi = 3 time = 45000001 ++++ finished: begin lumi: stream = 0 run = 1 lumi = 3 time = 45000001 @@ -2181,105 +2137,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 3 event = 9 time = 45000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 3 event = 9 time = 45000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 3 event = 9 time = 45000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 3 event = 9 time = 45000001 ++++ starting: source event @@ -2337,105 +2289,101 @@ ++++ starting: processing event : stream = 0 run = 1 lumi = 3 event = 10 time = 50000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 1 lumi = 3 event = 10 time = 50000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 3 event = 10 time = 50000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 1 lumi = 3 event = 10 time = 50000001 ++++ queuing: EventSetup synchronization run: 1 lumi: 4294967295 event: 18446744073709551615 @@ -2484,56 +2432,56 @@ ++++ starting: global end lumi: run = 1 lumi = 3 time = 45000001 ++++ finished: global end lumi: run = 1 lumi = 3 time = 45000001 ++++ starting: global end lumi: run = 1 lumi = 3 time = 45000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 1 lumi = 3 time = 45000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 1 lumi = 3 time = 45000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 1 lumi = 3 time = 45000001 ++++ starting: global write lumi: run = 1 lumi = 3 time = 45000001 ++++ finished: global write lumi: run = 1 lumi = 3 time = 45000001 @@ -2545,11 +2493,11 @@ ++++ finished: global write lumi: run = 1 lumi = 3 time = 45000001 ++++ starting: global write lumi: run = 1 lumi = 3 time = 45000001 ++++ starting: global write lumi: run = 1 lumi = 3 time = 45000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 1 lumi = 3 time = 45000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 1 lumi = 3 time = 45000001 ++++ queuing: EventSetup synchronization run: 2 lumi: 0 event: 0 ++++ pre: EventSetup synchronizing run: 2 lumi: 0 event: 0 @@ -2597,56 +2545,56 @@ ++++ starting: global end run 1 : time = 0 ++++ finished: global end run 1 : time = 0 ++++ starting: global end run 1 : time = 0 -++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end run 1 : time = 0 -++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 33 -++++++ starting: global end run for module: label = 'testmerge' id = 33 -++++++ finished: global end run for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 32 -++++++ starting: global end run for module: label = 'test' id = 32 -++++++ finished: global end run for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 34 -++++++ starting: global end run for module: label = 'get' id = 34 -++++++ finished: global end run for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 35 -++++++ starting: global end run for module: label = 'getInt' id = 35 -++++++ finished: global end run for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 31 +++++++ starting: global end run for module: label = 'testmerge' id = 31 +++++++ finished: global end run for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 30 +++++++ starting: global end run for module: label = 'test' id = 30 +++++++ finished: global end run for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 32 +++++++ starting: global end run for module: label = 'get' id = 32 +++++++ finished: global end run for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 33 +++++++ starting: global end run for module: label = 'getInt' id = 33 +++++++ finished: global end run for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end run 1 : time = 0 -++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 20 -++++++ starting: global end run for module: label = 'testmerge' id = 20 -++++++ finished: global end run for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 19 -++++++ starting: global end run for module: label = 'test' id = 19 -++++++ finished: global end run for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 21 -++++++ starting: global end run for module: label = 'get' id = 21 -++++++ finished: global end run for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 22 -++++++ starting: global end run for module: label = 'getInt' id = 22 -++++++ finished: global end run for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 19 +++++++ starting: global end run for module: label = 'testmerge' id = 19 +++++++ finished: global end run for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 18 +++++++ starting: global end run for module: label = 'test' id = 18 +++++++ finished: global end run for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 20 +++++++ starting: global end run for module: label = 'get' id = 20 +++++++ finished: global end run for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 21 +++++++ starting: global end run for module: label = 'getInt' id = 21 +++++++ finished: global end run for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end run 1 : time = 0 ++++ starting: global write run 1 : time = 50000001 ++++ finished: global write run 1 : time = 50000001 @@ -2658,11 +2606,11 @@ ++++ finished: global write run 1 : time = 0 ++++ starting: global write run 1 : time = 0 ++++ starting: global write run 1 : time = 0 -++++++ starting: write run for module: label = 'out' id = 37 -++++++ finished: write run for module: label = 'out' id = 37 +++++++ starting: write run for module: label = 'out' id = 35 +++++++ finished: write run for module: label = 'out' id = 35 ++++ finished: global write run 1 : time = 0 -++++++ starting: write run for module: label = 'out' id = 24 -++++++ finished: write run for module: label = 'out' id = 24 +++++++ starting: write run for module: label = 'out' id = 23 +++++++ finished: write run for module: label = 'out' id = 23 ++++ finished: global write run 1 : time = 0 ++++ starting: source run ++++ finished: source run @@ -2691,60 +2639,57 @@ ++++ starting: global begin run 2 : time = 55000001 ++++ finished: global begin run 2 : time = 55000001 ++++ starting: global begin run 2 : time = 55000001 -++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin run 2 : time = 55000001 -++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 32 -++++++ starting: global begin run for module: label = 'test' id = 32 -++++++ finished: global begin run for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 33 -++++++ starting: global begin run for module: label = 'testmerge' id = 33 -++++++ finished: global begin run for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 34 -++++++ starting: global begin run for module: label = 'get' id = 34 -++++++ finished: global begin run for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 35 -++++++ starting: global begin run for module: label = 'getInt' id = 35 -++++++ finished: global begin run for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 30 +++++++ starting: global begin run for module: label = 'test' id = 30 +++++++ finished: global begin run for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 31 +++++++ starting: global begin run for module: label = 'testmerge' id = 31 +++++++ finished: global begin run for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 32 +++++++ starting: global begin run for module: label = 'get' id = 32 +++++++ finished: global begin run for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 33 +++++++ starting: global begin run for module: label = 'getInt' id = 33 +++++++ finished: global begin run for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin run 2 : time = 55000001 -++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 19 -++++++ starting: global begin run for module: label = 'test' id = 19 -++++++ finished: global begin run for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 20 -++++++ starting: global begin run for module: label = 'testmerge' id = 20 -++++++ finished: global begin run for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 21 -++++++ starting: global begin run for module: label = 'get' id = 21 -++++++ finished: global begin run for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 22 -++++++ starting: global begin run for module: label = 'getInt' id = 22 -++++++ finished: global begin run for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 18 +++++++ starting: global begin run for module: label = 'test' id = 18 +++++++ finished: global begin run for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 19 +++++++ starting: global begin run for module: label = 'testmerge' id = 19 +++++++ finished: global begin run for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 20 +++++++ starting: global begin run for module: label = 'get' id = 20 +++++++ finished: global begin run for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 21 +++++++ starting: global begin run for module: label = 'getInt' id = 21 +++++++ finished: global begin run for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin run 2 : time = 55000001 -++++ queuing: EventSetup synchronization run: 2 lumi: 1 event: 0 -++++ pre: EventSetup synchronizing run: 2 lumi: 1 event: 0 -++++ post: EventSetup synchronizing run: 2 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 2 time = 55000001 ++++ finished: begin run: stream = 0 run = 2 time = 55000001 ++++ starting: begin run: stream = 0 run = 2 time = 55000001 @@ -2763,6 +2708,9 @@ ++++ finished: begin run: stream = 0 run = 2 time = 55000001 ++++ starting: begin run: stream = 0 run = 2 time = 55000001 ++++ finished: begin run: stream = 0 run = 2 time = 55000001 +++++ queuing: EventSetup synchronization run: 2 lumi: 1 event: 0 +++++ pre: EventSetup synchronizing run: 2 lumi: 1 event: 0 +++++ post: EventSetup synchronizing run: 2 lumi: 1 event: 0 ++++ starting: source lumi ++++ finished: source lumi ++++ starting: global begin lumi: run = 2 lumi = 1 time = 55000001 @@ -2790,56 +2738,56 @@ ++++ starting: global begin lumi: run = 2 lumi = 1 time = 55000001 ++++ finished: global begin lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: global begin lumi: run = 2 lumi = 1 time = 55000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 2 lumi = 1 time = 55000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 2 lumi = 1 time = 55000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: begin lumi: stream = 0 run = 2 lumi = 1 time = 55000001 ++++ finished: begin lumi: stream = 0 run = 2 lumi = 1 time = 55000001 @@ -2914,105 +2862,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 1 time = 55000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 1 time = 55000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 1 time = 55000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 1 time = 55000001 ++++ starting: source event @@ -3070,105 +3014,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 2 time = 60000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 2 time = 60000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 2 time = 60000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 2 time = 60000001 ++++ starting: source event @@ -3226,105 +3166,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 3 time = 65000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 3 time = 65000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 3 time = 65000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 3 time = 65000001 ++++ starting: source event @@ -3382,105 +3318,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 4 time = 70000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 1 event = 4 time = 70000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 4 time = 70000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 1 event = 4 time = 70000001 ++++ queuing: EventSetup synchronization run: 2 lumi: 2 event: 0 @@ -3529,56 +3461,56 @@ ++++ starting: global end lumi: run = 2 lumi = 1 time = 55000001 ++++ finished: global end lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: global end lumi: run = 2 lumi = 1 time = 55000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 2 lumi = 1 time = 55000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 2 lumi = 1 time = 55000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: global write lumi: run = 2 lumi = 1 time = 55000001 ++++ finished: global write lumi: run = 2 lumi = 1 time = 55000001 @@ -3590,11 +3522,11 @@ ++++ finished: global write lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: global write lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: global write lumi: run = 2 lumi = 1 time = 55000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 2 lumi = 1 time = 55000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 2 lumi = 1 time = 55000001 ++++ starting: source lumi ++++ finished: source lumi @@ -3623,56 +3555,56 @@ ++++ starting: global begin lumi: run = 2 lumi = 2 time = 75000001 ++++ finished: global begin lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: global begin lumi: run = 2 lumi = 2 time = 75000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 2 lumi = 2 time = 75000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 2 lumi = 2 time = 75000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: begin lumi: stream = 0 run = 2 lumi = 2 time = 75000001 ++++ finished: begin lumi: stream = 0 run = 2 lumi = 2 time = 75000001 @@ -3747,105 +3679,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 5 time = 75000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 5 time = 75000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 5 time = 75000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 5 time = 75000001 ++++ starting: source event @@ -3903,105 +3831,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 6 time = 80000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 6 time = 80000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 6 time = 80000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 6 time = 80000001 ++++ starting: source event @@ -4059,105 +3983,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 7 time = 85000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 7 time = 85000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 7 time = 85000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 7 time = 85000001 ++++ starting: source event @@ -4215,105 +4135,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 8 time = 90000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 2 event = 8 time = 90000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 8 time = 90000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 2 event = 8 time = 90000001 ++++ queuing: EventSetup synchronization run: 2 lumi: 3 event: 0 @@ -4362,56 +4278,56 @@ ++++ starting: global end lumi: run = 2 lumi = 2 time = 75000001 ++++ finished: global end lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: global end lumi: run = 2 lumi = 2 time = 75000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 2 lumi = 2 time = 75000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 2 lumi = 2 time = 75000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: global write lumi: run = 2 lumi = 2 time = 75000001 ++++ finished: global write lumi: run = 2 lumi = 2 time = 75000001 @@ -4423,11 +4339,11 @@ ++++ finished: global write lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: global write lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: global write lumi: run = 2 lumi = 2 time = 75000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 2 lumi = 2 time = 75000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 2 lumi = 2 time = 75000001 ++++ starting: source lumi ++++ finished: source lumi @@ -4456,56 +4372,56 @@ ++++ starting: global begin lumi: run = 2 lumi = 3 time = 95000001 ++++ finished: global begin lumi: run = 2 lumi = 3 time = 95000001 ++++ starting: global begin lumi: run = 2 lumi = 3 time = 95000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 2 lumi = 3 time = 95000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 2 lumi = 3 time = 95000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 2 lumi = 3 time = 95000001 ++++ starting: begin lumi: stream = 0 run = 2 lumi = 3 time = 95000001 ++++ finished: begin lumi: stream = 0 run = 2 lumi = 3 time = 95000001 @@ -4580,105 +4496,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 3 event = 9 time = 95000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 3 event = 9 time = 95000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 3 event = 9 time = 95000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 3 event = 9 time = 95000001 ++++ starting: source event @@ -4736,105 +4648,101 @@ ++++ starting: processing event : stream = 0 run = 2 lumi = 3 event = 10 time = 100000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 2 lumi = 3 event = 10 time = 100000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 3 event = 10 time = 100000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 2 lumi = 3 event = 10 time = 100000001 ++++ queuing: EventSetup synchronization run: 2 lumi: 4294967295 event: 18446744073709551615 @@ -4883,56 +4791,56 @@ ++++ starting: global end lumi: run = 2 lumi = 3 time = 95000001 ++++ finished: global end lumi: run = 2 lumi = 3 time = 95000001 ++++ starting: global end lumi: run = 2 lumi = 3 time = 95000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 2 lumi = 3 time = 95000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 2 lumi = 3 time = 95000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 2 lumi = 3 time = 95000001 ++++ starting: global write lumi: run = 2 lumi = 3 time = 95000001 ++++ finished: global write lumi: run = 2 lumi = 3 time = 95000001 @@ -4944,11 +4852,11 @@ ++++ finished: global write lumi: run = 2 lumi = 3 time = 95000001 ++++ starting: global write lumi: run = 2 lumi = 3 time = 95000001 ++++ starting: global write lumi: run = 2 lumi = 3 time = 95000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 2 lumi = 3 time = 95000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 2 lumi = 3 time = 95000001 ++++ queuing: EventSetup synchronization run: 3 lumi: 0 event: 0 ++++ pre: EventSetup synchronizing run: 3 lumi: 0 event: 0 @@ -4996,56 +4904,56 @@ ++++ starting: global end run 2 : time = 0 ++++ finished: global end run 2 : time = 0 ++++ starting: global end run 2 : time = 0 -++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end run 2 : time = 0 -++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 33 -++++++ starting: global end run for module: label = 'testmerge' id = 33 -++++++ finished: global end run for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 32 -++++++ starting: global end run for module: label = 'test' id = 32 -++++++ finished: global end run for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 34 -++++++ starting: global end run for module: label = 'get' id = 34 -++++++ finished: global end run for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 35 -++++++ starting: global end run for module: label = 'getInt' id = 35 -++++++ finished: global end run for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 31 +++++++ starting: global end run for module: label = 'testmerge' id = 31 +++++++ finished: global end run for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 30 +++++++ starting: global end run for module: label = 'test' id = 30 +++++++ finished: global end run for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 32 +++++++ starting: global end run for module: label = 'get' id = 32 +++++++ finished: global end run for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 33 +++++++ starting: global end run for module: label = 'getInt' id = 33 +++++++ finished: global end run for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end run 2 : time = 0 -++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 20 -++++++ starting: global end run for module: label = 'testmerge' id = 20 -++++++ finished: global end run for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 19 -++++++ starting: global end run for module: label = 'test' id = 19 -++++++ finished: global end run for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 21 -++++++ starting: global end run for module: label = 'get' id = 21 -++++++ finished: global end run for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 22 -++++++ starting: global end run for module: label = 'getInt' id = 22 -++++++ finished: global end run for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 19 +++++++ starting: global end run for module: label = 'testmerge' id = 19 +++++++ finished: global end run for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 18 +++++++ starting: global end run for module: label = 'test' id = 18 +++++++ finished: global end run for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 20 +++++++ starting: global end run for module: label = 'get' id = 20 +++++++ finished: global end run for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 21 +++++++ starting: global end run for module: label = 'getInt' id = 21 +++++++ finished: global end run for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end run 2 : time = 0 ++++ starting: global write run 2 : time = 100000001 ++++ finished: global write run 2 : time = 100000001 @@ -5057,11 +4965,11 @@ ++++ finished: global write run 2 : time = 0 ++++ starting: global write run 2 : time = 0 ++++ starting: global write run 2 : time = 0 -++++++ starting: write run for module: label = 'out' id = 37 -++++++ finished: write run for module: label = 'out' id = 37 +++++++ starting: write run for module: label = 'out' id = 35 +++++++ finished: write run for module: label = 'out' id = 35 ++++ finished: global write run 2 : time = 0 -++++++ starting: write run for module: label = 'out' id = 24 -++++++ finished: write run for module: label = 'out' id = 24 +++++++ starting: write run for module: label = 'out' id = 23 +++++++ finished: write run for module: label = 'out' id = 23 ++++ finished: global write run 2 : time = 0 ++++ starting: source run ++++ finished: source run @@ -5090,60 +4998,57 @@ ++++ starting: global begin run 3 : time = 105000001 ++++ finished: global begin run 3 : time = 105000001 ++++ starting: global begin run 3 : time = 105000001 -++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin run 3 : time = 105000001 -++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 32 -++++++ starting: global begin run for module: label = 'test' id = 32 -++++++ finished: global begin run for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 33 -++++++ starting: global begin run for module: label = 'testmerge' id = 33 -++++++ finished: global begin run for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 34 -++++++ starting: global begin run for module: label = 'get' id = 34 -++++++ finished: global begin run for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 35 -++++++ starting: global begin run for module: label = 'getInt' id = 35 -++++++ finished: global begin run for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin Run for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin Run for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin Run for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin Run for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 30 +++++++ starting: global begin run for module: label = 'test' id = 30 +++++++ finished: global begin run for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 31 +++++++ starting: global begin run for module: label = 'testmerge' id = 31 +++++++ finished: global begin run for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 32 +++++++ starting: global begin run for module: label = 'get' id = 32 +++++++ finished: global begin run for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 33 +++++++ starting: global begin run for module: label = 'getInt' id = 33 +++++++ finished: global begin run for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin run 3 : time = 105000001 -++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 19 -++++++ starting: global begin run for module: label = 'test' id = 19 -++++++ finished: global begin run for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 20 -++++++ starting: global begin run for module: label = 'testmerge' id = 20 -++++++ finished: global begin run for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 21 -++++++ starting: global begin run for module: label = 'get' id = 21 -++++++ finished: global begin run for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 22 -++++++ starting: global begin run for module: label = 'getInt' id = 22 -++++++ finished: global begin run for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin Run for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin run for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin run for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin Run for module: label = 'test' id = 18 +++++++ starting: global begin run for module: label = 'test' id = 18 +++++++ finished: global begin run for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin Run for module: label = 'testmerge' id = 19 +++++++ starting: global begin run for module: label = 'testmerge' id = 19 +++++++ finished: global begin run for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin Run for module: label = 'get' id = 20 +++++++ starting: global begin run for module: label = 'get' id = 20 +++++++ finished: global begin run for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin Run for module: label = 'getInt' id = 21 +++++++ starting: global begin run for module: label = 'getInt' id = 21 +++++++ finished: global begin run for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin Run for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin run for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin run for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin run 3 : time = 105000001 -++++ queuing: EventSetup synchronization run: 3 lumi: 1 event: 0 -++++ pre: EventSetup synchronizing run: 3 lumi: 1 event: 0 -++++ post: EventSetup synchronizing run: 3 lumi: 1 event: 0 ++++ starting: begin run: stream = 0 run = 3 time = 105000001 ++++ finished: begin run: stream = 0 run = 3 time = 105000001 ++++ starting: begin run: stream = 0 run = 3 time = 105000001 @@ -5162,6 +5067,9 @@ ++++ finished: begin run: stream = 0 run = 3 time = 105000001 ++++ starting: begin run: stream = 0 run = 3 time = 105000001 ++++ finished: begin run: stream = 0 run = 3 time = 105000001 +++++ queuing: EventSetup synchronization run: 3 lumi: 1 event: 0 +++++ pre: EventSetup synchronizing run: 3 lumi: 1 event: 0 +++++ post: EventSetup synchronizing run: 3 lumi: 1 event: 0 ++++ starting: source lumi ++++ finished: source lumi ++++ starting: global begin lumi: run = 3 lumi = 1 time = 105000001 @@ -5189,56 +5097,56 @@ ++++ starting: global begin lumi: run = 3 lumi = 1 time = 105000001 ++++ finished: global begin lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: global begin lumi: run = 3 lumi = 1 time = 105000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 3 lumi = 1 time = 105000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 3 lumi = 1 time = 105000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: begin lumi: stream = 0 run = 3 lumi = 1 time = 105000001 ++++ finished: begin lumi: stream = 0 run = 3 lumi = 1 time = 105000001 @@ -5313,105 +5221,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 1 time = 105000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 1 time = 105000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 1 time = 105000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 1 time = 105000001 ++++ starting: source event @@ -5469,105 +5373,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 2 time = 110000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 2 time = 110000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 2 time = 110000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 2 time = 110000001 ++++ starting: source event @@ -5625,105 +5525,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 3 time = 115000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 3 time = 115000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 3 time = 115000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 3 time = 115000001 ++++ starting: source event @@ -5781,105 +5677,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 4 time = 120000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 1 event = 4 time = 120000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 4 time = 120000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 1 event = 4 time = 120000001 ++++ queuing: EventSetup synchronization run: 3 lumi: 2 event: 0 @@ -5928,56 +5820,56 @@ ++++ starting: global end lumi: run = 3 lumi = 1 time = 105000001 ++++ finished: global end lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: global end lumi: run = 3 lumi = 1 time = 105000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 3 lumi = 1 time = 105000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 3 lumi = 1 time = 105000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: global write lumi: run = 3 lumi = 1 time = 105000001 ++++ finished: global write lumi: run = 3 lumi = 1 time = 105000001 @@ -5989,11 +5881,11 @@ ++++ finished: global write lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: global write lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: global write lumi: run = 3 lumi = 1 time = 105000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 3 lumi = 1 time = 105000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 3 lumi = 1 time = 105000001 ++++ starting: source lumi ++++ finished: source lumi @@ -6022,56 +5914,56 @@ ++++ starting: global begin lumi: run = 3 lumi = 2 time = 125000001 ++++ finished: global begin lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: global begin lumi: run = 3 lumi = 2 time = 125000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 3 lumi = 2 time = 125000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 3 lumi = 2 time = 125000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: begin lumi: stream = 0 run = 3 lumi = 2 time = 125000001 ++++ finished: begin lumi: stream = 0 run = 3 lumi = 2 time = 125000001 @@ -6146,105 +6038,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 5 time = 125000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 5 time = 125000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 5 time = 125000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 5 time = 125000001 ++++ starting: source event @@ -6302,105 +6190,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 6 time = 130000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 6 time = 130000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 6 time = 130000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 6 time = 130000001 ++++ starting: source event @@ -6458,105 +6342,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 7 time = 135000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 7 time = 135000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 7 time = 135000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 7 time = 135000001 ++++ starting: source event @@ -6614,105 +6494,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 8 time = 140000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 2 event = 8 time = 140000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 8 time = 140000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 2 event = 8 time = 140000001 ++++ queuing: EventSetup synchronization run: 3 lumi: 3 event: 0 @@ -6761,56 +6637,56 @@ ++++ starting: global end lumi: run = 3 lumi = 2 time = 125000001 ++++ finished: global end lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: global end lumi: run = 3 lumi = 2 time = 125000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 3 lumi = 2 time = 125000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 3 lumi = 2 time = 125000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: global write lumi: run = 3 lumi = 2 time = 125000001 ++++ finished: global write lumi: run = 3 lumi = 2 time = 125000001 @@ -6822,11 +6698,11 @@ ++++ finished: global write lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: global write lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: global write lumi: run = 3 lumi = 2 time = 125000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 3 lumi = 2 time = 125000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 3 lumi = 2 time = 125000001 ++++ starting: source lumi ++++ finished: source lumi @@ -6855,56 +6731,56 @@ ++++ starting: global begin lumi: run = 3 lumi = 3 time = 145000001 ++++ finished: global begin lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: global begin lumi: run = 3 lumi = 3 time = 145000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global begin lumi: run = 3 lumi = 3 time = 145000001 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global begin lumi for module: label = 'test' id = 32 -++++++ finished: global begin lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 33 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global begin lumi for module: label = 'get' id = 34 -++++++ finished: global begin lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global begin lumi for module: label = 'getInt' id = 35 -++++++ finished: global begin lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global begin lumi for module: label = 'test' id = 30 +++++++ finished: global begin lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 31 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global begin lumi for module: label = 'get' id = 32 +++++++ finished: global begin lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global begin lumi for module: label = 'getInt' id = 33 +++++++ finished: global begin lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global begin lumi: run = 3 lumi = 3 time = 145000001 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global begin lumi for module: label = 'test' id = 19 -++++++ finished: global begin lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global begin lumi for module: label = 'testmerge' id = 20 -++++++ finished: global begin lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global begin lumi for module: label = 'get' id = 21 -++++++ finished: global begin lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global begin lumi for module: label = 'getInt' id = 22 -++++++ finished: global begin lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global begin lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global begin lumi for module: label = 'test' id = 18 +++++++ finished: global begin lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global begin lumi for module: label = 'testmerge' id = 19 +++++++ finished: global begin lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global begin lumi for module: label = 'get' id = 20 +++++++ finished: global begin lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global begin lumi for module: label = 'getInt' id = 21 +++++++ finished: global begin lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global begin LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global begin lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global begin lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global begin lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: begin lumi: stream = 0 run = 3 lumi = 3 time = 145000001 ++++ finished: begin lumi: stream = 0 run = 3 lumi = 3 time = 145000001 @@ -6979,105 +6855,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 3 event = 9 time = 145000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 3 event = 9 time = 145000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 3 event = 9 time = 145000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 3 event = 9 time = 145000001 ++++ starting: source event @@ -7135,105 +7007,101 @@ ++++ starting: processing event : stream = 0 run = 3 lumi = 3 event = 10 time = 150000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 34 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 32 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 32 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 30 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 ++++ starting: processing event : stream = 0 run = 3 lumi = 3 event = 10 time = 150000001 ++++++ starting: processing path 'endPath1' : stream = 0 ++++++ starting: processing path 'path4' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++ starting: processing path 'path3' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'get' id = 20 ++++++ starting: processing path 'path2' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'test' id = 18 ++++++ starting: processing path 'path1' : stream = 0 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 17 ++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 13 ++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 13 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 19 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 19 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 20 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 18 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 18 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 19 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 19 ++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 14 ++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 14 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 21 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 21 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 22 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 22 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 20 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 20 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 21 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 21 ++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 15 ++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 15 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 16 ++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 16 ++++++ finished: processing path 'path4' : stream = 0 ++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 12 ++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 12 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 24 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 17 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 17 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 23 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 23 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 23 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 3 event = 10 time = 150000001 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 26 -++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 26 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ finished: processing event for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++++++ starting: processing event for module: stream = 0 label = 'path1' id = 25 +++++++++ finished: processing event for module: stream = 0 label = 'path1' id = 25 ++++++ finished: processing path 'path1' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 32 -++++++++ starting: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: processing event for module: stream = 0 label = 'test' id = 32 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 33 -++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 27 -++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 27 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'test' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: processing event for module: stream = 0 label = 'test' id = 30 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ finished: processing event for module: stream = 0 label = 'testmerge' id = 31 +++++++++ starting: processing event for module: stream = 0 label = 'path2' id = 26 +++++++++ finished: processing event for module: stream = 0 label = 'path2' id = 26 ++++++ finished: processing path 'path2' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 34 -++++++++ starting: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: processing event for module: stream = 0 label = 'get' id = 34 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 35 -++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 28 -++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 28 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'get' id = 32 +++++++++ starting: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: processing event for module: stream = 0 label = 'get' id = 32 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ finished: processing event for module: stream = 0 label = 'getInt' id = 33 +++++++++ starting: processing event for module: stream = 0 label = 'path3' id = 27 +++++++++ finished: processing event for module: stream = 0 label = 'path3' id = 27 ++++++ finished: processing path 'path3' : stream = 0 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 29 -++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 29 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ finished: processing event for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++++++ starting: processing event for module: stream = 0 label = 'path4' id = 28 +++++++++ finished: processing event for module: stream = 0 label = 'path4' id = 28 ++++++ finished: processing path 'path4' : stream = 0 -++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 25 -++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ finished: processing event for module: stream = 0 label = 'out' id = 37 -++++++++ starting: processing event for module: stream = 0 label = 'endPath1' id = 30 -++++++++ finished: processing event for module: stream = 0 label = 'endPath1' id = 30 +++++++++ starting: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ finished: processing event for module: stream = 0 label = 'TriggerResults' id = 24 +++++++++ starting: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: prefetching before processing event for module: stream = 0 label = 'out' id = 35 +++++++++ starting: processing event for module: stream = 0 label = 'out' id = 35 +++++++++ finished: processing event for module: stream = 0 label = 'out' id = 35 ++++++ finished: processing path 'endPath1' : stream = 0 ++++ finished: processing event : stream = 0 run = 3 lumi = 3 event = 10 time = 150000001 ++++ queuing: EventSetup synchronization run: 3 lumi: 4294967295 event: 18446744073709551615 @@ -7282,56 +7150,56 @@ ++++ starting: global end lumi: run = 3 lumi = 3 time = 145000001 ++++ finished: global end lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: global end lumi: run = 3 lumi = 3 time = 145000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end lumi: run = 3 lumi = 3 time = 145000001 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 33 -++++++ starting: global end lumi for module: label = 'testmerge' id = 33 -++++++ finished: global end lumi for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 32 -++++++ starting: global end lumi for module: label = 'test' id = 32 -++++++ finished: global end lumi for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 34 -++++++ starting: global end lumi for module: label = 'get' id = 34 -++++++ finished: global end lumi for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 35 -++++++ starting: global end lumi for module: label = 'getInt' id = 35 -++++++ finished: global end lumi for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 31 +++++++ starting: global end lumi for module: label = 'testmerge' id = 31 +++++++ finished: global end lumi for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 30 +++++++ starting: global end lumi for module: label = 'test' id = 30 +++++++ finished: global end lumi for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 32 +++++++ starting: global end lumi for module: label = 'get' id = 32 +++++++ finished: global end lumi for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 33 +++++++ starting: global end lumi for module: label = 'getInt' id = 33 +++++++ finished: global end lumi for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end lumi: run = 3 lumi = 3 time = 145000001 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 20 -++++++ starting: global end lumi for module: label = 'testmerge' id = 20 -++++++ finished: global end lumi for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 19 -++++++ starting: global end lumi for module: label = 'test' id = 19 -++++++ finished: global end lumi for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 21 -++++++ starting: global end lumi for module: label = 'get' id = 21 -++++++ finished: global end lumi for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 22 -++++++ starting: global end lumi for module: label = 'getInt' id = 22 -++++++ finished: global end lumi for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end lumi for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'testmerge' id = 19 +++++++ starting: global end lumi for module: label = 'testmerge' id = 19 +++++++ finished: global end lumi for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'test' id = 18 +++++++ starting: global end lumi for module: label = 'test' id = 18 +++++++ finished: global end lumi for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'get' id = 20 +++++++ starting: global end lumi for module: label = 'get' id = 20 +++++++ finished: global end lumi for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'getInt' id = 21 +++++++ starting: global end lumi for module: label = 'getInt' id = 21 +++++++ finished: global end lumi for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end LuminosityBlock for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end lumi for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end lumi for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: global write lumi: run = 3 lumi = 3 time = 145000001 ++++ finished: global write lumi: run = 3 lumi = 3 time = 145000001 @@ -7343,11 +7211,11 @@ ++++ finished: global write lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: global write lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: global write lumi: run = 3 lumi = 3 time = 145000001 -++++++ starting: write lumi for module: label = 'out' id = 37 -++++++ finished: write lumi for module: label = 'out' id = 37 +++++++ starting: write lumi for module: label = 'out' id = 35 +++++++ finished: write lumi for module: label = 'out' id = 35 ++++ finished: global write lumi: run = 3 lumi = 3 time = 145000001 -++++++ starting: write lumi for module: label = 'out' id = 24 -++++++ finished: write lumi for module: label = 'out' id = 24 +++++++ starting: write lumi for module: label = 'out' id = 23 +++++++ finished: write lumi for module: label = 'out' id = 23 ++++ finished: global write lumi: run = 3 lumi = 3 time = 145000001 ++++ starting: end run: stream = 0 run = 3 time = 150000001 ++++ finished: end run: stream = 0 run = 3 time = 150000001 @@ -7392,56 +7260,56 @@ ++++ starting: global end run 3 : time = 0 ++++ finished: global end run 3 : time = 0 ++++ starting: global end run 3 : time = 0 -++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 23 -++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 22 -++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 21 -++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 20 -++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 19 -++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 18 +++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 22 +++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 21 +++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 20 +++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 19 +++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 18 +++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 17 ++++ starting: global end run 3 : time = 0 -++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 36 -++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 35 -++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 34 -++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 33 -++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 32 -++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 31 -++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 31 -++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 31 -++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 33 -++++++ starting: global end run for module: label = 'testmerge' id = 33 -++++++ finished: global end run for module: label = 'testmerge' id = 33 -++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 32 -++++++ starting: global end run for module: label = 'test' id = 32 -++++++ finished: global end run for module: label = 'test' id = 32 -++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 34 -++++++ starting: global end run for module: label = 'get' id = 34 -++++++ finished: global end run for module: label = 'get' id = 34 -++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 35 -++++++ starting: global end run for module: label = 'getInt' id = 35 -++++++ finished: global end run for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 36 -++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 36 -++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 36 +++++++++ starting: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 34 +++++++++ starting: prefetching before processing global end Run for module: label = 'getInt' id = 33 +++++++++ starting: prefetching before processing global end Run for module: label = 'get' id = 32 +++++++++ starting: prefetching before processing global end Run for module: label = 'testmerge' id = 31 +++++++++ starting: prefetching before processing global end Run for module: label = 'test' id = 30 +++++++++ starting: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 29 +++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 29 +++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 29 +++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 31 +++++++ starting: global end run for module: label = 'testmerge' id = 31 +++++++ finished: global end run for module: label = 'testmerge' id = 31 +++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 30 +++++++ starting: global end run for module: label = 'test' id = 30 +++++++ finished: global end run for module: label = 'test' id = 30 +++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 32 +++++++ starting: global end run for module: label = 'get' id = 32 +++++++ finished: global end run for module: label = 'get' id = 32 +++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 33 +++++++ starting: global end run for module: label = 'getInt' id = 33 +++++++ finished: global end run for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 34 +++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 34 +++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 34 ++++ finished: global end run 3 : time = 0 -++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 18 -++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 18 -++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 18 -++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 20 -++++++ starting: global end run for module: label = 'testmerge' id = 20 -++++++ finished: global end run for module: label = 'testmerge' id = 20 -++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 19 -++++++ starting: global end run for module: label = 'test' id = 19 -++++++ finished: global end run for module: label = 'test' id = 19 -++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 21 -++++++ starting: global end run for module: label = 'get' id = 21 -++++++ finished: global end run for module: label = 'get' id = 21 -++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 22 -++++++ starting: global end run for module: label = 'getInt' id = 22 -++++++ finished: global end run for module: label = 'getInt' id = 22 -++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 23 -++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 23 -++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 23 +++++++++ finished: prefetching before processing global end Run for module: label = 'thingWithMergeProducer' id = 17 +++++++ starting: global end run for module: label = 'thingWithMergeProducer' id = 17 +++++++ finished: global end run for module: label = 'thingWithMergeProducer' id = 17 +++++++++ finished: prefetching before processing global end Run for module: label = 'testmerge' id = 19 +++++++ starting: global end run for module: label = 'testmerge' id = 19 +++++++ finished: global end run for module: label = 'testmerge' id = 19 +++++++++ finished: prefetching before processing global end Run for module: label = 'test' id = 18 +++++++ starting: global end run for module: label = 'test' id = 18 +++++++ finished: global end run for module: label = 'test' id = 18 +++++++++ finished: prefetching before processing global end Run for module: label = 'get' id = 20 +++++++ starting: global end run for module: label = 'get' id = 20 +++++++ finished: global end run for module: label = 'get' id = 20 +++++++++ finished: prefetching before processing global end Run for module: label = 'getInt' id = 21 +++++++ starting: global end run for module: label = 'getInt' id = 21 +++++++ finished: global end run for module: label = 'getInt' id = 21 +++++++++ finished: prefetching before processing global end Run for module: label = 'dependsOnNoPut' id = 22 +++++++ starting: global end run for module: label = 'dependsOnNoPut' id = 22 +++++++ finished: global end run for module: label = 'dependsOnNoPut' id = 22 ++++ finished: global end run 3 : time = 0 ++++ starting: global write run 3 : time = 150000001 ++++ finished: global write run 3 : time = 150000001 @@ -7453,11 +7321,11 @@ ++++ finished: global write run 3 : time = 0 ++++ starting: global write run 3 : time = 0 ++++ starting: global write run 3 : time = 0 -++++++ starting: write run for module: label = 'out' id = 37 -++++++ finished: write run for module: label = 'out' id = 37 +++++++ starting: write run for module: label = 'out' id = 35 +++++++ finished: write run for module: label = 'out' id = 35 ++++ finished: global write run 3 : time = 0 -++++++ starting: write run for module: label = 'out' id = 24 -++++++ finished: write run for module: label = 'out' id = 24 +++++++ starting: write run for module: label = 'out' id = 23 +++++++ finished: write run for module: label = 'out' id = 23 ++++ finished: global write run 3 : time = 0 ++++ starting: end process block ++++ finished: end process block @@ -7472,16 +7340,16 @@ ++++ starting: end process block ++++ finished: end process block ++++ starting: end process block -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 22 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 21 ++++ starting: end process block -++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 35 -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 35 -++++++ starting: end process block for module: label = 'getInt' id = 35 -++++++ finished: end process block for module: label = 'getInt' id = 35 +++++++++ starting: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 33 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 33 +++++++ starting: end process block for module: label = 'getInt' id = 33 +++++++ finished: end process block for module: label = 'getInt' id = 33 ++++ finished: end process block -++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 22 -++++++ starting: end process block for module: label = 'getInt' id = 22 -++++++ finished: end process block for module: label = 'getInt' id = 22 +++++++++ finished: prefetching before processing end ProcessBlock for module: label = 'getInt' id = 21 +++++++ starting: end process block for module: label = 'getInt' id = 21 +++++++ finished: end process block for module: label = 'getInt' id = 21 ++++ finished: end process block ++++ starting: write process block ++++ finished: write process block @@ -7493,11 +7361,11 @@ ++++ finished: write process block ++++ starting: write process block ++++ starting: write process block -++++++ starting: write process block for module: label = 'out' id = 37 -++++++ finished: write process block for module: label = 'out' id = 37 +++++++ starting: write process block for module: label = 'out' id = 35 +++++++ finished: write process block for module: label = 'out' id = 35 ++++ finished: write process block -++++++ starting: write process block for module: label = 'out' id = 24 -++++++ finished: write process block for module: label = 'out' id = 24 +++++++ starting: write process block for module: label = 'out' id = 23 +++++++ finished: write process block for module: label = 'out' id = 23 ++++ finished: write process block ++++ starting: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 5 ++++ finished: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 5 @@ -7521,22 +7389,22 @@ ++++ finished: end stream for module: stream = 0 label = 'path1' id = 3 ++++ starting: end stream for module: stream = 0 label = 'path2' id = 4 ++++ finished: end stream for module: stream = 0 label = 'path2' id = 4 -++++ starting: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++ finished: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 18 -++++ starting: end stream for module: stream = 0 label = 'test' id = 19 -++++ finished: end stream for module: stream = 0 label = 'test' id = 19 -++++ starting: end stream for module: stream = 0 label = 'testmerge' id = 20 -++++ finished: end stream for module: stream = 0 label = 'testmerge' id = 20 -++++ starting: end stream for module: stream = 0 label = 'get' id = 21 -++++ finished: end stream for module: stream = 0 label = 'get' id = 21 -++++ starting: end stream for module: stream = 0 label = 'getInt' id = 22 -++++ finished: end stream for module: stream = 0 label = 'getInt' id = 22 -++++ starting: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 23 -++++ finished: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 23 +++++ starting: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++ finished: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 17 +++++ starting: end stream for module: stream = 0 label = 'test' id = 18 +++++ finished: end stream for module: stream = 0 label = 'test' id = 18 +++++ starting: end stream for module: stream = 0 label = 'testmerge' id = 19 +++++ finished: end stream for module: stream = 0 label = 'testmerge' id = 19 +++++ starting: end stream for module: stream = 0 label = 'get' id = 20 +++++ finished: end stream for module: stream = 0 label = 'get' id = 20 +++++ starting: end stream for module: stream = 0 label = 'getInt' id = 21 +++++ finished: end stream for module: stream = 0 label = 'getInt' id = 21 +++++ starting: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 22 +++++ finished: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 22 ++++ starting: end stream for module: stream = 0 label = 'TriggerResults' id = 12 ++++ finished: end stream for module: stream = 0 label = 'TriggerResults' id = 12 -++++ starting: end stream for module: stream = 0 label = 'out' id = 24 -++++ finished: end stream for module: stream = 0 label = 'out' id = 24 +++++ starting: end stream for module: stream = 0 label = 'out' id = 23 +++++ finished: end stream for module: stream = 0 label = 'out' id = 23 ++++ starting: end stream for module: stream = 0 label = 'path1' id = 13 ++++ finished: end stream for module: stream = 0 label = 'path1' id = 13 ++++ starting: end stream for module: stream = 0 label = 'path2' id = 14 @@ -7545,34 +7413,30 @@ ++++ finished: end stream for module: stream = 0 label = 'path3' id = 15 ++++ starting: end stream for module: stream = 0 label = 'path4' id = 16 ++++ finished: end stream for module: stream = 0 label = 'path4' id = 16 -++++ starting: end stream for module: stream = 0 label = 'endPath1' id = 17 -++++ finished: end stream for module: stream = 0 label = 'endPath1' id = 17 -++++ starting: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++ finished: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 31 -++++ starting: end stream for module: stream = 0 label = 'test' id = 32 -++++ finished: end stream for module: stream = 0 label = 'test' id = 32 -++++ starting: end stream for module: stream = 0 label = 'testmerge' id = 33 -++++ finished: end stream for module: stream = 0 label = 'testmerge' id = 33 -++++ starting: end stream for module: stream = 0 label = 'get' id = 34 -++++ finished: end stream for module: stream = 0 label = 'get' id = 34 -++++ starting: end stream for module: stream = 0 label = 'getInt' id = 35 -++++ finished: end stream for module: stream = 0 label = 'getInt' id = 35 -++++ starting: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++ finished: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 36 -++++ starting: end stream for module: stream = 0 label = 'TriggerResults' id = 25 -++++ finished: end stream for module: stream = 0 label = 'TriggerResults' id = 25 -++++ starting: end stream for module: stream = 0 label = 'out' id = 37 -++++ finished: end stream for module: stream = 0 label = 'out' id = 37 -++++ starting: end stream for module: stream = 0 label = 'path1' id = 26 -++++ finished: end stream for module: stream = 0 label = 'path1' id = 26 -++++ starting: end stream for module: stream = 0 label = 'path2' id = 27 -++++ finished: end stream for module: stream = 0 label = 'path2' id = 27 -++++ starting: end stream for module: stream = 0 label = 'path3' id = 28 -++++ finished: end stream for module: stream = 0 label = 'path3' id = 28 -++++ starting: end stream for module: stream = 0 label = 'path4' id = 29 -++++ finished: end stream for module: stream = 0 label = 'path4' id = 29 -++++ starting: end stream for module: stream = 0 label = 'endPath1' id = 30 -++++ finished: end stream for module: stream = 0 label = 'endPath1' id = 30 +++++ starting: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++ finished: end stream for module: stream = 0 label = 'thingWithMergeProducer' id = 29 +++++ starting: end stream for module: stream = 0 label = 'test' id = 30 +++++ finished: end stream for module: stream = 0 label = 'test' id = 30 +++++ starting: end stream for module: stream = 0 label = 'testmerge' id = 31 +++++ finished: end stream for module: stream = 0 label = 'testmerge' id = 31 +++++ starting: end stream for module: stream = 0 label = 'get' id = 32 +++++ finished: end stream for module: stream = 0 label = 'get' id = 32 +++++ starting: end stream for module: stream = 0 label = 'getInt' id = 33 +++++ finished: end stream for module: stream = 0 label = 'getInt' id = 33 +++++ starting: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++ finished: end stream for module: stream = 0 label = 'dependsOnNoPut' id = 34 +++++ starting: end stream for module: stream = 0 label = 'TriggerResults' id = 24 +++++ finished: end stream for module: stream = 0 label = 'TriggerResults' id = 24 +++++ starting: end stream for module: stream = 0 label = 'out' id = 35 +++++ finished: end stream for module: stream = 0 label = 'out' id = 35 +++++ starting: end stream for module: stream = 0 label = 'path1' id = 25 +++++ finished: end stream for module: stream = 0 label = 'path1' id = 25 +++++ starting: end stream for module: stream = 0 label = 'path2' id = 26 +++++ finished: end stream for module: stream = 0 label = 'path2' id = 26 +++++ starting: end stream for module: stream = 0 label = 'path3' id = 27 +++++ finished: end stream for module: stream = 0 label = 'path3' id = 27 +++++ starting: end stream for module: stream = 0 label = 'path4' id = 28 +++++ finished: end stream for module: stream = 0 label = 'path4' id = 28 ++++ starting: end job for module with label 'thingWithMergeProducer' id = 5 ++++ finished: end job for module with label 'thingWithMergeProducer' id = 5 ++++ starting: end job for module with label 'get' id = 6 @@ -7595,20 +7459,20 @@ ++++ finished: end job for module with label 'path1' id = 3 ++++ starting: end job for module with label 'path2' id = 4 ++++ finished: end job for module with label 'path2' id = 4 -++++ starting: end job for module with label 'thingWithMergeProducer' id = 18 -++++ finished: end job for module with label 'thingWithMergeProducer' id = 18 -++++ starting: end job for module with label 'test' id = 19 -++++ finished: end job for module with label 'test' id = 19 -++++ starting: end job for module with label 'testmerge' id = 20 -++++ finished: end job for module with label 'testmerge' id = 20 -++++ starting: end job for module with label 'get' id = 21 -++++ finished: end job for module with label 'get' id = 21 -++++ starting: end job for module with label 'getInt' id = 22 -++++ finished: end job for module with label 'getInt' id = 22 -++++ starting: end job for module with label 'dependsOnNoPut' id = 23 -++++ finished: end job for module with label 'dependsOnNoPut' id = 23 -++++ starting: end job for module with label 'out' id = 24 -++++ finished: end job for module with label 'out' id = 24 +++++ starting: end job for module with label 'thingWithMergeProducer' id = 17 +++++ finished: end job for module with label 'thingWithMergeProducer' id = 17 +++++ starting: end job for module with label 'test' id = 18 +++++ finished: end job for module with label 'test' id = 18 +++++ starting: end job for module with label 'testmerge' id = 19 +++++ finished: end job for module with label 'testmerge' id = 19 +++++ starting: end job for module with label 'get' id = 20 +++++ finished: end job for module with label 'get' id = 20 +++++ starting: end job for module with label 'getInt' id = 21 +++++ finished: end job for module with label 'getInt' id = 21 +++++ starting: end job for module with label 'dependsOnNoPut' id = 22 +++++ finished: end job for module with label 'dependsOnNoPut' id = 22 +++++ starting: end job for module with label 'out' id = 23 +++++ finished: end job for module with label 'out' id = 23 ++++ starting: end job for module with label 'TriggerResults' id = 12 ++++ finished: end job for module with label 'TriggerResults' id = 12 ++++ starting: end job for module with label 'path1' id = 13 @@ -7619,32 +7483,28 @@ ++++ finished: end job for module with label 'path3' id = 15 ++++ starting: end job for module with label 'path4' id = 16 ++++ finished: end job for module with label 'path4' id = 16 -++++ starting: end job for module with label 'endPath1' id = 17 -++++ finished: end job for module with label 'endPath1' id = 17 -++++ starting: end job for module with label 'thingWithMergeProducer' id = 31 -++++ finished: end job for module with label 'thingWithMergeProducer' id = 31 -++++ starting: end job for module with label 'test' id = 32 -++++ finished: end job for module with label 'test' id = 32 -++++ starting: end job for module with label 'testmerge' id = 33 -++++ finished: end job for module with label 'testmerge' id = 33 -++++ starting: end job for module with label 'get' id = 34 -++++ finished: end job for module with label 'get' id = 34 -++++ starting: end job for module with label 'getInt' id = 35 -++++ finished: end job for module with label 'getInt' id = 35 -++++ starting: end job for module with label 'dependsOnNoPut' id = 36 -++++ finished: end job for module with label 'dependsOnNoPut' id = 36 -++++ starting: end job for module with label 'out' id = 37 -++++ finished: end job for module with label 'out' id = 37 -++++ starting: end job for module with label 'TriggerResults' id = 25 -++++ finished: end job for module with label 'TriggerResults' id = 25 -++++ starting: end job for module with label 'path1' id = 26 -++++ finished: end job for module with label 'path1' id = 26 -++++ starting: end job for module with label 'path2' id = 27 -++++ finished: end job for module with label 'path2' id = 27 -++++ starting: end job for module with label 'path3' id = 28 -++++ finished: end job for module with label 'path3' id = 28 -++++ starting: end job for module with label 'path4' id = 29 -++++ finished: end job for module with label 'path4' id = 29 -++++ starting: end job for module with label 'endPath1' id = 30 -++++ finished: end job for module with label 'endPath1' id = 30 +++++ starting: end job for module with label 'thingWithMergeProducer' id = 29 +++++ finished: end job for module with label 'thingWithMergeProducer' id = 29 +++++ starting: end job for module with label 'test' id = 30 +++++ finished: end job for module with label 'test' id = 30 +++++ starting: end job for module with label 'testmerge' id = 31 +++++ finished: end job for module with label 'testmerge' id = 31 +++++ starting: end job for module with label 'get' id = 32 +++++ finished: end job for module with label 'get' id = 32 +++++ starting: end job for module with label 'getInt' id = 33 +++++ finished: end job for module with label 'getInt' id = 33 +++++ starting: end job for module with label 'dependsOnNoPut' id = 34 +++++ finished: end job for module with label 'dependsOnNoPut' id = 34 +++++ starting: end job for module with label 'out' id = 35 +++++ finished: end job for module with label 'out' id = 35 +++++ starting: end job for module with label 'TriggerResults' id = 24 +++++ finished: end job for module with label 'TriggerResults' id = 24 +++++ starting: end job for module with label 'path1' id = 25 +++++ finished: end job for module with label 'path1' id = 25 +++++ starting: end job for module with label 'path2' id = 26 +++++ finished: end job for module with label 'path2' id = 26 +++++ starting: end job for module with label 'path3' id = 27 +++++ finished: end job for module with label 'path3' id = 27 +++++ starting: end job for module with label 'path4' id = 28 +++++ finished: end job for module with label 'path4' id = 28 ++ finished: end job diff --git a/FWCore/Integration/test/useEmptyRootFile.py b/FWCore/Integration/test/useEmptyRootFile.py new file mode 100644 index 0000000000000..849358efa7926 --- /dev/null +++ b/FWCore/Integration/test/useEmptyRootFile.py @@ -0,0 +1,11 @@ +import FWCore.ParameterSet.Config as cms + +process = cms.Process("READ") + +process.source = cms.Source("PoolSource", fileNames = cms.untracked.vstring("file:empty.root")) + +process.Thing = cms.EDProducer("ThingProducer") + +process.OtherThing = cms.EDProducer("OtherThingProducer") + +process.p = cms.Path(process.Thing * process.OtherThing) diff --git a/FWCore/Modules/src/EventContentAnalyzer.cc b/FWCore/Modules/src/EventContentAnalyzer.cc index af5acd0136133..5d4d01454f471 100644 --- a/FWCore/Modules/src/EventContentAnalyzer.cc +++ b/FWCore/Modules/src/EventContentAnalyzer.cc @@ -278,21 +278,23 @@ namespace edm { std::map cumulates_; bool listContent_; bool listProvenance_; + bool listPathStatus_; }; // // constructors and destructor // EventContentAnalyzer::EventContentAnalyzer(ParameterSet const& iConfig) - : indentation_(iConfig.getUntrackedParameter("indentation", std::string("++"))), - verboseIndentation_(iConfig.getUntrackedParameter("verboseIndentation", std::string(" "))), - moduleLabels_(iConfig.getUntrackedParameter("verboseForModuleLabels", std::vector())), - verbose_(iConfig.getUntrackedParameter("verbose", false) || !moduleLabels_.empty()), - getModuleLabels_(iConfig.getUntrackedParameter("getDataForModuleLabels", std::vector())), - getData_(iConfig.getUntrackedParameter("getData", false) || !getModuleLabels_.empty()), + : indentation_(iConfig.getUntrackedParameter("indentation")), + verboseIndentation_(iConfig.getUntrackedParameter("verboseIndentation")), + moduleLabels_(iConfig.getUntrackedParameter>("verboseForModuleLabels")), + verbose_(iConfig.getUntrackedParameter("verbose") || !moduleLabels_.empty()), + getModuleLabels_(iConfig.getUntrackedParameter>("getDataForModuleLabels")), + getData_(iConfig.getUntrackedParameter("getData") || !getModuleLabels_.empty()), evno_(1), - listContent_(iConfig.getUntrackedParameter("listContent", true)), - listProvenance_(iConfig.getUntrackedParameter("listProvenance", false)) { + listContent_(iConfig.getUntrackedParameter("listContent")), + listProvenance_(iConfig.getUntrackedParameter("listProvenance")), + listPathStatus_(iConfig.getUntrackedParameter("listPathStatus")) { //now do what ever initialization is needed sort_all(moduleLabels_); sort_all(getModuleLabels_); @@ -347,7 +349,7 @@ namespace edm { std::string const& className = provenance->className(); const std::string kPathStatus("edm::PathStatus"); const std::string kEndPathStatus("edm::EndPathStatus"); - if (className == kPathStatus || className == kEndPathStatus) { + if (not listPathStatus_ and (className == kPathStatus || className == kEndPathStatus)) { continue; } std::string const& friendlyName = provenance->friendlyClassName(); @@ -448,36 +450,39 @@ namespace edm { ParameterDescriptionNode* np; std::string defaultString("++"); - np = desc.addOptionalUntracked("indentation", defaultString); + np = desc.addUntracked("indentation", defaultString); np->setComment("This string is printed at the beginning of every line printed during event processing."); - np = desc.addOptionalUntracked("verbose", false); + np = desc.addUntracked("verbose", false); np->setComment("If true, the contents of products are printed."); defaultString = " "; - np = desc.addOptionalUntracked("verboseIndentation", defaultString); + np = desc.addUntracked("verboseIndentation", defaultString); np->setComment( "This string is used to further indent lines when printing the contents of products in verbose mode."); std::vector defaultVString; - np = desc.addOptionalUntracked >("verboseForModuleLabels", defaultVString); + np = desc.addUntracked>("verboseForModuleLabels", defaultVString); np->setComment("If this vector is not empty, then only products with module labels on this list are printed."); - np = desc.addOptionalUntracked("getData", false); + np = desc.addUntracked("getData", false); np->setComment("If true the products will be retrieved using getByLabel."); - np = desc.addOptionalUntracked >("getDataForModuleLabels", defaultVString); + np = desc.addUntracked>("getDataForModuleLabels", defaultVString); np->setComment( "If this vector is not empty, then only products with module labels on this list are retrieved by getByLabel."); - np = desc.addOptionalUntracked("listContent", true); + np = desc.addUntracked("listContent", true); np->setComment("If true then print a list of all the event content."); - np = desc.addOptionalUntracked("listProvenance", false); + np = desc.addUntracked("listProvenance", false); np->setComment("If true, and if listContent or verbose is true, print provenance information for each product"); + desc.addUntracked("listPathStatus", false) + ->setComment("If true, also show PathStatus/EndPathStatus data products."); descriptions.add("printContent", desc); + descriptions.addDefault(desc); } } // namespace edm diff --git a/FWCore/Modules/src/LogErrorFilter.cc b/FWCore/Modules/src/LogErrorFilter.cc index ddeafbc807fb3..04c9e76e84669 100644 --- a/FWCore/Modules/src/LogErrorFilter.cc +++ b/FWCore/Modules/src/LogErrorFilter.cc @@ -32,7 +32,7 @@ // class declaration // -class LogErrorFilter : public edm::stream::EDFilter<> { +class LogErrorFilter : public edm::stream::EDFilter { public: explicit LogErrorFilter(edm::ParameterSet const&); ~LogErrorFilter() override; diff --git a/FWCore/Modules/src/TestSource.cc b/FWCore/Modules/src/TestSource.cc index fa9378a4ff507..f0fe9d1ce9e40 100644 --- a/FWCore/Modules/src/TestSource.cc +++ b/FWCore/Modules/src/TestSource.cc @@ -15,7 +15,7 @@ namespace edm { static void fillDescriptions(ConfigurationDescriptions& descriptions); private: - ItemType getNextItemType() final; + ItemTypeInfo getNextItemType() final; std::shared_ptr readRunAuxiliary_() final; std::shared_ptr readLuminosityBlockAuxiliary_() final; void readEvent_(EventPrincipal& eventPrincipal) final; @@ -36,32 +36,32 @@ namespace edm { TestSource::ItemType TestSource::stringToType(const std::string& iTrans) { if (iTrans == "IsStop") { - return IsStop; + return ItemType::IsStop; } if (iTrans == "IsFile") { - return IsFile; + return ItemType::IsFile; } if (iTrans == "IsRun") { - return IsRun; + return ItemType::IsRun; } if (iTrans == "IsLumi") { - return IsLumi; + return ItemType::IsLumi; } if (iTrans == "IsEvent") { - return IsEvent; + return ItemType::IsEvent; } if (iTrans == "IsSynchronize") { - return IsSynchronize; + return ItemType::IsSynchronize; } throw edm::Exception(errors::Configuration) << "Unknown transition type \'" << iTrans << "\'"; - return IsInvalid; + return ItemType::IsInvalid; } - TestSource::ItemType TestSource::getNextItemType() { + TestSource::ItemTypeInfo TestSource::getNextItemType() { if (m_nextTransition == m_transitions.end()) { - return IsStop; + return ItemType::IsStop; } auto trans = m_nextTransition->first; ++m_nextTransition; diff --git a/FWCore/Services/plugins/InitRootHandlers.cc b/FWCore/Services/plugins/InitRootHandlers.cc index a186ae6cb3e92..dee198b3fe7af 100644 --- a/FWCore/Services/plugins/InitRootHandlers.cc +++ b/FWCore/Services/plugins/InitRootHandlers.cc @@ -186,9 +186,11 @@ namespace { "Inverter::Dinv", "RTaskArenaWrapper"}}; - constexpr std::array in_message_print_error{{"number of iterations was insufficient", - "bad integrand behavior", - "integral is divergent, or slowly convergent"}}; + constexpr std::array in_message_print_error{ + {"number of iterations was insufficient", + "bad integrand behavior", + "integral is divergent, or slowly convergent", + "VariableMetricBuilder Initial matrix not pos.def."}}; void RootErrorHandlerImpl(int level, char const* location, char const* message) { bool die = false; diff --git a/FWCore/Sources/interface/IDGeneratorSourceBase.h b/FWCore/Sources/interface/IDGeneratorSourceBase.h index eda1db16a3fa4..947327b8efa1b 100644 --- a/FWCore/Sources/interface/IDGeneratorSourceBase.h +++ b/FWCore/Sources/interface/IDGeneratorSourceBase.h @@ -66,7 +66,7 @@ namespace edm { } private: - typename BASE::ItemType getNextItemType() final; + typename BASE::ItemTypeInfo getNextItemType() final; virtual void initialize(EventID& id, TimeValue_t& time, TimeValue_t& interval); virtual bool setRunAndEventInfo(EventID& id, TimeValue_t& time, EventAuxiliary::ExperimentType& etype) = 0; virtual bool noFiles() const; diff --git a/FWCore/Sources/interface/RawInputSource.h b/FWCore/Sources/interface/RawInputSource.h index 27ef1f5bfce97..7c387a4223b19 100644 --- a/FWCore/Sources/interface/RawInputSource.h +++ b/FWCore/Sources/interface/RawInputSource.h @@ -35,7 +35,7 @@ namespace edm { std::shared_ptr readRunAuxiliary_() override; virtual void reset_(); void rewind_() override; - ItemType getNextItemType() override; + ItemTypeInfo getNextItemType() override; void closeFile_() final; std::shared_ptr readFile_() final; virtual void genuineCloseFile() {} diff --git a/FWCore/Sources/src/IDGeneratorSourceBase.cc b/FWCore/Sources/src/IDGeneratorSourceBase.cc index 10b871509fabc..a5f20ab22320c 100644 --- a/FWCore/Sources/src/IDGeneratorSourceBase.cc +++ b/FWCore/Sources/src/IDGeneratorSourceBase.cc @@ -133,18 +133,18 @@ namespace edm { } template - typename BASE::ItemType IDGeneratorSourceBase::getNextItemType() { - if (BASE::state() == BASE::IsInvalid) { - return noFiles() ? BASE::IsStop : BASE::IsFile; + typename BASE::ItemTypeInfo IDGeneratorSourceBase::getNextItemType() { + if (BASE::state() == BASE::ItemType::IsInvalid) { + return noFiles() ? BASE::ItemType::IsStop : BASE::ItemType::IsFile; } if (BASE::newRun()) { - return BASE::IsRun; + return BASE::ItemType::IsRun; } if (BASE::newLumi()) { - return BASE::IsLumi; + return BASE::ItemType::IsLumi; } if (BASE::eventCached()) { - return BASE::IsEvent; + return BASE::ItemType::IsEvent; } EventID oldEventID = eventID_; advanceToNext(eventID_, presentTime_); @@ -154,7 +154,7 @@ namespace edm { size_t index = fileIndex(); bool another = setRunAndEventInfo(eventID_, presentTime_, eType_); if (!another) { - return BASE::IsStop; + return BASE::ItemType::IsStop; } bool newFile = (fileIndex() > index); BASE::setEventCached(); @@ -162,15 +162,15 @@ namespace edm { // New Run BASE::setNewRun(); BASE::setNewLumi(); - return newFile ? BASE::IsFile : BASE::IsRun; + return newFile ? BASE::ItemType::IsFile : BASE::ItemType::IsRun; } // Same Run if (BASE::newLumi() || eventID_.luminosityBlock() != oldEventID.luminosityBlock()) { // New Lumi BASE::setNewLumi(); - return newFile ? BASE::IsFile : BASE::IsLumi; + return newFile ? BASE::ItemType::IsFile : BASE::ItemType::IsLumi; } - return newFile ? BASE::IsFile : BASE::IsEvent; + return newFile ? BASE::ItemType::IsFile : BASE::ItemType::IsEvent; } template diff --git a/FWCore/Sources/src/RawInputSource.cc b/FWCore/Sources/src/RawInputSource.cc index 8d246863a0b3a..ba900c8127097 100644 --- a/FWCore/Sources/src/RawInputSource.cc +++ b/FWCore/Sources/src/RawInputSource.cc @@ -53,18 +53,18 @@ namespace edm { eventPrincipal.fillEventPrincipal(eventAuxiliary, history); } - InputSource::ItemType RawInputSource::getNextItemType() { - if (state() == IsInvalid) { - return IsFile; + InputSource::ItemTypeInfo RawInputSource::getNextItemType() { + if (state() == ItemType::IsInvalid) { + return ItemType::IsFile; } if (newRun() && runAuxiliary()) { - return IsRun; + return ItemType::IsRun; } if (newLumi() && luminosityBlockAuxiliary()) { - return IsLumi; + return ItemType::IsLumi; } if (eventCached()) { - return IsEvent; + return ItemType::IsEvent; } if (inputFileTransitionsEachEvent_) { // The following two lines are here because after a source @@ -76,22 +76,22 @@ namespace edm { } Next another = checkNext(); if (another == Next::kStop) { - return IsStop; + return ItemType::IsStop; } else if (another == Next::kEvent and inputFileTransitionsEachEvent_) { fakeInputFileTransition_ = true; - return IsFile; + return ItemType::IsFile; } else if (another == Next::kFile) { setNewRun(); setNewLumi(); resetEventCached(); - return IsFile; + return ItemType::IsFile; } if (newRun()) { - return IsRun; + return ItemType::IsRun; } else if (newLumi()) { - return IsLumi; + return ItemType::IsLumi; } - return IsEvent; + return ItemType::IsEvent; } void RawInputSource::reset_() { diff --git a/FWCore/Utilities/interface/Exception.h b/FWCore/Utilities/interface/Exception.h index 6cc888a4a348c..4a3d0b68aee90 100644 --- a/FWCore/Utilities/interface/Exception.h +++ b/FWCore/Utilities/interface/Exception.h @@ -45,26 +45,14 @@ namespace cms { + class Exception; namespace detail { - // The struct template Desired exists in order to allow us to use - // SFINAE to control the instantiation of the stream insertion + // Used for SFINAE to control the instantiation of the stream insertion // member template needed to support streaming output to an object // of type cms::Exception, or a subclass of cms::Exception. - - template - struct Desired; - template - struct Desired { - typedef T type; - }; - - // The following struct template is a metafunction which combines - // two of the boost type_traits metafunctions. - - template - struct is_derived_or_same { - static bool const value = std::is_base_of::value || std::is_same::value; - }; + template + using exception_type = + std::enable_if_t>, std::remove_reference_t>; } // namespace detail @@ -129,48 +117,14 @@ namespace cms { // classes. // - // We have provided versions of these templates which accept, and - // return, reference-to-const objects of type E. These are needed - // so that the expression: - // - // throw Exception("category") << "some message"; - // - // shall compile. The technical reason is that the un-named - // temporary created by the explicit call to the constructor - // allows only const access, except by member functions. It seems - // extremely unlikely that any Exception object will be created in - // read-only memory; thus it seems unlikely that allowing the - // stream operators to write into a nominally 'const' Exception - // object is a real danger. - template - friend typename detail::Desired>::value>::type& - operator<<(E&& e, T const& stuff); + friend typename detail::exception_type& operator<<(E&& e, T const& stuff); template - friend typename detail::Desired>::value>::type& - operator<<(E&& e, std::ostream& (*f)(std::ostream&)); + friend typename detail::exception_type& operator<<(E&& e, std::ostream& (*f)(std::ostream&)); template - friend typename detail::Desired>::value>::type& - operator<<(E&& e, std::ios_base& (*f)(std::ios_base&)); - - // The following two function templates should be included, to help - // reduce the number of function templates instantiated. However, - // GCC 3.2.3 crashes with an internal compiler error when - // instantiating these functions. - - // template - // friend - // typename detail::Desired::value || - // std::is_same::value)>::type & - // operator<<(E& e, const char*); - - // template - // friend - // typename detail::Desired::value || - // std::is_same::value)>::type & - // operator<<(E& e, char*); + friend typename detail::exception_type& operator<<(E&& e, std::ios_base& (*f)(std::ios_base&)); // This function is deprecated and we are in the process of removing // all code that uses it from CMSSW. It will then be deleted. @@ -199,68 +153,23 @@ namespace cms { // -------- implementation --------- template - inline typename detail::Desired>::value>::type& - operator<<(E&& e, T const& stuff) { + inline typename detail::exception_type& operator<<(E&& e, T const& stuff) { e.ost_ << stuff; return e; } template - inline typename detail::Desired>::value>::type& - operator<<(E&& e, std::ostream& (*f)(std::ostream&)) { + inline typename detail::exception_type& operator<<(E&& e, std::ostream& (*f)(std::ostream&)) { f(e.ost_); return e; } template - inline typename detail::Desired>::value>::type& - operator<<(E&& e, std::ios_base& (*f)(std::ios_base&)) { + inline typename detail::exception_type& operator<<(E&& e, std::ios_base& (*f)(std::ios_base&)) { f(e.ost_); return e; } - // The following four function templates should be included, to help - // reduce the number of function templates instantiated. However, - // GCC 3.2.3 crashes with an internal compiler error when - // instantiating these functions. - - // template - // inline - // typename detail::Desired::value>::type & - // operator<<(E& e, char const* c) - // { - // e.ost_ << c; - // return e; - // } - - // template - // inline - // typename detail::Desired::value>::type const& - // operator<<(E const& e, char const* c) - // { - // E& ref = const_cast(e); - // ref.ost_ << c; - // return e; - // } - - // template - // inline - // typename detail::Desired::value>::type & - // operator<<(E& e, char* c) - // { - // e.ost_ << c; - // return e; - // } - - // template - // inline - // typename detail::Desired::value>::type const& - // operator<<(E const& e, char* c) - // { - // E& ref = const_cast(e); - // ref.ost_ << c; - // return e; - // } } // namespace cms #endif diff --git a/FastSimulation/Muons/plugins/FastTSGFromL2Muon.cc b/FastSimulation/Muons/plugins/FastTSGFromL2Muon.cc index a90ccb4fb2175..7bfe5ec77589f 100644 --- a/FastSimulation/Muons/plugins/FastTSGFromL2Muon.cc +++ b/FastSimulation/Muons/plugins/FastTSGFromL2Muon.cc @@ -29,10 +29,6 @@ FastTSGFromL2Muon::FastTSGFromL2Muon(const edm::ParameterSet& cfg) theRegionBuilder = std::make_unique(regionBuilderPSet, consumesCollector()); } -void FastTSGFromL2Muon::beginRun(edm::Run const& run, edm::EventSetup const& es) { - //region builder -} - void FastTSGFromL2Muon::produce(edm::Event& ev, const edm::EventSetup& es) { // Initialize the output product std::unique_ptr result(new L3MuonTrajectorySeedCollection()); diff --git a/FastSimulation/Muons/plugins/FastTSGFromL2Muon.h b/FastSimulation/Muons/plugins/FastTSGFromL2Muon.h index cdc14dd20b671..a0a0fa8ae54e7 100644 --- a/FastSimulation/Muons/plugins/FastTSGFromL2Muon.h +++ b/FastSimulation/Muons/plugins/FastTSGFromL2Muon.h @@ -27,7 +27,6 @@ class FastTSGFromL2Muon : public edm::stream::EDProducer<> { public: FastTSGFromL2Muon(const edm::ParameterSet& cfg); ~FastTSGFromL2Muon() override = default; - void beginRun(edm::Run const& run, edm::EventSetup const& es) override; void produce(edm::Event& ev, const edm::EventSetup& es) override; private: @@ -46,7 +45,6 @@ class FastTSGFromL2Muon : public edm::stream::EDProducer<> { const edm::EDGetTokenT l2TrackToken_; std::vector > > seedToken_; - MuonServiceProxy* theService; std::unique_ptr theRegionBuilder; }; #endif diff --git a/GeneratorInterface/Herwig7Interface/interface/Herwig7Interface.h b/GeneratorInterface/Herwig7Interface/interface/Herwig7Interface.h index 0be9757401e19..6b675371ab23b 100644 --- a/GeneratorInterface/Herwig7Interface/interface/Herwig7Interface.h +++ b/GeneratorInterface/Herwig7Interface/interface/Herwig7Interface.h @@ -52,11 +52,11 @@ class Herwig7Interface { bool initGenerator(); void flushRandomNumberGenerator(); - static std::auto_ptr convert(const ThePEG::EventPtr &event); + static std::unique_ptr convert(const ThePEG::EventPtr &event); static double pthat(const ThePEG::EventPtr &event); - std::auto_ptr iobc_; + std::unique_ptr iobc_; // HerwigUi contains settings piped to Herwig7 std::shared_ptr HwUI_; diff --git a/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc b/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc index 57d20cd91ede2..063676b55bce3 100644 --- a/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc +++ b/GeneratorInterface/Herwig7Interface/src/Herwig7Interface.cc @@ -4,13 +4,12 @@ * Dominik Beutel dominik.beutel@cern.ch */ -#include -#include -#include -#include -#include #include #include +#include +#include +#include +#include #include @@ -57,7 +56,7 @@ Herwig7Interface::Herwig7Interface(const edm::ParameterSet &pset) // Write events in hepmc ascii format for debugging purposes string dumpEvents = pset.getUntrackedParameter("dumpEvents", ""); if (!dumpEvents.empty()) { - iobc_.reset(new HepMC::IO_GenEvent(dumpEvents, ios::out)); + iobc_ = std::make_unique(dumpEvents, ios::out); edm::LogInfo("ThePEGSource") << "Event logging switched on (=> " << dumpEvents << ")"; } // Clear dumpConfig target @@ -223,8 +222,8 @@ void Herwig7Interface::flushRandomNumberGenerator() { */ } -auto_ptr Herwig7Interface::convert(const ThePEG::EventPtr &event) { - return std::auto_ptr(ThePEG::HepMCConverter::convert(*event)); +unique_ptr Herwig7Interface::convert(const ThePEG::EventPtr &event) { + return std::unique_ptr(ThePEG::HepMCConverter::convert(*event)); } double Herwig7Interface::pthat(const ThePEG::EventPtr &event) { diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D104.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D104.xml index 77e3f36b5b14e..271fd4b72906b 100644 --- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D104.xml +++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D104.xml @@ -102,7 +102,7 @@ - + diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D104XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D104XML_cfi.py index ce325b8706057..54e962ca392b4 100644 --- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D104XML_cfi.py +++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D104XML_cfi.py @@ -105,7 +105,7 @@ 'Geometry/HcalSimData/data/hfpmt.xml', 'Geometry/HcalSimData/data/hffibrebundle.xml', 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', - 'Geometry/HGCalSimData/data/hgcsensv17n.xml', + 'Geometry/HGCalSimData/data/hgcsensv15.xml', 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', diff --git a/Geometry/ForwardCommonData/data/hfnose01.txt b/Geometry/ForwardCommonData/data/hfnose01.txt new file mode 100644 index 0000000000000..adfc0eb4ea1e9 --- /dev/null +++ b/Geometry/ForwardCommonData/data/hfnose01.txt @@ -0,0 +1,824 @@ +1 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +2 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +3 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +4 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +5 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +6 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +7 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 +8 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 + 1 0 h120 586.043 -725.040 0 -6 -5 3 + 1 0 h120 669.763 -580.032 0 -6 -4 3 + 1 0 h120 753.484 -435.024 0 -6 -3 3 + 1 0 h120 837.204 -290.016 0 -6 -2 3 + 1 0 h120 920.924 -145.008 0 -6 -1 3 + 1 0 h120 334.882 -870.048 0 -5 -6 4 + 1 0 h120 418.602 -725.040 0 -5 -5 4 + 1 0 h120 502.322 -580.032 0 -5 -4 3 + 1 0 h120 586.043 -435.024 0 -5 -3 3 + 1 0 h120 669.763 -290.016 0 -5 -2 3 + 1 0 h120 753.484 -145.008 0 -5 -1 3 + 1 0 h120 837.204 0.000 0 -5 0 3 + 1 0 h120 920.924 145.008 0 -5 1 2 + 1 0 h120 167.441 -870.048 0 -4 -6 4 + 1 0 h120 251.161 -725.040 0 -4 -5 4 + 1 0 h120 334.882 -580.032 0 -4 -4 4 + 1 0 h120 418.602 -435.024 0 -4 -3 3 + 1 0 h120 502.322 -290.016 0 -4 -2 3 + 1 0 h120 586.043 -145.008 0 -4 -1 3 + 1 0 h120 669.763 0.000 0 -4 0 3 + 1 0 h120 753.484 145.008 0 -4 1 2 + 1 0 h120 837.204 290.016 0 -4 2 2 + 1 0 h120 0.000 -870.048 0 -3 -6 4 + 1 0 h120 83.720 -725.040 0 -3 -5 4 + 1 0 h120 167.441 -580.032 0 -3 -4 4 + 1 0 h120 251.161 -435.024 0 -3 -3 4 + 1 0 h120 334.882 -290.016 0 -3 -2 3 + 1 0 h120 418.602 -145.008 0 -3 -1 3 + 1 0 h120 502.322 0.000 0 -3 0 3 + 1 0 h120 586.043 145.008 0 -3 1 2 + 1 0 h120 669.763 290.016 0 -3 2 2 + 1 0 h120 753.484 435.024 0 -3 3 2 + 1 0 h120 -167.441 -870.048 0 -2 -6 4 + 1 0 h120 -83.720 -725.040 0 -2 -5 4 + 1 0 h120 0.000 -580.032 0 -2 -4 4 + 1 0 h120 83.720 -435.024 0 -2 -3 4 + 1 0 h120 418.602 145.008 0 -2 1 2 + 1 0 h120 502.322 290.016 0 -2 2 2 + 1 0 h120 586.043 435.024 0 -2 3 2 + 1 0 h120 669.763 580.032 0 -2 4 2 + 1 0 h120 -334.882 -870.048 0 -1 -6 4 + 1 0 h120 -251.161 -725.040 0 -1 -5 4 + 1 0 h120 -167.441 -580.032 0 -1 -4 4 + 1 0 h120 -83.720 -435.024 0 -1 -3 4 + 1 0 h120 334.882 290.016 0 -1 2 2 + 1 0 h120 418.602 435.024 0 -1 3 2 + 1 0 h120 502.322 580.032 0 -1 4 2 + 1 0 h120 586.043 725.040 0 -1 5 2 + 1 0 h120 -418.602 -725.040 0 0 -5 5 + 1 0 h120 -334.882 -580.032 0 0 -4 5 + 1 0 h120 -251.161 -435.024 0 0 -3 5 + 1 0 h120 251.161 435.024 0 0 3 1 + 1 0 h120 334.882 580.032 0 0 4 1 + 1 0 h120 418.602 725.040 0 0 5 1 + 1 0 h120 -586.043 -725.040 0 1 -5 5 + 1 0 h120 -502.322 -580.032 0 1 -4 5 + 1 0 h120 -418.602 -435.024 0 1 -3 5 + 1 0 h120 -334.882 -290.016 0 1 -2 5 + 1 0 h120 83.720 435.024 0 1 3 1 + 1 0 h120 167.441 580.032 0 1 4 1 + 1 0 h120 251.161 725.040 0 1 5 1 + 1 0 h120 334.882 870.048 0 1 6 1 + 1 0 h120 -669.763 -580.032 0 2 -4 5 + 1 0 h120 -586.043 -435.024 0 2 -3 5 + 1 0 h120 -502.322 -290.016 0 2 -2 5 + 1 0 h120 -418.602 -145.008 0 2 -1 5 + 1 0 h120 -83.720 435.024 0 2 3 1 + 1 0 h120 0.000 580.032 0 2 4 1 + 1 0 h120 83.720 725.040 0 2 5 1 + 1 0 h120 167.441 870.048 0 2 6 1 + 1 0 h120 -753.484 -435.024 0 3 -3 5 + 1 0 h120 -669.763 -290.016 0 3 -2 5 + 1 0 h120 -586.043 -145.008 0 3 -1 5 + 1 0 h120 -502.322 0.000 0 3 0 0 + 1 0 h120 -418.602 145.008 0 3 1 0 + 1 0 h120 -334.882 290.016 0 3 2 0 + 1 0 h120 -251.161 435.024 0 3 3 1 + 1 0 h120 -167.441 580.032 0 3 4 1 + 1 0 h120 -83.720 725.040 0 3 5 1 + 1 0 h120 0.000 870.048 0 3 6 1 + 1 0 h120 -837.204 -290.016 0 4 -2 5 + 1 0 h120 -753.484 -145.008 0 4 -1 5 + 1 0 h120 -669.763 0.000 0 4 0 0 + 1 0 h120 -586.043 145.008 0 4 1 0 + 1 0 h120 -502.322 290.016 0 4 2 0 + 1 0 h120 -418.602 435.024 0 4 3 0 + 1 0 h120 -334.882 580.032 0 4 4 1 + 1 0 h120 -251.161 725.040 0 4 5 1 + 1 0 h120 -167.441 870.048 0 4 6 1 + 1 0 h120 -920.924 -145.008 0 5 -1 5 + 1 0 h120 -837.204 0.000 0 5 0 0 + 1 0 h120 -753.484 145.008 0 5 1 0 + 1 0 h120 -669.763 290.016 0 5 2 0 + 1 0 h120 -586.043 435.024 0 5 3 0 + 1 0 h120 -502.322 580.032 0 5 4 0 + 1 0 h120 -418.602 725.040 0 5 5 1 + 1 0 h120 -334.882 870.048 0 5 6 1 + 1 0 h120 -920.924 145.008 0 6 1 0 + 1 0 h120 -837.204 290.016 0 6 2 0 + 1 0 h120 -753.484 435.024 0 6 3 0 + 1 0 h120 -669.763 580.032 0 6 4 0 + 1 0 h120 -586.043 725.040 0 6 5 0 + 2 0 h120 586.043 -725.040 0 -6 -5 3 + 2 0 h120 669.763 -580.032 0 -6 -4 3 + 2 0 h120 753.484 -435.024 0 -6 -3 3 + 2 0 h120 837.204 -290.016 0 -6 -2 3 + 2 0 h120 920.924 -145.008 0 -6 -1 3 + 2 0 h120 334.882 -870.048 0 -5 -6 4 + 2 0 h120 418.602 -725.040 0 -5 -5 4 + 2 0 h120 502.322 -580.032 0 -5 -4 3 + 2 0 h120 586.043 -435.024 0 -5 -3 3 + 2 0 h120 669.763 -290.016 0 -5 -2 3 + 2 0 h120 753.484 -145.008 0 -5 -1 3 + 2 0 h120 837.204 0.000 0 -5 0 3 + 2 0 h120 920.924 145.008 0 -5 1 2 + 2 0 h120 167.441 -870.048 0 -4 -6 4 + 2 0 h120 251.161 -725.040 0 -4 -5 4 + 2 0 h120 334.882 -580.032 0 -4 -4 4 + 2 0 h120 418.602 -435.024 0 -4 -3 3 + 2 0 h120 502.322 -290.016 0 -4 -2 3 + 2 0 h120 586.043 -145.008 0 -4 -1 3 + 2 0 h120 669.763 0.000 0 -4 0 3 + 2 0 h120 753.484 145.008 0 -4 1 2 + 2 0 h120 837.204 290.016 0 -4 2 2 + 2 0 h120 0.000 -870.048 0 -3 -6 4 + 2 0 h120 83.720 -725.040 0 -3 -5 4 + 2 0 h120 167.441 -580.032 0 -3 -4 4 + 2 0 h120 251.161 -435.024 0 -3 -3 4 + 2 0 h120 334.882 -290.016 0 -3 -2 3 + 2 0 h120 418.602 -145.008 0 -3 -1 3 + 2 0 h120 502.322 0.000 0 -3 0 3 + 2 0 h120 586.043 145.008 0 -3 1 2 + 2 0 h120 669.763 290.016 0 -3 2 2 + 2 0 h120 753.484 435.024 0 -3 3 2 + 2 0 h120 -167.441 -870.048 0 -2 -6 4 + 2 0 h120 -83.720 -725.040 0 -2 -5 4 + 2 0 h120 0.000 -580.032 0 -2 -4 4 + 2 0 h120 83.720 -435.024 0 -2 -3 4 + 2 0 h120 418.602 145.008 0 -2 1 2 + 2 0 h120 502.322 290.016 0 -2 2 2 + 2 0 h120 586.043 435.024 0 -2 3 2 + 2 0 h120 669.763 580.032 0 -2 4 2 + 2 0 h120 -334.882 -870.048 0 -1 -6 4 + 2 0 h120 -251.161 -725.040 0 -1 -5 4 + 2 0 h120 -167.441 -580.032 0 -1 -4 4 + 2 0 h120 -83.720 -435.024 0 -1 -3 4 + 2 0 h120 334.882 290.016 0 -1 2 2 + 2 0 h120 418.602 435.024 0 -1 3 2 + 2 0 h120 502.322 580.032 0 -1 4 2 + 2 0 h120 586.043 725.040 0 -1 5 2 + 2 0 h120 -418.602 -725.040 0 0 -5 5 + 2 0 h120 -334.882 -580.032 0 0 -4 5 + 2 0 h120 -251.161 -435.024 0 0 -3 5 + 2 0 h120 251.161 435.024 0 0 3 1 + 2 0 h120 334.882 580.032 0 0 4 1 + 2 0 h120 418.602 725.040 0 0 5 1 + 2 0 h120 -586.043 -725.040 0 1 -5 5 + 2 0 h120 -502.322 -580.032 0 1 -4 5 + 2 0 h120 -418.602 -435.024 0 1 -3 5 + 2 0 h120 -334.882 -290.016 0 1 -2 5 + 2 0 h120 83.720 435.024 0 1 3 1 + 2 0 h120 167.441 580.032 0 1 4 1 + 2 0 h120 251.161 725.040 0 1 5 1 + 2 0 h120 334.882 870.048 0 1 6 1 + 2 0 h120 -669.763 -580.032 0 2 -4 5 + 2 0 h120 -586.043 -435.024 0 2 -3 5 + 2 0 h120 -502.322 -290.016 0 2 -2 5 + 2 0 h120 -418.602 -145.008 0 2 -1 5 + 2 0 h120 -83.720 435.024 0 2 3 1 + 2 0 h120 0.000 580.032 0 2 4 1 + 2 0 h120 83.720 725.040 0 2 5 1 + 2 0 h120 167.441 870.048 0 2 6 1 + 2 0 h120 -753.484 -435.024 0 3 -3 5 + 2 0 h120 -669.763 -290.016 0 3 -2 5 + 2 0 h120 -586.043 -145.008 0 3 -1 5 + 2 0 h120 -502.322 0.000 0 3 0 0 + 2 0 h120 -418.602 145.008 0 3 1 0 + 2 0 h120 -334.882 290.016 0 3 2 0 + 2 0 h120 -251.161 435.024 0 3 3 1 + 2 0 h120 -167.441 580.032 0 3 4 1 + 2 0 h120 -83.720 725.040 0 3 5 1 + 2 0 h120 0.000 870.048 0 3 6 1 + 2 0 h120 -837.204 -290.016 0 4 -2 5 + 2 0 h120 -753.484 -145.008 0 4 -1 5 + 2 0 h120 -669.763 0.000 0 4 0 0 + 2 0 h120 -586.043 145.008 0 4 1 0 + 2 0 h120 -502.322 290.016 0 4 2 0 + 2 0 h120 -418.602 435.024 0 4 3 0 + 2 0 h120 -334.882 580.032 0 4 4 1 + 2 0 h120 -251.161 725.040 0 4 5 1 + 2 0 h120 -167.441 870.048 0 4 6 1 + 2 0 h120 -920.924 -145.008 0 5 -1 5 + 2 0 h120 -837.204 0.000 0 5 0 0 + 2 0 h120 -753.484 145.008 0 5 1 0 + 2 0 h120 -669.763 290.016 0 5 2 0 + 2 0 h120 -586.043 435.024 0 5 3 0 + 2 0 h120 -502.322 580.032 0 5 4 0 + 2 0 h120 -418.602 725.040 0 5 5 1 + 2 0 h120 -334.882 870.048 0 5 6 1 + 2 0 h120 -920.924 145.008 0 6 1 0 + 2 0 h120 -837.204 290.016 0 6 2 0 + 2 0 h120 -753.484 435.024 0 6 3 0 + 2 0 h120 -669.763 580.032 0 6 4 0 + 2 0 h120 -586.043 725.040 0 6 5 0 + 3 0 h120 586.043 -725.040 0 -6 -5 3 + 3 0 h120 669.763 -580.032 0 -6 -4 3 + 3 0 h120 753.484 -435.024 0 -6 -3 3 + 3 0 h120 837.204 -290.016 0 -6 -2 3 + 3 0 h120 920.924 -145.008 0 -6 -1 3 + 3 0 h120 334.882 -870.048 0 -5 -6 4 + 3 0 h120 418.602 -725.040 0 -5 -5 4 + 3 0 h120 502.322 -580.032 0 -5 -4 3 + 3 0 h120 586.043 -435.024 0 -5 -3 3 + 3 0 h120 669.763 -290.016 0 -5 -2 3 + 3 0 h120 753.484 -145.008 0 -5 -1 3 + 3 0 h120 837.204 0.000 0 -5 0 3 + 3 0 h120 920.924 145.008 0 -5 1 2 + 3 0 h120 167.441 -870.048 0 -4 -6 4 + 3 0 h120 251.161 -725.040 0 -4 -5 4 + 3 0 h120 334.882 -580.032 0 -4 -4 4 + 3 0 h120 418.602 -435.024 0 -4 -3 3 + 3 0 h120 502.322 -290.016 0 -4 -2 3 + 3 0 h120 586.043 -145.008 0 -4 -1 3 + 3 0 h120 669.763 0.000 0 -4 0 3 + 3 0 h120 753.484 145.008 0 -4 1 2 + 3 0 h120 837.204 290.016 0 -4 2 2 + 3 0 h120 0.000 -870.048 0 -3 -6 4 + 3 0 h120 83.720 -725.040 0 -3 -5 4 + 3 0 h120 167.441 -580.032 0 -3 -4 4 + 3 0 h120 251.161 -435.024 0 -3 -3 4 + 3 0 h120 334.882 -290.016 0 -3 -2 3 + 3 0 h120 418.602 -145.008 0 -3 -1 3 + 3 0 h120 502.322 0.000 0 -3 0 3 + 3 0 h120 586.043 145.008 0 -3 1 2 + 3 0 h120 669.763 290.016 0 -3 2 2 + 3 0 h120 753.484 435.024 0 -3 3 2 + 3 0 h120 -167.441 -870.048 0 -2 -6 4 + 3 0 h120 -83.720 -725.040 0 -2 -5 4 + 3 0 h120 0.000 -580.032 0 -2 -4 4 + 3 0 h120 83.720 -435.024 0 -2 -3 4 + 3 0 h120 418.602 145.008 0 -2 1 2 + 3 0 h120 502.322 290.016 0 -2 2 2 + 3 0 h120 586.043 435.024 0 -2 3 2 + 3 0 h120 669.763 580.032 0 -2 4 2 + 3 0 h120 -334.882 -870.048 0 -1 -6 4 + 3 0 h120 -251.161 -725.040 0 -1 -5 4 + 3 0 h120 -167.441 -580.032 0 -1 -4 4 + 3 0 h120 -83.720 -435.024 0 -1 -3 4 + 3 0 h120 334.882 290.016 0 -1 2 2 + 3 0 h120 418.602 435.024 0 -1 3 2 + 3 0 h120 502.322 580.032 0 -1 4 2 + 3 0 h120 586.043 725.040 0 -1 5 2 + 3 0 h120 -418.602 -725.040 0 0 -5 5 + 3 0 h120 -334.882 -580.032 0 0 -4 5 + 3 0 h120 -251.161 -435.024 0 0 -3 5 + 3 0 h120 251.161 435.024 0 0 3 1 + 3 0 h120 334.882 580.032 0 0 4 1 + 3 0 h120 418.602 725.040 0 0 5 1 + 3 0 h120 -586.043 -725.040 0 1 -5 5 + 3 0 h120 -502.322 -580.032 0 1 -4 5 + 3 0 h120 -418.602 -435.024 0 1 -3 5 + 3 0 h120 -334.882 -290.016 0 1 -2 5 + 3 0 h120 83.720 435.024 0 1 3 1 + 3 0 h120 167.441 580.032 0 1 4 1 + 3 0 h120 251.161 725.040 0 1 5 1 + 3 0 h120 334.882 870.048 0 1 6 1 + 3 0 h120 -669.763 -580.032 0 2 -4 5 + 3 0 h120 -586.043 -435.024 0 2 -3 5 + 3 0 h120 -502.322 -290.016 0 2 -2 5 + 3 0 h120 -418.602 -145.008 0 2 -1 5 + 3 0 h120 -83.720 435.024 0 2 3 1 + 3 0 h120 0.000 580.032 0 2 4 1 + 3 0 h120 83.720 725.040 0 2 5 1 + 3 0 h120 167.441 870.048 0 2 6 1 + 3 0 h120 -753.484 -435.024 0 3 -3 5 + 3 0 h120 -669.763 -290.016 0 3 -2 5 + 3 0 h120 -586.043 -145.008 0 3 -1 5 + 3 0 h120 -502.322 0.000 0 3 0 0 + 3 0 h120 -418.602 145.008 0 3 1 0 + 3 0 h120 -334.882 290.016 0 3 2 0 + 3 0 h120 -251.161 435.024 0 3 3 1 + 3 0 h120 -167.441 580.032 0 3 4 1 + 3 0 h120 -83.720 725.040 0 3 5 1 + 3 0 h120 0.000 870.048 0 3 6 1 + 3 0 h120 -837.204 -290.016 0 4 -2 5 + 3 0 h120 -753.484 -145.008 0 4 -1 5 + 3 0 h120 -669.763 0.000 0 4 0 0 + 3 0 h120 -586.043 145.008 0 4 1 0 + 3 0 h120 -502.322 290.016 0 4 2 0 + 3 0 h120 -418.602 435.024 0 4 3 0 + 3 0 h120 -334.882 580.032 0 4 4 1 + 3 0 h120 -251.161 725.040 0 4 5 1 + 3 0 h120 -167.441 870.048 0 4 6 1 + 3 0 h120 -920.924 -145.008 0 5 -1 5 + 3 0 h120 -837.204 0.000 0 5 0 0 + 3 0 h120 -753.484 145.008 0 5 1 0 + 3 0 h120 -669.763 290.016 0 5 2 0 + 3 0 h120 -586.043 435.024 0 5 3 0 + 3 0 h120 -502.322 580.032 0 5 4 0 + 3 0 h120 -418.602 725.040 0 5 5 1 + 3 0 h120 -334.882 870.048 0 5 6 1 + 3 0 h120 -920.924 145.008 0 6 1 0 + 3 0 h120 -837.204 290.016 0 6 2 0 + 3 0 h120 -753.484 435.024 0 6 3 0 + 3 0 h120 -669.763 580.032 0 6 4 0 + 3 0 h120 -586.043 725.040 0 6 5 0 + 4 0 h120 586.043 -725.040 0 -6 -5 3 + 4 0 h120 669.763 -580.032 0 -6 -4 3 + 4 0 h120 753.484 -435.024 0 -6 -3 3 + 4 0 h120 837.204 -290.016 0 -6 -2 3 + 4 0 h120 920.924 -145.008 0 -6 -1 3 + 4 0 h120 334.882 -870.048 0 -5 -6 4 + 4 0 h120 418.602 -725.040 0 -5 -5 4 + 4 0 h120 502.322 -580.032 0 -5 -4 3 + 4 0 h120 586.043 -435.024 0 -5 -3 3 + 4 0 h120 669.763 -290.016 0 -5 -2 3 + 4 0 h120 753.484 -145.008 0 -5 -1 3 + 4 0 h120 837.204 0.000 0 -5 0 3 + 4 0 h120 920.924 145.008 0 -5 1 2 + 4 0 h120 167.441 -870.048 0 -4 -6 4 + 4 0 h120 251.161 -725.040 0 -4 -5 4 + 4 0 h120 334.882 -580.032 0 -4 -4 4 + 4 0 h120 418.602 -435.024 0 -4 -3 3 + 4 0 h120 502.322 -290.016 0 -4 -2 3 + 4 0 h120 586.043 -145.008 0 -4 -1 3 + 4 0 h120 669.763 0.000 0 -4 0 3 + 4 0 h120 753.484 145.008 0 -4 1 2 + 4 0 h120 837.204 290.016 0 -4 2 2 + 4 0 h120 0.000 -870.048 0 -3 -6 4 + 4 0 h120 83.720 -725.040 0 -3 -5 4 + 4 0 h120 167.441 -580.032 0 -3 -4 4 + 4 0 h120 251.161 -435.024 0 -3 -3 4 + 4 0 h120 334.882 -290.016 0 -3 -2 3 + 4 0 h120 418.602 -145.008 0 -3 -1 3 + 4 0 h120 502.322 0.000 0 -3 0 3 + 4 0 h120 586.043 145.008 0 -3 1 2 + 4 0 h120 669.763 290.016 0 -3 2 2 + 4 0 h120 753.484 435.024 0 -3 3 2 + 4 0 h120 -167.441 -870.048 0 -2 -6 4 + 4 0 h120 -83.720 -725.040 0 -2 -5 4 + 4 0 h120 0.000 -580.032 0 -2 -4 4 + 4 0 h120 83.720 -435.024 0 -2 -3 4 + 4 0 h120 418.602 145.008 0 -2 1 2 + 4 0 h120 502.322 290.016 0 -2 2 2 + 4 0 h120 586.043 435.024 0 -2 3 2 + 4 0 h120 669.763 580.032 0 -2 4 2 + 4 0 h120 -334.882 -870.048 0 -1 -6 4 + 4 0 h120 -251.161 -725.040 0 -1 -5 4 + 4 0 h120 -167.441 -580.032 0 -1 -4 4 + 4 0 h120 -83.720 -435.024 0 -1 -3 4 + 4 0 h120 334.882 290.016 0 -1 2 2 + 4 0 h120 418.602 435.024 0 -1 3 2 + 4 0 h120 502.322 580.032 0 -1 4 2 + 4 0 h120 586.043 725.040 0 -1 5 2 + 4 0 h120 -418.602 -725.040 0 0 -5 5 + 4 0 h120 -334.882 -580.032 0 0 -4 5 + 4 0 h120 -251.161 -435.024 0 0 -3 5 + 4 0 h120 251.161 435.024 0 0 3 1 + 4 0 h120 334.882 580.032 0 0 4 1 + 4 0 h120 418.602 725.040 0 0 5 1 + 4 0 h120 -586.043 -725.040 0 1 -5 5 + 4 0 h120 -502.322 -580.032 0 1 -4 5 + 4 0 h120 -418.602 -435.024 0 1 -3 5 + 4 0 h120 -334.882 -290.016 0 1 -2 5 + 4 0 h120 83.720 435.024 0 1 3 1 + 4 0 h120 167.441 580.032 0 1 4 1 + 4 0 h120 251.161 725.040 0 1 5 1 + 4 0 h120 334.882 870.048 0 1 6 1 + 4 0 h120 -669.763 -580.032 0 2 -4 5 + 4 0 h120 -586.043 -435.024 0 2 -3 5 + 4 0 h120 -502.322 -290.016 0 2 -2 5 + 4 0 h120 -418.602 -145.008 0 2 -1 5 + 4 0 h120 -83.720 435.024 0 2 3 1 + 4 0 h120 0.000 580.032 0 2 4 1 + 4 0 h120 83.720 725.040 0 2 5 1 + 4 0 h120 167.441 870.048 0 2 6 1 + 4 0 h120 -753.484 -435.024 0 3 -3 5 + 4 0 h120 -669.763 -290.016 0 3 -2 5 + 4 0 h120 -586.043 -145.008 0 3 -1 5 + 4 0 h120 -502.322 0.000 0 3 0 0 + 4 0 h120 -418.602 145.008 0 3 1 0 + 4 0 h120 -334.882 290.016 0 3 2 0 + 4 0 h120 -251.161 435.024 0 3 3 1 + 4 0 h120 -167.441 580.032 0 3 4 1 + 4 0 h120 -83.720 725.040 0 3 5 1 + 4 0 h120 0.000 870.048 0 3 6 1 + 4 0 h120 -837.204 -290.016 0 4 -2 5 + 4 0 h120 -753.484 -145.008 0 4 -1 5 + 4 0 h120 -669.763 0.000 0 4 0 0 + 4 0 h120 -586.043 145.008 0 4 1 0 + 4 0 h120 -502.322 290.016 0 4 2 0 + 4 0 h120 -418.602 435.024 0 4 3 0 + 4 0 h120 -334.882 580.032 0 4 4 1 + 4 0 h120 -251.161 725.040 0 4 5 1 + 4 0 h120 -167.441 870.048 0 4 6 1 + 4 0 h120 -920.924 -145.008 0 5 -1 5 + 4 0 h120 -837.204 0.000 0 5 0 0 + 4 0 h120 -753.484 145.008 0 5 1 0 + 4 0 h120 -669.763 290.016 0 5 2 0 + 4 0 h120 -586.043 435.024 0 5 3 0 + 4 0 h120 -502.322 580.032 0 5 4 0 + 4 0 h120 -418.602 725.040 0 5 5 1 + 4 0 h120 -334.882 870.048 0 5 6 1 + 4 0 h120 -920.924 145.008 0 6 1 0 + 4 0 h120 -837.204 290.016 0 6 2 0 + 4 0 h120 -753.484 435.024 0 6 3 0 + 4 0 h120 -669.763 580.032 0 6 4 0 + 4 0 h120 -586.043 725.040 0 6 5 0 + 5 0 h120 586.043 -725.040 0 -6 -5 3 + 5 0 h120 669.763 -580.032 0 -6 -4 3 + 5 0 h120 753.484 -435.024 0 -6 -3 3 + 5 0 h120 837.204 -290.016 0 -6 -2 3 + 5 0 h120 920.924 -145.008 0 -6 -1 3 + 5 0 h120 334.882 -870.048 0 -5 -6 4 + 5 0 h120 418.602 -725.040 0 -5 -5 4 + 5 0 h120 502.322 -580.032 0 -5 -4 3 + 5 0 h120 586.043 -435.024 0 -5 -3 3 + 5 0 h120 669.763 -290.016 0 -5 -2 3 + 5 0 h120 753.484 -145.008 0 -5 -1 3 + 5 0 h120 837.204 0.000 0 -5 0 3 + 5 0 h120 920.924 145.008 0 -5 1 2 + 5 0 h120 167.441 -870.048 0 -4 -6 4 + 5 0 h120 251.161 -725.040 0 -4 -5 4 + 5 0 h120 334.882 -580.032 0 -4 -4 4 + 5 0 h120 418.602 -435.024 0 -4 -3 3 + 5 0 h120 502.322 -290.016 0 -4 -2 3 + 5 0 h120 586.043 -145.008 0 -4 -1 3 + 5 0 h120 669.763 0.000 0 -4 0 3 + 5 0 h120 753.484 145.008 0 -4 1 2 + 5 0 h120 837.204 290.016 0 -4 2 2 + 5 0 h120 0.000 -870.048 0 -3 -6 4 + 5 0 h120 83.720 -725.040 0 -3 -5 4 + 5 0 h120 167.441 -580.032 0 -3 -4 4 + 5 0 h120 251.161 -435.024 0 -3 -3 4 + 5 0 h120 334.882 -290.016 0 -3 -2 3 + 5 0 h120 418.602 -145.008 0 -3 -1 3 + 5 0 h120 502.322 0.000 0 -3 0 3 + 5 0 h120 586.043 145.008 0 -3 1 2 + 5 0 h120 669.763 290.016 0 -3 2 2 + 5 0 h120 753.484 435.024 0 -3 3 2 + 5 0 h120 -167.441 -870.048 0 -2 -6 4 + 5 0 h120 -83.720 -725.040 0 -2 -5 4 + 5 0 h120 0.000 -580.032 0 -2 -4 4 + 5 0 h120 83.720 -435.024 0 -2 -3 4 + 5 0 h120 418.602 145.008 0 -2 1 2 + 5 0 h120 502.322 290.016 0 -2 2 2 + 5 0 h120 586.043 435.024 0 -2 3 2 + 5 0 h120 669.763 580.032 0 -2 4 2 + 5 0 h120 -334.882 -870.048 0 -1 -6 4 + 5 0 h120 -251.161 -725.040 0 -1 -5 4 + 5 0 h120 -167.441 -580.032 0 -1 -4 4 + 5 0 h120 -83.720 -435.024 0 -1 -3 4 + 5 0 h120 334.882 290.016 0 -1 2 2 + 5 0 h120 418.602 435.024 0 -1 3 2 + 5 0 h120 502.322 580.032 0 -1 4 2 + 5 0 h120 586.043 725.040 0 -1 5 2 + 5 0 h120 -418.602 -725.040 0 0 -5 5 + 5 0 h120 -334.882 -580.032 0 0 -4 5 + 5 0 h120 -251.161 -435.024 0 0 -3 5 + 5 0 h120 251.161 435.024 0 0 3 1 + 5 0 h120 334.882 580.032 0 0 4 1 + 5 0 h120 418.602 725.040 0 0 5 1 + 5 0 h120 -586.043 -725.040 0 1 -5 5 + 5 0 h120 -502.322 -580.032 0 1 -4 5 + 5 0 h120 -418.602 -435.024 0 1 -3 5 + 5 0 h120 -334.882 -290.016 0 1 -2 5 + 5 0 h120 83.720 435.024 0 1 3 1 + 5 0 h120 167.441 580.032 0 1 4 1 + 5 0 h120 251.161 725.040 0 1 5 1 + 5 0 h120 334.882 870.048 0 1 6 1 + 5 0 h120 -669.763 -580.032 0 2 -4 5 + 5 0 h120 -586.043 -435.024 0 2 -3 5 + 5 0 h120 -502.322 -290.016 0 2 -2 5 + 5 0 h120 -418.602 -145.008 0 2 -1 5 + 5 0 h120 -83.720 435.024 0 2 3 1 + 5 0 h120 0.000 580.032 0 2 4 1 + 5 0 h120 83.720 725.040 0 2 5 1 + 5 0 h120 167.441 870.048 0 2 6 1 + 5 0 h120 -753.484 -435.024 0 3 -3 5 + 5 0 h120 -669.763 -290.016 0 3 -2 5 + 5 0 h120 -586.043 -145.008 0 3 -1 5 + 5 0 h120 -502.322 0.000 0 3 0 0 + 5 0 h120 -418.602 145.008 0 3 1 0 + 5 0 h120 -334.882 290.016 0 3 2 0 + 5 0 h120 -251.161 435.024 0 3 3 1 + 5 0 h120 -167.441 580.032 0 3 4 1 + 5 0 h120 -83.720 725.040 0 3 5 1 + 5 0 h120 0.000 870.048 0 3 6 1 + 5 0 h120 -837.204 -290.016 0 4 -2 5 + 5 0 h120 -753.484 -145.008 0 4 -1 5 + 5 0 h120 -669.763 0.000 0 4 0 0 + 5 0 h120 -586.043 145.008 0 4 1 0 + 5 0 h120 -502.322 290.016 0 4 2 0 + 5 0 h120 -418.602 435.024 0 4 3 0 + 5 0 h120 -334.882 580.032 0 4 4 1 + 5 0 h120 -251.161 725.040 0 4 5 1 + 5 0 h120 -167.441 870.048 0 4 6 1 + 5 0 h120 -920.924 -145.008 0 5 -1 5 + 5 0 h120 -837.204 0.000 0 5 0 0 + 5 0 h120 -753.484 145.008 0 5 1 0 + 5 0 h120 -669.763 290.016 0 5 2 0 + 5 0 h120 -586.043 435.024 0 5 3 0 + 5 0 h120 -502.322 580.032 0 5 4 0 + 5 0 h120 -418.602 725.040 0 5 5 1 + 5 0 h120 -334.882 870.048 0 5 6 1 + 5 0 h120 -920.924 145.008 0 6 1 0 + 5 0 h120 -837.204 290.016 0 6 2 0 + 5 0 h120 -753.484 435.024 0 6 3 0 + 5 0 h120 -669.763 580.032 0 6 4 0 + 5 0 h120 -586.043 725.040 0 6 5 0 + 6 0 h120 586.043 -725.040 0 -6 -5 3 + 6 0 h120 669.763 -580.032 0 -6 -4 3 + 6 0 h120 753.484 -435.024 0 -6 -3 3 + 6 0 h120 837.204 -290.016 0 -6 -2 3 + 6 0 h120 920.924 -145.008 0 -6 -1 3 + 6 0 h120 334.882 -870.048 0 -5 -6 4 + 6 0 h120 418.602 -725.040 0 -5 -5 4 + 6 0 h120 502.322 -580.032 0 -5 -4 3 + 6 0 h120 586.043 -435.024 0 -5 -3 3 + 6 0 h120 669.763 -290.016 0 -5 -2 3 + 6 0 h120 753.484 -145.008 0 -5 -1 3 + 6 0 h120 837.204 0.000 0 -5 0 3 + 6 0 h120 920.924 145.008 0 -5 1 2 + 6 0 h120 167.441 -870.048 0 -4 -6 4 + 6 0 h120 251.161 -725.040 0 -4 -5 4 + 6 0 h120 334.882 -580.032 0 -4 -4 4 + 6 0 h120 418.602 -435.024 0 -4 -3 3 + 6 0 h120 502.322 -290.016 0 -4 -2 3 + 6 0 h120 586.043 -145.008 0 -4 -1 3 + 6 0 h120 669.763 0.000 0 -4 0 3 + 6 0 h120 753.484 145.008 0 -4 1 2 + 6 0 h120 837.204 290.016 0 -4 2 2 + 6 0 h120 0.000 -870.048 0 -3 -6 4 + 6 0 h120 83.720 -725.040 0 -3 -5 4 + 6 0 h120 167.441 -580.032 0 -3 -4 4 + 6 0 h120 251.161 -435.024 0 -3 -3 4 + 6 0 h120 334.882 -290.016 0 -3 -2 3 + 6 0 h120 418.602 -145.008 0 -3 -1 3 + 6 0 h120 502.322 0.000 0 -3 0 3 + 6 0 h120 586.043 145.008 0 -3 1 2 + 6 0 h120 669.763 290.016 0 -3 2 2 + 6 0 h120 753.484 435.024 0 -3 3 2 + 6 0 h120 -167.441 -870.048 0 -2 -6 4 + 6 0 h120 -83.720 -725.040 0 -2 -5 4 + 6 0 h120 0.000 -580.032 0 -2 -4 4 + 6 0 h120 83.720 -435.024 0 -2 -3 4 + 6 0 h120 418.602 145.008 0 -2 1 2 + 6 0 h120 502.322 290.016 0 -2 2 2 + 6 0 h120 586.043 435.024 0 -2 3 2 + 6 0 h120 669.763 580.032 0 -2 4 2 + 6 0 h120 -334.882 -870.048 0 -1 -6 4 + 6 0 h120 -251.161 -725.040 0 -1 -5 4 + 6 0 h120 -167.441 -580.032 0 -1 -4 4 + 6 0 h120 -83.720 -435.024 0 -1 -3 4 + 6 0 h120 334.882 290.016 0 -1 2 2 + 6 0 h120 418.602 435.024 0 -1 3 2 + 6 0 h120 502.322 580.032 0 -1 4 2 + 6 0 h120 586.043 725.040 0 -1 5 2 + 6 0 h120 -418.602 -725.040 0 0 -5 5 + 6 0 h120 -334.882 -580.032 0 0 -4 5 + 6 0 h120 -251.161 -435.024 0 0 -3 5 + 6 0 h120 251.161 435.024 0 0 3 1 + 6 0 h120 334.882 580.032 0 0 4 1 + 6 0 h120 418.602 725.040 0 0 5 1 + 6 0 h120 -586.043 -725.040 0 1 -5 5 + 6 0 h120 -502.322 -580.032 0 1 -4 5 + 6 0 h120 -418.602 -435.024 0 1 -3 5 + 6 0 h120 -334.882 -290.016 0 1 -2 5 + 6 0 h120 83.720 435.024 0 1 3 1 + 6 0 h120 167.441 580.032 0 1 4 1 + 6 0 h120 251.161 725.040 0 1 5 1 + 6 0 h120 334.882 870.048 0 1 6 1 + 6 0 h120 -669.763 -580.032 0 2 -4 5 + 6 0 h120 -586.043 -435.024 0 2 -3 5 + 6 0 h120 -502.322 -290.016 0 2 -2 5 + 6 0 h120 -418.602 -145.008 0 2 -1 5 + 6 0 h120 -83.720 435.024 0 2 3 1 + 6 0 h120 0.000 580.032 0 2 4 1 + 6 0 h120 83.720 725.040 0 2 5 1 + 6 0 h120 167.441 870.048 0 2 6 1 + 6 0 h120 -753.484 -435.024 0 3 -3 5 + 6 0 h120 -669.763 -290.016 0 3 -2 5 + 6 0 h120 -586.043 -145.008 0 3 -1 5 + 6 0 h120 -502.322 0.000 0 3 0 0 + 6 0 h120 -418.602 145.008 0 3 1 0 + 6 0 h120 -334.882 290.016 0 3 2 0 + 6 0 h120 -251.161 435.024 0 3 3 1 + 6 0 h120 -167.441 580.032 0 3 4 1 + 6 0 h120 -83.720 725.040 0 3 5 1 + 6 0 h120 0.000 870.048 0 3 6 1 + 6 0 h120 -837.204 -290.016 0 4 -2 5 + 6 0 h120 -753.484 -145.008 0 4 -1 5 + 6 0 h120 -669.763 0.000 0 4 0 0 + 6 0 h120 -586.043 145.008 0 4 1 0 + 6 0 h120 -502.322 290.016 0 4 2 0 + 6 0 h120 -418.602 435.024 0 4 3 0 + 6 0 h120 -334.882 580.032 0 4 4 1 + 6 0 h120 -251.161 725.040 0 4 5 1 + 6 0 h120 -167.441 870.048 0 4 6 1 + 6 0 h120 -920.924 -145.008 0 5 -1 5 + 6 0 h120 -837.204 0.000 0 5 0 0 + 6 0 h120 -753.484 145.008 0 5 1 0 + 6 0 h120 -669.763 290.016 0 5 2 0 + 6 0 h120 -586.043 435.024 0 5 3 0 + 6 0 h120 -502.322 580.032 0 5 4 0 + 6 0 h120 -418.602 725.040 0 5 5 1 + 6 0 h120 -334.882 870.048 0 5 6 1 + 6 0 h120 -920.924 145.008 0 6 1 0 + 6 0 h120 -837.204 290.016 0 6 2 0 + 6 0 h120 -753.484 435.024 0 6 3 0 + 6 0 h120 -669.763 580.032 0 6 4 0 + 6 0 h120 -586.043 725.040 0 6 5 0 + 7 0 h120 586.043 -725.040 0 -6 -5 7 + 7 0 h120 669.763 -580.032 0 -6 -4 7 + 7 0 h120 753.484 -435.024 0 -6 -3 7 + 7 0 h120 837.204 -290.016 0 -6 -2 6 + 7 0 h120 920.924 -145.008 0 -6 -1 6 + 7 0 h120 334.882 -870.048 0 -5 -6 8 + 7 0 h120 418.602 -725.040 0 -5 -5 8 + 7 0 h120 502.322 -580.032 0 -5 -4 7 + 7 0 h120 586.043 -435.024 0 -5 -3 7 + 7 0 h120 669.763 -290.016 0 -5 -2 6 + 7 0 h120 753.484 -145.008 0 -5 -1 6 + 7 0 h120 837.204 0.000 0 -5 0 6 + 7 0 h120 920.924 145.008 0 -5 1 5 + 7 0 h120 167.441 -870.048 0 -4 -6 8 + 7 0 h120 251.161 -725.040 0 -4 -5 8 + 7 0 h120 334.882 -580.032 0 -4 -4 8 + 7 0 h120 418.602 -435.024 0 -4 -3 7 + 7 0 h120 502.322 -290.016 0 -4 -2 7 + 7 0 h120 586.043 -145.008 0 -4 -1 6 + 7 0 h120 669.763 0.000 0 -4 0 6 + 7 0 h120 753.484 145.008 0 -4 1 5 + 7 0 h120 837.204 290.016 0 -4 2 5 + 7 0 h120 0.000 -870.048 0 -3 -6 9 + 7 0 h120 83.720 -725.040 0 -3 -5 8 + 7 0 h120 167.441 -580.032 0 -3 -4 8 + 7 0 h120 251.161 -435.024 0 -3 -3 8 + 7 0 h120 334.882 -290.016 0 -3 -2 7 + 7 0 h120 418.602 -145.008 0 -3 -1 6 + 7 0 h120 502.322 0.000 0 -3 0 6 + 7 0 h120 586.043 145.008 0 -3 1 5 + 7 0 h120 669.763 290.016 0 -3 2 5 + 7 0 h120 753.484 435.024 0 -3 3 5 + 7 0 h120 -167.441 -870.048 0 -2 -6 9 + 7 0 h120 -83.720 -725.040 0 -2 -5 9 + 7 0 h120 0.000 -580.032 0 -2 -4 9 + 7 0 h120 83.720 -435.024 0 -2 -3 8 + 7 0 h120 418.602 145.008 0 -2 1 5 + 7 0 h120 502.322 290.016 0 -2 2 5 + 7 0 h120 586.043 435.024 0 -2 3 4 + 7 0 h120 669.763 580.032 0 -2 4 4 + 7 0 h120 -334.882 -870.048 0 -1 -6 9 + 7 0 h120 -251.161 -725.040 0 -1 -5 9 + 7 0 h120 -167.441 -580.032 0 -1 -4 9 + 7 0 h120 -83.720 -435.024 0 -1 -3 9 + 7 0 h120 334.882 290.016 0 -1 2 4 + 7 0 h120 418.602 435.024 0 -1 3 4 + 7 0 h120 502.322 580.032 0 -1 4 4 + 7 0 h120 586.043 725.040 0 -1 5 4 + 7 0 h120 -418.602 -725.040 0 0 -510 + 7 0 h120 -334.882 -580.032 0 0 -410 + 7 0 h120 -251.161 -435.024 0 0 -310 + 7 0 h120 251.161 435.024 0 0 3 3 + 7 0 h120 334.882 580.032 0 0 4 3 + 7 0 h120 418.602 725.040 0 0 5 3 + 7 0 h120 -586.043 -725.040 0 1 -510 + 7 0 h120 -502.322 -580.032 0 1 -410 + 7 0 h120 -418.602 -435.024 0 1 -310 + 7 0 h120 -334.882 -290.016 0 1 -210 + 7 0 h120 83.720 435.024 0 1 3 3 + 7 0 h120 167.441 580.032 0 1 4 3 + 7 0 h120 251.161 725.040 0 1 5 3 + 7 0 h120 334.882 870.048 0 1 6 3 + 7 0 h120 -669.763 -580.032 0 2 -410 + 7 0 h120 -586.043 -435.024 0 2 -310 + 7 0 h120 -502.322 -290.016 0 2 -211 + 7 0 h120 -418.602 -145.008 0 2 -111 + 7 0 h120 -83.720 435.024 0 2 3 2 + 7 0 h120 0.000 580.032 0 2 4 3 + 7 0 h120 83.720 725.040 0 2 5 3 + 7 0 h120 167.441 870.048 0 2 6 3 + 7 0 h120 -753.484 -435.024 0 3 -311 + 7 0 h120 -669.763 -290.016 0 3 -211 + 7 0 h120 -586.043 -145.008 0 3 -111 + 7 0 h120 -502.322 0.000 0 3 0 0 + 7 0 h120 -418.602 145.008 0 3 1 0 + 7 0 h120 -334.882 290.016 0 3 2 1 + 7 0 h120 -251.161 435.024 0 3 3 2 + 7 0 h120 -167.441 580.032 0 3 4 2 + 7 0 h120 -83.720 725.040 0 3 5 2 + 7 0 h120 0.000 870.048 0 3 6 3 + 7 0 h120 -837.204 -290.016 0 4 -211 + 7 0 h120 -753.484 -145.008 0 4 -111 + 7 0 h120 -669.763 0.000 0 4 0 0 + 7 0 h120 -586.043 145.008 0 4 1 0 + 7 0 h120 -502.322 290.016 0 4 2 1 + 7 0 h120 -418.602 435.024 0 4 3 1 + 7 0 h120 -334.882 580.032 0 4 4 2 + 7 0 h120 -251.161 725.040 0 4 5 2 + 7 0 h120 -167.441 870.048 0 4 6 2 + 7 0 h120 -920.924 -145.008 0 5 -111 + 7 0 h120 -837.204 0.000 0 5 0 0 + 7 0 h120 -753.484 145.008 0 5 1 0 + 7 0 h120 -669.763 290.016 0 5 2 0 + 7 0 h120 -586.043 435.024 0 5 3 1 + 7 0 h120 -502.322 580.032 0 5 4 1 + 7 0 h120 -418.602 725.040 0 5 5 2 + 7 0 h120 -334.882 870.048 0 5 6 2 + 7 0 h120 -920.924 145.008 0 6 1 0 + 7 0 h120 -837.204 290.016 0 6 2 0 + 7 0 h120 -753.484 435.024 0 6 3 1 + 7 0 h120 -669.763 580.032 0 6 4 1 + 7 0 h120 -586.043 725.040 0 6 5 1 + 8 0 h120 586.043 -725.040 0 -6 -5 7 + 8 0 h120 669.763 -580.032 0 -6 -4 7 + 8 0 h120 753.484 -435.024 0 -6 -3 7 + 8 0 h120 837.204 -290.016 0 -6 -2 6 + 8 0 h120 920.924 -145.008 0 -6 -1 6 + 8 0 h120 334.882 -870.048 0 -5 -6 8 + 8 0 h120 418.602 -725.040 0 -5 -5 8 + 8 0 h120 502.322 -580.032 0 -5 -4 7 + 8 0 h120 586.043 -435.024 0 -5 -3 7 + 8 0 h120 669.763 -290.016 0 -5 -2 6 + 8 0 h120 753.484 -145.008 0 -5 -1 6 + 8 0 h120 837.204 0.000 0 -5 0 6 + 8 0 h120 920.924 145.008 0 -5 1 5 + 8 0 h120 167.441 -870.048 0 -4 -6 8 + 8 0 h120 251.161 -725.040 0 -4 -5 8 + 8 0 h120 334.882 -580.032 0 -4 -4 8 + 8 0 h120 418.602 -435.024 0 -4 -3 7 + 8 0 h120 502.322 -290.016 0 -4 -2 7 + 8 0 h120 586.043 -145.008 0 -4 -1 6 + 8 0 h120 669.763 0.000 0 -4 0 6 + 8 0 h120 753.484 145.008 0 -4 1 5 + 8 0 h120 837.204 290.016 0 -4 2 5 + 8 0 h120 0.000 -870.048 0 -3 -6 9 + 8 0 h120 83.720 -725.040 0 -3 -5 8 + 8 0 h120 167.441 -580.032 0 -3 -4 8 + 8 0 h120 251.161 -435.024 0 -3 -3 8 + 8 0 h120 334.882 -290.016 0 -3 -2 7 + 8 0 h120 418.602 -145.008 0 -3 -1 6 + 8 0 h120 502.322 0.000 0 -3 0 6 + 8 0 h120 586.043 145.008 0 -3 1 5 + 8 0 h120 669.763 290.016 0 -3 2 5 + 8 0 h120 753.484 435.024 0 -3 3 5 + 8 0 h120 -167.441 -870.048 0 -2 -6 9 + 8 0 h120 -83.720 -725.040 0 -2 -5 9 + 8 0 h120 0.000 -580.032 0 -2 -4 9 + 8 0 h120 83.720 -435.024 0 -2 -3 8 + 8 0 h120 418.602 145.008 0 -2 1 5 + 8 0 h120 502.322 290.016 0 -2 2 5 + 8 0 h120 586.043 435.024 0 -2 3 4 + 8 0 h120 669.763 580.032 0 -2 4 4 + 8 0 h120 -334.882 -870.048 0 -1 -6 9 + 8 0 h120 -251.161 -725.040 0 -1 -5 9 + 8 0 h120 -167.441 -580.032 0 -1 -4 9 + 8 0 h120 -83.720 -435.024 0 -1 -3 9 + 8 0 h120 334.882 290.016 0 -1 2 4 + 8 0 h120 418.602 435.024 0 -1 3 4 + 8 0 h120 502.322 580.032 0 -1 4 4 + 8 0 h120 586.043 725.040 0 -1 5 4 + 8 0 h120 -418.602 -725.040 0 0 -510 + 8 0 h120 -334.882 -580.032 0 0 -410 + 8 0 h120 -251.161 -435.024 0 0 -310 + 8 0 h120 251.161 435.024 0 0 3 3 + 8 0 h120 334.882 580.032 0 0 4 3 + 8 0 h120 418.602 725.040 0 0 5 3 + 8 0 h120 -586.043 -725.040 0 1 -510 + 8 0 h120 -502.322 -580.032 0 1 -410 + 8 0 h120 -418.602 -435.024 0 1 -310 + 8 0 h120 -334.882 -290.016 0 1 -210 + 8 0 h120 83.720 435.024 0 1 3 3 + 8 0 h120 167.441 580.032 0 1 4 3 + 8 0 h120 251.161 725.040 0 1 5 3 + 8 0 h120 334.882 870.048 0 1 6 3 + 8 0 h120 -669.763 -580.032 0 2 -410 + 8 0 h120 -586.043 -435.024 0 2 -310 + 8 0 h120 -502.322 -290.016 0 2 -211 + 8 0 h120 -418.602 -145.008 0 2 -111 + 8 0 h120 -83.720 435.024 0 2 3 2 + 8 0 h120 0.000 580.032 0 2 4 3 + 8 0 h120 83.720 725.040 0 2 5 3 + 8 0 h120 167.441 870.048 0 2 6 3 + 8 0 h120 -753.484 -435.024 0 3 -311 + 8 0 h120 -669.763 -290.016 0 3 -211 + 8 0 h120 -586.043 -145.008 0 3 -111 + 8 0 h120 -502.322 0.000 0 3 0 0 + 8 0 h120 -418.602 145.008 0 3 1 0 + 8 0 h120 -334.882 290.016 0 3 2 1 + 8 0 h120 -251.161 435.024 0 3 3 2 + 8 0 h120 -167.441 580.032 0 3 4 2 + 8 0 h120 -83.720 725.040 0 3 5 2 + 8 0 h120 0.000 870.048 0 3 6 3 + 8 0 h120 -837.204 -290.016 0 4 -211 + 8 0 h120 -753.484 -145.008 0 4 -111 + 8 0 h120 -669.763 0.000 0 4 0 0 + 8 0 h120 -586.043 145.008 0 4 1 0 + 8 0 h120 -502.322 290.016 0 4 2 1 + 8 0 h120 -418.602 435.024 0 4 3 1 + 8 0 h120 -334.882 580.032 0 4 4 2 + 8 0 h120 -251.161 725.040 0 4 5 2 + 8 0 h120 -167.441 870.048 0 4 6 2 + 8 0 h120 -920.924 -145.008 0 5 -111 + 8 0 h120 -837.204 0.000 0 5 0 0 + 8 0 h120 -753.484 145.008 0 5 1 0 + 8 0 h120 -669.763 290.016 0 5 2 0 + 8 0 h120 -586.043 435.024 0 5 3 1 + 8 0 h120 -502.322 580.032 0 5 4 1 + 8 0 h120 -418.602 725.040 0 5 5 2 + 8 0 h120 -334.882 870.048 0 5 6 2 + 8 0 h120 -920.924 145.008 0 6 1 0 + 8 0 h120 -837.204 290.016 0 6 2 0 + 8 0 h120 -753.484 435.024 0 6 3 1 + 8 0 h120 -669.763 580.032 0 6 4 1 + 8 0 h120 -586.043 725.040 0 6 5 1 diff --git a/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py b/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py index 5269ea7b7b59a..3266781367a4c 100644 --- a/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py +++ b/Geometry/ForwardCommonData/test/dumpHFNoseGeometry_cfg.py @@ -7,7 +7,7 @@ if 'MessageLogger' in process.__dict__: process.MessageLogger.G4cerr=dict() process.MessageLogger.G4cout=dict() - process.MessageLogger.HGCalGeom=dict() + process.MessageLogger.HGCalGeomX=dict() process.source = cms.Source("EmptySource") diff --git a/Geometry/HGCalCommonData/data/hgcalCons/v18n/hgcalCons.xml b/Geometry/HGCalCommonData/data/hgcalCons/v18n/hgcalCons.xml new file mode 100644 index 0000000000000..6977b9777964f --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalCons/v18n/hgcalCons.xml @@ -0,0 +1,231 @@ + + + + + + + [hgcal:radMixL0], [hgcal:radMixL1], [hgcal:radMixL2], [hgcal:radMixL3], + [hgcal:radMixL4], [hgcal:radMixL5], [hgcal:radMixL6], [hgcal:radMixL7], + [hgcal:radMixL8], [hgcal:radMixL9], [hgcal:radMixL10],[hgcal:radMixL11], + [hgcal:radMixL12],[hgcal:radMixL13] + + + [hgcal:zHGCalEE1], [hgcal:zHGCalHEsil1], [hgcal:zHGCalHEmix1], + [hgcal:zHGCalHEmix6] + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 6, 0, 6, 0, 6, 0, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 + + + [hgcal:CalibCellRHD], [hgcal:CalibCellRLD] + + 203, 209, 514, 902, 908, 1114, 1321, 1404, 1512, 1921, 2010, 2118 + + + 202, 208, 615, 802, 807, 1115, 1221, 1505, 1612, 1821, 2111, 2117 + + + 104, 509, 603, 1104, 1114, 1210 + + + 103, 508, 704, 1014, 1110, 1205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalCommonData/data/hgcalwafer/v18n/hgcalwafer.xml b/Geometry/HGCalCommonData/data/hgcalwafer/v18n/hgcalwafer.xml new file mode 100644 index 0000000000000..ee45ade370de5 --- /dev/null +++ b/Geometry/HGCalCommonData/data/hgcalwafer/v18n/hgcalwafer.xml @@ -0,0 +1,899 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 6, 4, 5, 4, 7 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 7, 4, 5, 4, 6, 4, 3, 2, 1, 0 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 6, 4, 5, 4, 7 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 7, 4, 5, 4, 6, 4, 3, 2, 1, 0 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 6, 4, 5, 4, 7 + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 7, 4, 5, 4, 6, 4, 3, 2, 1, 0 + + + + + + + + + + + + + HD1, HD2, HD3, HD4, HD5 + + 21, 22, 23, 24, 25 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + + HD1, HD2, HD3, HD4, HD5 + + 21, 22, 23, 24, 25 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalEEAirGap, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_EEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Epoxy, + materials:Kapton, materials:Silicon, hgcalMaterial:WCu + + 0.225*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 1.40*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + + + + + + + + + + HD1, HD2, HD3, HD4, HD5 + + 21, 22, 23, 24, 25 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 7, 4, 5, 4, 6, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + + HD1, HD2, HD3, HD4, HD5 + + 21, 22, 23, 24, 25 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 6, 4, 5, 4, 7 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 7, 4, 5, 4, 6, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 6, 4, 5, 4, 7 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 7, 4, 5, 4, 6, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalHEAirGap, HGCalHEPCB, HGCalHEConnector, HGCalHEMotherBoard, + HGCalHEEpoxy, HGCalHEKapton, HGCalHESiliconSensitive, + HGCalHEBasePlate + + materials:Air, hgcalMaterial:HGC_G10-FR4, hgcalMaterial:HGC_HEConnector, + hgcalMaterial:HGC_G10-FR4, materials:Epoxy, materials:Kapton, + materials:Silicon, hgcalMaterial:HGC_G10-FR4 + + 0.40*mm, 1.60*mm, 3.475*mm, 1.60*mm, 0.075*mm, 0.10*mm, + [WaferThickness], 1.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], 0.30*mm, + [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 6, 4, 5, 4, 7 + + + + + + diff --git a/Geometry/HGCalCommonData/data/partialD104.txt b/Geometry/HGCalCommonData/data/partialD104.txt new file mode 100644 index 0000000000000..1bdf6862b198b --- /dev/null +++ b/Geometry/HGCalCommonData/data/partialD104.txt @@ -0,0 +1,45 @@ + 9 1 6 -1 -1 308.049 209.086 -3994.98 + 9 1 4 -1 -1 335.074 154.066 -3868.88 + 9 1 6 -1 1 -335.105 -158.102 3994.98 + 9 1 4 -1 -1 -285.988 221.769 -3868.88 + 9 1 6 -1 1 335.064 140.107 3994.98 + 9 1 6 -1 -1 -288.685 220.255 -3995.16 + 9 1 4 -1 -1 297.656 215.100 -3868.88 + 9 1 6 -1 -1 307.150 -209.576 -3994.98 + 9 1 4 -1 -1 -354.842 204.871 -3868.88 + 9 1 2 -1 1 -335.089 -175.345 3742.81 + 9 1 4 -1 1 37.9192 364.992 3869.06 + 9 1 2 -1 1 46.9765 -359.761 3742.91 + 9 1 6 -1 1 290.144 219.352 3994.98 + 9 1 2 -1 -1 -10.5313 -380.793 -3742.78 + 9 1 6 -1 1 -17.9776 -376.520 3994.98 + 9 1 4 -1 1 -54.3393 -355.577 3868.88 + 9 1 4 -1 1 -53.9806 -355.805 3868.88 + 9 1 2 -1 1 8.28108 -382.182 3742.78 + 9 1 4 -1 -1 -335.120 156.472 -3868.88 + 9 1 4 -1 -1 -335.124 157.550 -3868.88 + 9 1 4 -1 -1 -335.078 154.492 -3868.88 + 9 1 4 -1 -1 -335.092 147.285 -3868.88 + 9 1 4 -1 1 34.5140 -366.963 3869.04 + 9 1 2 -1 1 289.634 -219.677 3742.78 + 9 1 2 -1 1 289.763 -219.624 3742.80 + 9 1 2 -1 1 -59.0897 352.848 3742.78 + 9 1 2 -1 -1 300.848 213.254 -3742.78 + 9 1 6 -1 -1 320.348 202.006 -3994.98 + 9 1 2 -1 1 335.061 153.806 3742.78 + 9 1 2 -1 -1 356.526 -205.842 -3742.96 + 9 1 2 -1 1 352.943 203.829 3742.78 + 9 1 2 -1 -1 -335.113 -171.174 -3742.78 + 9 1 4 -1 -1 -352.450 203.513 -3869.00 + 9 1 4 -1 -1 37.4524 -365.266 -3868.88 + 9 1 4 -1 -1 40.0469 -363.770 -3868.88 + 9 1 4 -1 -1 43.3976 -361.828 -3868.88 + 9 1 2 -1 -1 31.7329 -368.647 -3742.83 + 9 1 6 -1 -1 335.093 171.659 -3994.98 + 9 1 2 -1 -1 -46.5103 360.121 -3742.78 + 9 1 2 -1 -1 -47.1247 359.706 -3742.96 + 9 1 4 -1 1 335.093 154.486 3868.88 + 9 1 4 -1 -1 324.283 199.686 -3868.89 + 9 1 4 -1 1 43.8836 361.599 3869.06 + 9 1 4 -1 -1 35.8307 -366.244 -3869.06 + 9 1 2 -1 1 7.92060 -382.398 3742.78 diff --git a/Geometry/HGCalCommonData/interface/HGCalTypes.h b/Geometry/HGCalCommonData/interface/HGCalTypes.h index 9dedc8e49bd15..d8393326a7602 100644 --- a/Geometry/HGCalCommonData/interface/HGCalTypes.h +++ b/Geometry/HGCalCommonData/interface/HGCalTypes.h @@ -94,17 +94,22 @@ class HGCalTypes { static constexpr double c00 = 0.0; static constexpr double c22O = 0.225; + static constexpr double c221 = 0.2083; static constexpr double c22 = 0.1944; static constexpr double c25 = 0.25; static constexpr double c27O = 0.275; + static constexpr double c271 = 0.2917; static constexpr double c27 = 0.3056; static constexpr double c50 = 0.5; static constexpr double c61O = 0.6125; + static constexpr double c611 = 0.6042; static constexpr double c61 = 0.59722; static constexpr double c75 = 0.75; static constexpr double c77O = 0.775; + static constexpr double c771 = 0.7917; static constexpr double c77 = 0.8055; static constexpr double c88O = 0.8875; + static constexpr double c881 = 0.8958; static constexpr double c88 = 0.90277; static constexpr double c10 = 1.0; diff --git a/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc b/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc index 418b9ba12029b..23bb7b997149d 100644 --- a/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc +++ b/Geometry/HGCalCommonData/plugins/DDHGCalEEAlgo.cc @@ -351,6 +351,11 @@ void DDHGCalEEAlgo::positionSensitive(const DDLogicalPart& glog, int layercenter, DDCompactView& cpv) { static const double sqrt3 = std::sqrt(3.0); +#ifdef EDM_ML_DEBUG + std::vector zl = {10000., 10494., 10536., 10578., 10619., 10661., 10702., 10791., 10879.}; + auto il = std::lower_bound(zl.begin(), zl.end(), zpos); + int layer = static_cast(il - zl.begin()); +#endif double r = 0.5 * (waferSize_ + waferSepar_); double R = 2.0 * r / sqrt3; double dy = 0.75 * R; @@ -408,6 +413,20 @@ void DDHGCalEEAlgo::positionSensitive(const DDLogicalPart& glog, DDName name = DDName(DDSplit(wafers_[type]).first, DDSplit(wafers_[type]).second); cpv.position(name, glog.ddname(), copy, tran, rotation); #ifdef EDM_ML_DEBUG + static const std::vector thickstr = {"h120", "l200", "l300", "h200"}; + char posit[20]; + sprintf(posit, "%8.3f %8.3f", xpos, ypos); + double phi = convertRadToDeg(std::atan2(ypos, -xpos)); + if (phi < 0) + phi += 360.0; + int cass = (layer < 7) ? static_cast(phi / 60.0) : static_cast(phi / 30.0); + edm::LogVerbatim("HGCalGeomX") << std::setw(2) << layer << " " << std::setw(2) << HGCalTypes::WaferFull << " " + << thickstr[type] << " " << posit << " " << std::setw(2) + << HGCalTypes::WaferOrient0 << " " << std::setw(2) << u << " " << std::setw(2) + << v << std::setw(2) << cass; + edm::LogVerbatim("HGCalGeom") << " DDEHGCalEEAlgo " << name << " Number " << copy << " u|v " << u << ":" << v + << " Poaition " << xpos << ":" << ypos << ":" << zpos << " Angle " + << convertRadToDeg(std::atan2(ypos, -xpos)); ++ntype[type]; edm::LogVerbatim("HGCalGeom") << " DDHGCalEEAlgo: " << name << " number " << copy << " positioned in " << glog.ddname() << " at " << tran << " with no rotation"; diff --git a/Geometry/HGCalCommonData/python/testHGCalV18nXML_cfi.py b/Geometry/HGCalCommonData/python/testHGCalV18nXML_cfi.py new file mode 100644 index 0000000000000..59cadb36977e1 --- /dev/null +++ b/Geometry/HGCalCommonData/python/testHGCalV18nXML_cfi.py @@ -0,0 +1,125 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring( + 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml', + 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml', + 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml', + 'Geometry/CMSCommonData/data/cmsMother.xml', + 'Geometry/CMSCommonData/data/eta3/etaMax.xml', + 'Geometry/CMSCommonData/data/cmsTracker.xml', + 'Geometry/CMSCommonData/data/caloBase/2026/v7/caloBase.xml', + 'Geometry/CMSCommonData/data/cmsCalo.xml', + 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml', + 'Geometry/CMSCommonData/data/cmsMuon.xml', + 'Geometry/CMSCommonData/data/mgnt.xml', + 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml', + 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml', + 'Geometry/CMSCommonData/data/muonMB.xml', + 'Geometry/CMSCommonData/data/muonMagnet.xml', + 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml', + 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml', + 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml', + 'Geometry/TrackerCommonData/data/pixfwdCommon.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/pixbar.xml', + 'Geometry/TrackerCommonData/data/trackermaterial.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml', + 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixel.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml', + 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml', + 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelStructureTopology.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelsens.xml', + 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerRecoMaterial.xml', + 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v1/trackingMaterialGroups_ForPhaseII.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml', + 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixelProdCuts.xml', + 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml', + 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml', + 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml', + 'Geometry/EcalCommonData/data/ectkcablemat/2026/v2/ectkcablemat.xml', + 'Geometry/EcalCommonData/data/ebalgo.xml', + 'Geometry/EcalCommonData/data/ebcon/2021/v1/ebcon.xml', + 'Geometry/EcalCommonData/data/ebrot.xml', + 'Geometry/HcalCommonData/data/hcalrotations.xml', + 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml', + 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml', + 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml', + 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml', + 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml', + 'Geometry/HcalCommonData/data/hcalforwardalgo.xml', + 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/v1/hcalSimNumbering.xml', + 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/v2/hcalRecNumbering.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', + 'Geometry/HGCalCommonData/data/hgcal/v18/hgcal.xml', + 'Geometry/HGCalCommonData/data/hgcalwafer/v18n/hgcalwafer.xml', + 'Geometry/HGCalCommonData/data/hgcalPassive/v18/hgcalPassive.xml', + 'Geometry/HGCalCommonData/data/hgcalEE/v18/hgcalEE.xml', + 'Geometry/HGCalCommonData/data/hgcalHEsil/v18/hgcalHEsil.xml', + 'Geometry/HGCalCommonData/data/hgcalHEmix/v18/hgcalHEmix.xml', + 'Geometry/HGCalCommonData/data/hgcalCons/v18n/hgcalCons.xml', + 'Geometry/HGCalCommonData/data/hgcalConsData/v17/hgcalConsData.xml', + 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml', + 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml', + 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml', + 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml', + 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml', + 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml', + 'Geometry/MuonCommonData/data/muonYoke/2026/v3/muonYoke.xml', + 'Geometry/MuonCommonData/data/mf/2026/v8/mf.xml', + 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml', + 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml', + 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml', + 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml', + 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml', + 'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml', + 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml', + 'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml', + 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml', + 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml', + 'Geometry/ForwardCommonData/data/lumimaterials.xml', + 'Geometry/ForwardCommonData/data/zdcrotations.xml', + 'Geometry/ForwardCommonData/data/lumirotations.xml', + 'Geometry/ForwardCommonData/data/zdc/2026/v1/zdc.xml', + 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml', + 'Geometry/ForwardCommonData/data/cmszdc.xml', + 'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml', + 'Geometry/MTDCommonData/data/btl/v1/btl.xml', + 'Geometry/MTDCommonData/data/etl/v7/etl.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml', + 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml', + )+ + cms.vstring( + 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml', + 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml', + 'Geometry/HcalCommonData/data/hcalsens/NoHE/v1/hcalsenspmf.xml', + 'Geometry/HcalSimData/data/hf.xml', + 'Geometry/HcalSimData/data/hfpmt.xml', + 'Geometry/HcalSimData/data/hffibrebundle.xml', + 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml', + 'Geometry/HGCalSimData/data/hgcsensv17n.xml', + 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml', + 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml', + 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml', + 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml', + 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml', + 'Geometry/ForwardSimData/data/zdcsens.xml', + 'Geometry/MTDSimData/data/v2/mtdsens.xml', + 'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml', + 'Geometry/EcalSimData/data/EcalProdCuts.xml', + 'Geometry/HGCalSimData/data/hgcProdCutsv15.xml', + 'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml', + 'Geometry/ForwardSimData/data/zdcProdCuts.xml', + 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml', + 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml', + 'Geometry/CMSCommonData/data/FieldParameters.xml' + ), + rootNodeName = cms.string('cms:OCMS') +) diff --git a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc index 800f92a0a90ad..463d951c25cd7 100644 --- a/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc +++ b/Geometry/HGCalCommonData/src/HGCalDDDConstants.cc @@ -1457,7 +1457,9 @@ void HGCalDDDConstants::waferFromPosition(const double x, bool extend, bool debug) const { // Expect x, y as in SIM step - waferU = waferV = 1 + hgpar_->waferUVMax_; + bool waferin = ((waferU == 0) && (waferV == 0)); + if (waferin) + waferU = waferV = 1 + hgpar_->waferUVMax_; cellU = cellV = celltype = 0; if ((hgpar_->xLayerHex_.empty()) || (hgpar_->yLayerHex_.empty())) return; @@ -1476,29 +1478,91 @@ void HGCalDDDConstants::waferFromPosition(const double x, } if (debug) edm::LogVerbatim("HGCalGeom") << "waferFromPosition:: Layer " << layer << ":" << ll << " Rot " << rotx << " X " << x - << ":" << xx << " Y " << y << ":" << yy << " side " << zside << " extend " << extend; + << ":" << xx << " Y " << y << ":" << yy << " side " << zside << " extend " << extend + << " initial wafer index " << waferU << ":" << waferV; + ; double rmax = extend ? rmaxT_ : rmax_; double hexside = extend ? hexsideT_ : hexside_; - for (unsigned int k = 0; k < hgpar_->waferPosX_.size(); ++k) { - double dx0(0), dy0(0); - waferU = HGCalWaferIndex::waferU(hgpar_->waferCopy_[k]); - waferV = HGCalWaferIndex::waferV(hgpar_->waferCopy_[k]); - if (cassetteMode()) { - int indx = HGCalWaferIndex::waferIndex(layer, waferU, waferV); - auto ktr = hgpar_->waferInfoMap_.find(indx); - if (ktr != hgpar_->waferInfoMap_.end()) { - auto cshift = hgcassette_.getShift(layer, -1, (ktr->second).cassette); - if (debug) - edm::LogVerbatim("HGCalGeom") << "Cassette " << (ktr->second).cassette << " Shift " << cshift.first << ":" - << cshift.second; - dx0 = -cshift.first; - dy0 = cshift.second; + if (waferin) { + double tolmin(100.0); + for (unsigned int k = 0; k < hgpar_->waferPosX_.size(); ++k) { + double dx0(0), dy0(0); + waferU = HGCalWaferIndex::waferU(hgpar_->waferCopy_[k]); + waferV = HGCalWaferIndex::waferV(hgpar_->waferCopy_[k]); + if (cassetteMode()) { + int indx = HGCalWaferIndex::waferIndex(layer, waferU, waferV); + auto ktr = hgpar_->waferInfoMap_.find(indx); + if (ktr != hgpar_->waferInfoMap_.end()) { + auto cshift = hgcassette_.getShift(layer, -1, (ktr->second).cassette); + if (debug) + edm::LogVerbatim("HGCalGeom") + << "Cassette " << (ktr->second).cassette << " Shift " << cshift.first << ":" << cshift.second; + dx0 = -cshift.first; + dy0 = cshift.second; + } + } + double dx = std::abs(xx - dx0 - hgpar_->waferPosX_[k]); + double dy = std::abs(yy - dy0 - hgpar_->waferPosY_[k]); + constexpr double tolc = 0.01; + if (debug) { + edm::LogVerbatim("HGCalGeom") << "Wafer " << waferU << ":" << waferV << " position " << xx << ":" << yy + << " Distance " << dx << ":" << dy << " diff0 " << (dx - rmax) << ":" + << (dy - hexside) << " diff1 " << (dy - 0.5 * hexside) << ":" + << (dx * tan30deg_ - (hexside - dy)); + if ((dx - rmax) <= tolc && (dy - hexside) <= tolc) { + tolmin = std::min(tolmin, (dy - 0.5 * hexside)); + tolmin = std::min(tolmin, (dx * tan30deg_ - (hexside - dy))); + } + } + if ((dx - rmax) <= tolc && (dy - hexside) <= tolc) { + if (((dy - 0.5 * hexside) <= tolc) || ((dx * tan30deg_ - (hexside - dy)) <= tolc)) { + if (waferHexagon8File()) { + int index = HGCalWaferIndex::waferIndex(layer, waferU, waferV); + celltype = HGCalWaferType::getType(index, hgpar_->waferInfoMap_); + if (debug) + edm::LogVerbatim("HGCalGeom") + << "Position (" << x << ", " << y << ") Wafer type:partial:orient:cassette " << celltype << ":" + << HGCalWaferType::getPartial(index, hgpar_->waferInfoMap_) << ":" + << HGCalWaferType::getOrient(index, hgpar_->waferInfoMap_) << ":" + << HGCalWaferType::getCassette(index, hgpar_->waferInfoMap_); + } else { + auto itr = hgpar_->typesInLayers_.find(HGCalWaferIndex::waferIndex(layer, waferU, waferV)); + celltype = ((itr == hgpar_->typesInLayers_.end()) ? HGCSiliconDetId::HGCalCoarseThick + : hgpar_->waferTypeL_[itr->second]); + } + if (debug) + edm::LogVerbatim("HGCalGeom") + << "WaferFromPosition:: Input " << layer << ":" << ll << ":" << hgpar_->firstLayer_ << ":" << rotx + << ":" << x << ":" << y << ":" << hgpar_->xLayerHex_[ll] << ":" << hgpar_->yLayerHex_[ll] << ":" << xx + << ":" << yy << " compared with " << hgpar_->waferPosX_[k] << ":" << hgpar_->waferPosY_[k] + << " difference " << dx << ":" << dy << ":" << dx * tan30deg_ << ":" << (hexside_ - dy) + << " comparator " << rmax_ << ":" << rmaxT_ << ":" << hexside_ << ":" << hexsideT_ << " wafer " + << waferU << ":" << waferV << ":" << celltype; + xx -= (dx0 + hgpar_->waferPosX_[k]); + yy -= (dy0 + hgpar_->waferPosY_[k]); + break; + } } } - double dx = std::abs(xx - dx0 - hgpar_->waferPosX_[k]); - double dy = std::abs(yy - dy0 - hgpar_->waferPosY_[k]); - if (dx <= rmax && dy <= hexside) { - if ((dy <= 0.5 * hexside) || (dx * tan30deg_ <= (hexside - dy))) { + if (debug) + edm::LogVerbatim("HGCalGeom") << "Tolmin " << tolmin; + } else { + for (unsigned int k = 0; k < hgpar_->waferPosX_.size(); ++k) { + double dx0(0), dy0(0); + if ((waferU == HGCalWaferIndex::waferU(hgpar_->waferCopy_[k])) && + (waferV == HGCalWaferIndex::waferV(hgpar_->waferCopy_[k]))) { + if (cassetteMode()) { + int indx = HGCalWaferIndex::waferIndex(layer, waferU, waferV); + auto ktr = hgpar_->waferInfoMap_.find(indx); + if (ktr != hgpar_->waferInfoMap_.end()) { + auto cshift = hgcassette_.getShift(layer, -1, (ktr->second).cassette); + if (debug) + edm::LogVerbatim("HGCalGeom") + << "Cassette " << (ktr->second).cassette << " Shift " << cshift.first << ":" << cshift.second; + dx0 = -cshift.first; + dy0 = cshift.second; + } + } if (waferHexagon8File()) { int index = HGCalWaferIndex::waferIndex(layer, waferU, waferV); celltype = HGCalWaferType::getType(index, hgpar_->waferInfoMap_); @@ -1512,15 +1576,6 @@ void HGCalDDDConstants::waferFromPosition(const double x, celltype = ((itr == hgpar_->typesInLayers_.end()) ? HGCSiliconDetId::HGCalCoarseThick : hgpar_->waferTypeL_[itr->second]); } - if (debug) - edm::LogVerbatim("HGCalGeom") << "WaferFromPosition:: Input " << layer << ":" << ll << ":" - << hgpar_->firstLayer_ << ":" << rotx << ":" << x << ":" << y << ":" - << hgpar_->xLayerHex_[ll] << ":" << hgpar_->yLayerHex_[ll] << ":" << xx << ":" - << yy << " compared with " << hgpar_->waferPosX_[k] << ":" - << hgpar_->waferPosY_[k] << " difference " << dx << ":" << dy << ":" - << dx * tan30deg_ << ":" << (hexside_ - dy) << " comparator " << rmax_ << ":" - << rmaxT_ << ":" << hexside_ << ":" << hexsideT_ << " wafer " << waferU << ":" - << waferV << ":" << celltype; xx -= (dx0 + hgpar_->waferPosX_[k]); yy -= (dy0 + hgpar_->waferPosY_[k]); break; diff --git a/Geometry/HGCalCommonData/src/HGCalWaferMask.cc b/Geometry/HGCalCommonData/src/HGCalWaferMask.cc index fe731faa2cf2b..03e8f7f440a55 100644 --- a/Geometry/HGCalCommonData/src/HGCalWaferMask.cc +++ b/Geometry/HGCalCommonData/src/HGCalWaferMask.cc @@ -1457,12 +1457,19 @@ std::vector > HGCalWaferMask::waferXY(const int& part, #endif double c22(HGCalTypes::c22), c27(HGCalTypes::c27), c61(HGCalTypes::c61); double c77(HGCalTypes::c77), c88(HGCalTypes::c88); + double c221(HGCalTypes::c221), c271(HGCalTypes::c271), c611(HGCalTypes::c611); + double c771(HGCalTypes::c771), c881(HGCalTypes::c881); if (v17OrLess) { c22 = HGCalTypes::c22O; c27 = HGCalTypes::c27O; c61 = HGCalTypes::c61O; c77 = HGCalTypes::c77O; c88 = HGCalTypes::c88O; + c221 = c22; + c271 = c27; + c611 = c61; + c771 = c77; + c881 = c88; } /* The exact contour of partial wafers are obtained by joining points on @@ -1501,17 +1508,17 @@ std::vector > HGCalWaferMask::waferXY(const int& part, -HGCalTypes::c50 * delX, -HGCalTypes::c10 * delX, -HGCalTypes::c50 * delX, - c22 * delX, + c221 * delX, HGCalTypes::c10 * delX, - c77 * delX, - -c22 * delX, + c771 * delX, + -c221 * delX, -HGCalTypes::c10 * delX, - -c77 * delX, - c22 * delX, - -c77 * delX, + -c771 * delX, + c221 * delX, + -c771 * delX, -HGCalTypes::c10 * delX, - -c22 * delX, - c77 * delX, + -c221 * delX, + c771 * delX, HGCalTypes::c10 * delX, c22 * delX, HGCalTypes::c10 * delX, @@ -1563,18 +1570,18 @@ std::vector > HGCalWaferMask::waferXY(const int& part, HGCalTypes::c75 * delY, HGCalTypes::c00 * delY, -HGCalTypes::c75 * delY, - -c88 * delY, - -c27 * delY, - c61 * delY, - c88 * delY, - c27 * delY, - -c61 * delY, - c88 * delY, - c61 * delY, - -c27 * delY, - -c88 * delY, - -c61 * delY, - c27 * delY, + -c881 * delY, + -c271 * delY, + c611 * delY, + c881 * delY, + c271 * delY, + -c611 * delY, + c881 * delY, + c611 * delY, + -c271 * delY, + -c881 * delY, + -c611 * delY, + c271 * delY, -c88 * delY, -c27 * delY, c61 * delY, @@ -1999,10 +2006,10 @@ std::vector > HGCalWaferMask::waferXY(const int& part, std::array HGCalWaferMask::maskCut( const int& part, const int& placement, const double& waferSize, const double& offset, const bool& v17OrLess) { - double c22(HGCalTypes::c22), c27(HGCalTypes::c27); + double c22(HGCalTypes::c22), c271(HGCalTypes::c271); if (v17OrLess) { c22 = HGCalTypes::c22O; - c27 = HGCalTypes::c27O; + c271 = HGCalTypes::c27O; } double delX = 0.5 * waferSize; double delY = 2 * delX / sqrt3_; @@ -2068,21 +2075,21 @@ std::array HGCalWaferMask::maskCut( case (HGCalTypes::WaferHDLeft): { criterion[0] = 1.0; criterion[1] = -tan_1[placement]; - criterion[2] = ((c27 * delY) / cos_1[placement]); + criterion[2] = ((c271 * delY) / cos_1[placement]); criterion[3] = tresh; break; } case (HGCalTypes::WaferHDRight): { criterion[0] = -1.0; criterion[1] = tan_1[placement]; - criterion[2] = -((c27 * delY) / cos_1[placement]); + criterion[2] = -((c271 * delY) / cos_1[placement]); criterion[3] = tresh; break; } case (HGCalTypes::WaferHDFive): { criterion[0] = -1.0; criterion[1] = tan_1[placement]; - criterion[2] = ((c27 * delY) / cos_1[placement]); + criterion[2] = ((c271 * delY) / cos_1[placement]); criterion[3] = tresh; break; } diff --git a/Geometry/HGCalCommonData/test/HGCalConvert.cpp b/Geometry/HGCalCommonData/test/HGCalConvert.cpp index b1596a5f32698..105050233612c 100644 --- a/Geometry/HGCalCommonData/test/HGCalConvert.cpp +++ b/Geometry/HGCalCommonData/test/HGCalConvert.cpp @@ -37,6 +37,20 @@ // debug (int) Two digit integer to set debug for each // of the outputs // +// HGCalConvert 4 infile outfile1 outfile2 modeGlobal debug +// 4 for the V18 formats of HFNose +// infile (const char*) Input file from conatining layer #, size, depth, +// x, y position, orientation, u, v, cassette +// outfile1 (const char*) Output fle for the EE part +// outfile2 (const char*) Output fle for the HE part +// maxLayEE (int) Maximum layer number of the EE part +// maxLayHE (int) Maximum layer number of the HE part +// modeGlobal (int) Flag to create parts to be inserted in the +// global section (0) or to be inserted in +// the ddAlgorithm part (1) +// debug (int) Two digit integer to set debug for each +// of the outputs (opional) +// ////////////////////////////////////////////////////////////////////////////// #include "Geometry/HGCalCommonData/interface/HGCalProperty.h" @@ -154,6 +168,23 @@ class ConvertScintillator { const int cassette_; }; +class ConvertNoseV0 { +public: + ConvertNoseV0(unsigned int layMax1 = 6, unsigned int layMax2 = 8); + void convert(const char* infile, const char* outfile1, const char* outfile2, int modeGlobal = 0, int debug = 0); + +private: + void writeNose(const char*, + const unsigned int, + const std::vector&, + const std::map&, + const std::string&, + const bool&, + const bool&); + + const unsigned int layMax1_, layMax2_; +}; + int main(int argc, char* argv[]) { if (argc < 7) { std::cout << "Please give a minimum of 7 arguments \n" @@ -170,12 +201,18 @@ int main(int argc, char* argv[]) { << " number of layers in the EE section: 28 or 26\n" << " flag to utilize cassette partition or not\n" << " debug flag\n" + << "for HFNose 4 additional parameters after the first 3\n" + << " second output file name\n" + << " maximum layer number of the EE section: 6\n" + << " maximum layer number of the HE section: 8\n" + << " output mode (0: gobal; 1: local)\n" << std::endl; return 0; } int mode = std::atoi(argv[1]); const char* infile = argv[2]; + int code(0); if (mode <= 2) { const char* outfile1 = argv[3]; const char* outfile2 = argv[4]; @@ -194,7 +231,7 @@ int main(int argc, char* argv[]) { ConvertSiliconV2 c1; c1.convert(infile, outfile1, outfile2, outfile3, modeGlobal, debug); } - } else { + } else if (mode == 3) { const char* outfile1 = argv[3]; const char* outfile2 = argv[4]; int laymin = atoi(argv[5]); @@ -204,8 +241,21 @@ int main(int argc, char* argv[]) { << " Laymin " << laymin << " Cassette " << cassette << " Debug " << debug << std::endl; ConvertScintillator c1(laymin, cassette); c1.convert(infile, outfile1, outfile2, debug); + } else if (mode == 4) { + const char* outfile1 = argv[3]; + const char* outfile2 = argv[4]; + int maxLayEE = atoi(argv[5]); + int maxLayHE = atoi(argv[6]); + int modeGlobal = atoi(argv[7]); + int debug = (argc > 7) ? atoi(argv[8]) : 0; + std::cout << "Calls ConvertNose for i/p file " << infile << " o/p files " << outfile1 << ":" << outfile2 + << " Layers " << maxLayEE << ":" << maxLayHE << " Mode " << modeGlobal << " Debug " << debug << std::endl; + ConvertNoseV0 c1(maxLayEE, maxLayHE); + c1.convert(infile, outfile1, outfile2, modeGlobal, debug); + } else { + code = 1; } - return 0; + return code; } std::vector splitString(const std::string& fLine) { @@ -1189,3 +1239,245 @@ void ConvertScintillator::makeTitle(const char* outfile, fout.close(); } } + +ConvertNoseV0::ConvertNoseV0(unsigned int layMax1, unsigned int layMax2) : layMax1_(layMax1), layMax2_(layMax2) { + std::cout << "ConvertNoseV0 Iniltailized with " << layMax1_ << ":" << layMax2_ << std::endl; +} + +void ConvertNoseV0::convert(const char* infile, const char* outfile1, const char* outfile2, int modeGlobal, int debug) { + std::ifstream fInput(infile); + if (!fInput.good()) { + std::cout << "Cannot open file " << infile << std::endl; + } else { + //First read in all records + char buffer[1024]; + const int thksize = 4; + std::string thick[thksize] = {"h120", "l200", "l300", "h200"}; + int addType[thksize] = {HGCalTypes::WaferFineThin, + HGCalTypes::WaferCoarseThin, + HGCalTypes::WaferCoarseThick, + HGCalTypes::WaferFineThick}; + const int partTypeH[6] = {HGCalTypes::WaferFull, + HGCalTypes::WaferHDTop, + HGCalTypes::WaferHDBottom, + HGCalTypes::WaferHDLeft, + HGCalTypes::WaferHDRight, + HGCalTypes::WaferHDFive}; + const int partTypeL[7] = {HGCalTypes::WaferFull, + HGCalTypes::WaferLDTop, + HGCalTypes::WaferLDBottom, + HGCalTypes::WaferLDLeft, + HGCalTypes::WaferLDRight, + HGCalTypes::WaferLDFive, + HGCalTypes::WaferLDThree}; + const unsigned int cassetteEE(12), cassetteHE(24); + std::map module1, module2; + unsigned int all(0), comments(0), others(0), bad(0), good(0); + unsigned int layers(layMax2_); + std::vector layer1, layer2; + int cminEE(-1), cmaxEE(-1), cminHE(-1), cmaxHE(-1); + bool global = (modeGlobal < 1); + while (fInput.getline(buffer, 1024)) { + ++all; + if (debug % 10 > 1) + std::cout << "[" << all << "] " << buffer << std::endl; + if (buffer[0] == '#') { + ++comments; + } else { + ++others; + std::vector items = splitString(std::string(buffer)); + if (others <= layMax2_) { + unsigned int cassettes = (others <= layMax1_) ? cassetteEE : cassetteHE; + if (items.size() < (cassettes + 2)) { + if (debug % 10 > 1) + std::cout << "Size " << items.size() << " expect >= " << (cassettes + 2) << std::endl; + ++bad; + } else { + int layer = std::atoi(items[0].c_str()); + int type = std::atoi(items[1].c_str()); + std::vector dR; + for (unsigned int k = 0; k < cassettes; ++k) + dR.emplace_back(std::atof(items[k + 2].c_str())); + layerInfo ltype(layer, type, dR); + if (others <= layMax1_) { + layer1.emplace_back(ltype); + } else { + layer2.emplace_back(ltype); + } + } + } else if (items.size() != 9) { + ++bad; + } else { + ++good; + unsigned int layer = std::atoi(items[0].c_str()); + int waferU = std::atoi(items[6].c_str()); + int waferV = std::atoi(items[7].c_str()); + int cassette = std::atoi(items[8].c_str()); + int thck = static_cast(std::find(thick, thick + thksize, items[2]) - thick); + int part = std::atoi(items[1].c_str()); + if ((thck <= thksize) && (part >= 0)) { + if ((addType[thck] == HGCalTypes::WaferFineThin) || (addType[thck] == HGCalTypes::WaferFineThick)) + part = partTypeH[part]; + else + part = partTypeL[part]; + } + int orient = std::atoi(items[5].c_str()); + wafer waf(thck, part, orient, cassette); + if (layer <= layMax1_) { + int index = HGCalWaferIndex::waferIndex(layer, waferU, waferV, false); + module1[index] = waf; + if ((cminEE < 0) || (cassette < cminEE)) + cminEE = cassette; + if ((cmaxEE < 0) || (cassette > cmaxEE)) + cmaxEE = cassette; + } else { + int index = HGCalWaferIndex::waferIndex(layer - layMax1_, waferU, waferV, false); + module2[index] = waf; + if ((cminHE < 0) || (cassette < cminHE)) + cminHE = cassette; + if ((cmaxHE < 0) || (cassette > cmaxHE)) + cmaxHE = cassette; + } + } + } + } + fInput.close(); + std::cout << "Read " << all << " records with " << comments << " comments " << others + << " non-comment records out of which " << good << ":" << module1.size() << ":" << module2.size() + << " are good and " << bad << " are bad and with " << layers << " layers\n"; + std::cout << "\nThere are " << layer1.size() << " of types:" << std::endl; + for (const auto& l : layer1) { + std::cout << "Layer " << l.layer << " Type " << l.type << " DR"; + for (unsigned int k = 0; k < l.deltaR.size(); ++k) + std::cout << ": " << l.deltaR[k]; + std::cout << std::endl; + } + std::cout << "\nThere are " << layer2.size() << " of types:" << std::endl; + for (const auto& l : layer2) { + std::cout << "Layer " << l.layer << " Type " << l.type << " DR"; + for (unsigned int k = 0; k < l.deltaR.size(); ++k) + std::cout << ": " << l.deltaR[k]; + std::cout << std::endl; + } + std::cout << "\nMinimum and Maximum Cassette #'s:: EE: " << cminEE << ":" << cmaxEE << " HE: " << cminHE << ":" + << cmaxHE << std::endl; + std::cout << std::endl << std::endl; + + //Now write separately for EE and HE + writeNose(outfile1, cassetteEE, layer1, module1, "EE", global, (debug % 10 > 0)); + // Next HEsil part + writeNose(outfile2, cassetteHE, layer2, module2, "HE", global, ((debug / 10) % 10 > 0)); + } +} + +void ConvertNoseV0::writeNose(const char* outfile, + const unsigned int cassettes, + const std::vector& layers, + const std::map& module, + const std::string& tag, + const bool& mode, + const bool& debug) { + char apost('"'); + unsigned int k0(0), k1(0), k2(0), k3(0); + std::map::const_iterator itr; + std::string blank = (mode) ? " " : " "; + std::ofstream fOut(outfile); + std::vector layerStart; + int layer(-1); + if (mode) { + fOut << blank << ""; + } else { + fOut << blank << ""; + } + for (const auto& l : layers) { + std::string last = ((k0 + 1) == layers.size()) ? " " : ","; + if (k0 % 20 == 0) + fOut << "\n " << blank << std::setw(2) << l.type << last; + else + fOut << std::setw(2) << l.type << last; + ++k0; + } + fOut << "\n" << blank << "\n"; + if (mode) { + fOut << blank << ""; + } else { + fOut << blank << ""; + } + for (itr = module.begin(); itr != module.end(); ++itr) { + std::string last = ((k1 + 1) == module.size()) ? " " : ","; + if (k1 % 7 == 0) + fOut << "\n " << blank << std::setw(8) << itr->first << last; + else + fOut << std::setw(8) << itr->first << last; + if (HGCalWaferIndex::waferLayer(itr->first) != layer) { + layerStart.emplace_back(k1); + layer = HGCalWaferIndex::waferLayer(itr->first); + } + ++k1; + if (debug) + std::cout << "Wafer " << HGCalWaferIndex::waferLayer(itr->first) << ":" << HGCalWaferIndex::waferU(itr->first) + << ":" << HGCalWaferIndex::waferV(itr->first) << " T " << (itr->second).thick << " P " + << (itr->second).partial << " O " << (itr->second).orient << " C " << (itr->second).cassette + << " Property " + << HGCalProperty::waferProperty( + (itr->second).thick, (itr->second).partial, (itr->second).orient, (itr->second).cassette) + << std::endl; + } + fOut << "\n" << blank << "\n"; + if (mode) + fOut << blank << ""; + else + fOut << blank << ""; + for (itr = module.begin(); itr != module.end(); ++itr) { + int property = HGCalProperty::waferProperty( + (itr->second).thick, (itr->second).partial, (itr->second).orient, (itr->second).cassette); + std::string last = ((k2 + 1) == module.size()) ? " " : ","; + if (k2 % 8 == 0) + fOut << "\n " << blank << std::setw(7) << property << last; + else + fOut << std::setw(7) << property << last; + ++k2; + } + fOut << "\n" << blank << "\n"; + if (mode) { + fOut << blank << ""; + } else { + fOut << blank << ""; + } + for (unsigned k = 0; k < layerStart.size(); ++k) { + std::string last = ((k + 1) == layerStart.size()) ? " " : ","; + if (k % 10 == 0) + fOut << "\n " << blank << std::setw(5) << layerStart[k] << last; + else + fOut << std::setw(5) << layerStart[k] << last; + } + fOut << "\n" << blank << "\n"; + unsigned int csize = cassettes * layers.size(); + if (mode) { + fOut << blank << ""; + } else { + fOut << blank << ""; + } + for (const auto& l : layers) { + ++k3; + for (unsigned int k = 0; k < cassettes; ++k) { + std::string last = ((k3 == layers.size()) && ((k + 1) == cassettes)) ? "*mm" : "*mm,"; + if ((k % 6) == 0) + fOut << "\n " << blank << std::setw(9) << l.deltaR[k] << last; + else + fOut << std::setw(9) << l.deltaR[k] << last; + } + } + fOut << "\n" << blank << "\n"; + fOut.close(); +} diff --git a/Geometry/HGCalCommonData/test/HGCalPartialIDTester.cc b/Geometry/HGCalCommonData/test/HGCalPartialIDTester.cc index 78b47add956ff..6bf9d02ad686a 100644 --- a/Geometry/HGCalCommonData/test/HGCalPartialIDTester.cc +++ b/Geometry/HGCalCommonData/test/HGCalPartialIDTester.cc @@ -59,8 +59,8 @@ class HGCalPartialIDTester : public edm::one::EDAnalyzer { const bool invert_, debug_; const edm::ESGetToken tok_hgcal_; const HGCalDDDConstants *hgcCons_; - std::vector zside_, layer_; - std::vector xpos_, ypos_; + std::vector zside_, layer_, waferU_, waferV_; + std::vector xpos_, ypos_, zpos_; }; HGCalPartialIDTester::HGCalPartialIDTester(const edm::ParameterSet &iC) @@ -89,8 +89,26 @@ HGCalPartialIDTester::HGCalPartialIDTester(const edm::ParameterSet &iC) if ((det == DetId::HGCalEE) || (det == DetId::HGCalHSi)) { zside_.emplace_back(std::atoi(items[1].c_str())); layer_.emplace_back(std::atoi(items[2].c_str())); + waferU_.emplace_back(0); + waferV_.emplace_back(0); xpos_.emplace_back(std::atof(items[3].c_str())); ypos_.emplace_back(std::atof(items[4].c_str())); + zpos_.emplace_back(0); + } + } + } else if (items.size() == 8) { + DetId::Detector det = static_cast(std::atoi(items[0].c_str())); + if (det == dets) { + if ((det == DetId::HGCalEE) || (det == DetId::HGCalHSi)) { + layer_.emplace_back(std::atoi(items[1].c_str())); + int module = std::atoi(items[2].c_str()); + waferU_.emplace_back(HGCalTypes::getUnpackedU(module)); + waferV_.emplace_back(HGCalTypes::getUnpackedV(module)); + int zside = std::atoi(items[4].c_str()); + zside_.emplace_back(zside); + xpos_.emplace_back(zside * std::atof(items[5].c_str())); + ypos_.emplace_back(std::atof(items[6].c_str())); + zpos_.emplace_back(std::atof(items[7].c_str())); } } } @@ -100,8 +118,9 @@ HGCalPartialIDTester::HGCalPartialIDTester(const edm::ParameterSet &iC) } edm::LogVerbatim("HGCalGeom") << "Reads " << layer_.size() << " posiitons for det " << dets << " from " << fileName_; for (unsigned int k = 0; k < layer_.size(); ++k) { - edm::LogVerbatim("HGCalGeom") << "[" << k << "] zside " << zside_[k] << " Layer " << layer_[k] << " position " - << xpos_[k] << ":" << ypos_[k]; + edm::LogVerbatim("HGCalGeom") << "[" << k << "] Layer " << layer_[k] << " Wafer " << waferU_[k] << ":" + << waferV_[k] << " zside " << zside_[k] << " position " << xpos_[k] << ":" << ypos_[k] + << ":" << zpos_[k]; } } @@ -116,6 +135,7 @@ void HGCalPartialIDTester::fillDescriptions(edm::ConfigurationDescriptions &desc // ------------ method called to produce the data ------------ void HGCalPartialIDTester::beginRun(edm::Run const &iRun, edm::EventSetup const &iSetup) { + constexpr double tolR = 14.0; //initiating hgc Geometry const edm::ESHandle &hgcCons = iSetup.getHandle(tok_hgcal_); if (!hgcCons.isValid()) { @@ -124,25 +144,47 @@ void HGCalPartialIDTester::beginRun(edm::Run const &iRun, edm::EventSetup const hgcCons_ = hgcCons.product(); const DetId::Detector dets = (nameDetector_ == "HGCalEESensitive") ? DetId::HGCalEE : DetId::HGCalHSi; for (uint32_t i = 0; i < layer_.size(); i++) { - int waferU, waferV, cellU, cellV, waferType; - double wt; + int waferU(waferU_[i]), waferV(waferV_[i]), cellU(0), cellV(0), waferType(0); + double wt(0); + edm::LogVerbatim("HGCalGeom") << "Input " << xpos_[i] << ":" << ypos_[i] << ":" << zside_[i] << ":" << layer_[i] + << ":" << waferU << ":" << waferV; hgcCons_->waferFromPosition( xpos_[i], ypos_[i], zside_[i], layer_[i], waferU, waferV, cellU, cellV, waferType, wt, false, debug_); HGCalParameters::waferInfo info = hgcCons_->waferInfo(layer_[i], waferU, waferV); + double dR(0); + if ((waferU_[i] != 0) || (waferV_[i] != 0)) { + std::pair xy = + hgcCons_->locateCell(zside_[i], layer_[i], waferU, waferV, cellU, cellV, false, true, false, false); + double dx = (xpos_[i] - xy.first); + double dy = (ypos_[i] - xy.second); + dR = std::sqrt(dx * dx + dy * dy); + } + std::string ck = (dR > tolR) ? " ***** ERROR *****" : ""; edm::LogVerbatim("HGCalGeom") << "Input " << dets << ":" << zside_[i] << ":" << layer_[i] << ":" << std::setprecision(4) << xpos_[i] << ":" << std::setprecision(4) << ypos_[i] - << " WaferType " << waferType << " Wafer " << waferU << ":" << waferV << " Cell " - << cellU << ":" << cellV << " wt " << wt << " part:orien:cass " << info.part << ":" - << info.orient << ":" << info.cassette; + << " WaferType " << waferType << " Wafer " << waferU << ":" << waferU_[i] << ":" + << waferV << ":" << waferV_[i] << " Cell " << cellU << ":" << cellV << " wt " << wt + << " part:orien:cass " << info.part << ":" << info.orient << ":" << info.cassette + << " deltaR " << dR << ck; if (invert_ && (zside_[i] == -1)) { + waferU = waferV = cellU = cellV = waferType = wt = dR = 0; + double xx = ((waferU_[i] != 0) || (waferV_[i] != 0)) ? xpos_[i] : -xpos_[i]; hgcCons_->waferFromPosition( - -xpos_[i], ypos_[i], zside_[i], layer_[i], waferU, waferV, cellU, cellV, waferType, wt, false, debug_); + xx, ypos_[i], zside_[i], layer_[i], waferU, waferV, cellU, cellV, waferType, wt, false, debug_); info = hgcCons_->waferInfo(layer_[i], waferU, waferV); + if ((waferU_[i] != 0) || (waferV_[i] != 0)) { + std::pair xy = + hgcCons_->locateCell(zside_[i], layer_[i], waferU, waferV, cellU, cellV, false, true, false, false); + double dx = (xpos_[i] - xy.first); + double dy = (ypos_[i] - xy.second); + dR = std::sqrt(dx * dx + dy * dy); + } + ck = (dR > tolR) ? " ***** ERROR *****" : ""; edm::LogVerbatim("HGCalGeom") << "Input " << dets << ":" << zside_[i] << ":" << layer_[i] << ":" << std::setprecision(4) << -xpos_[i] << ":" << std::setprecision(4) << ypos_[i] << " WaferType " << waferType << " Wafer " << waferU << ":" << waferV << " Cell " << cellU << ":" << cellV << " wt " << wt << " part:orien:cass " << info.part - << ":" << info.orient << ":" << info.cassette; + << ":" << info.orient << ":" << info.cassette << " deltaR " << dR << ck; } } } diff --git a/Geometry/HGCalCommonData/test/python/g4OverlapCheck_cfg.py b/Geometry/HGCalCommonData/test/python/g4OverlapCheck_cfg.py index fa093f10bfcc4..e7fd184de69cd 100644 --- a/Geometry/HGCalCommonData/test/python/g4OverlapCheck_cfg.py +++ b/Geometry/HGCalCommonData/test/python/g4OverlapCheck_cfg.py @@ -2,7 +2,7 @@ # Way to use this: # cmsRun g4OverlapCheck_cfg.py type=V17 tol=0.01 # -# Options for type V16, V17, V17n, V17ng, V18, Wafer, WaferFR, WaferPR +# Options for type V16, V17, V17n, V17ng, V18, V18n, Wafer, WaferFR, WaferPR # tol 1.0, 0.1, 0.01, 0.0 # ############################################################################### @@ -17,7 +17,7 @@ "V17", VarParsing.VarParsing.multiplicity.singleton, VarParsing.VarParsing.varType.string, - "type of operations: V16, V17, V17n, V7ng, V18, Wafer, WaferFR, WaferPR") + "type of operations: V16, V17, V17n, V7ng, V18, V18n, Wafer, WaferFR, WaferPR") options.register('tol', 0.01, VarParsing.VarParsing.multiplicity.singleton, diff --git a/Geometry/HGCalCommonData/test/python/testHGCalPartialIDTester2_cfg.py b/Geometry/HGCalCommonData/test/python/testHGCalPartialIDTester2_cfg.py new file mode 100644 index 0000000000000..e66db43c2ebee --- /dev/null +++ b/Geometry/HGCalCommonData/test/python/testHGCalPartialIDTester2_cfg.py @@ -0,0 +1,102 @@ +############################################################################### +# Way to use this: +# cmsRun testHGCalPartialIDTester_cfg.py geometry=D98 type=DDD +# +# Options for geometry: D104 +# type: DDD, DD4hep +# +############################################################################### +import FWCore.ParameterSet.Config as cms +import os, sys, importlib, re, random +import FWCore.ParameterSet.VarParsing as VarParsing + +#################################################################### +### SETUP OPTIONS +options = VarParsing.VarParsing('standard') +options.register('geometry', + "D104", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "geometry of operations: D104") +options.register('type', + "DDD", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "type of operations: DDD, DD4hep") + +### get and parse the command line arguments +options.parseArguments() + +print(options) + +#################################################################### +# Use the options + +from Configuration.Eras.Era_Phase2C17I13M9_cff import Phase2C17I13M9 +if (options.type == "DD4hep"): + from Configuration.ProcessModifiers.dd4hep_cff import dd4hep + process = cms.Process('Sim2026',Phase2C17I13M9,dd4hep) + geomFile = "Configuration.Geometry.Geometry" + options.type +"Extended2026" + options.geometry + "Reco_cff" +else: + process = cms.Process('Sim2026',Phase2C17I13M9) + geomFile = "Configuration.Geometry.GeometryExtended2026" + options.geometry + "Reco_cff" + +globalTag = "auto:phase2_realistic_T25" +inFile = "partial" + options.geometry + ".txt" + +print("Geometry file: ", geomFile) +print("Global Tag: ", globalTag) +print("Input file: ", inFile) + +process.load(geomFile) +process.load("SimGeneral.HepPDTESSource.pythiapdt_cfi") +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load("IOMC.EventVertexGenerators.VtxSmearedGauss_cfi") +process.load("Configuration.StandardSequences.MagneticField_cff") +process.load("Configuration.EventContent.EventContent_cff") +process.load("Configuration.StandardSequences.SimIdeal_cff") +process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, globalTag, '') + +process.source = cms.Source("EmptySource") + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.HGCalGeom=dict() + +process.load("IOMC.RandomEngine.IOMC_cff") +process.RandomNumberGeneratorService.generator.initialSeed = 456789 +process.RandomNumberGeneratorService.g4SimHits.initialSeed = 9876 +process.RandomNumberGeneratorService.VtxSmeared.initialSeed = 123456789 +process.rndmStore = cms.EDProducer("RandomEngineStateProducer") + +process.generator = cms.EDProducer("FlatRandomEGunProducer", + PGunParameters = cms.PSet( + PartID = cms.vint32(14), + MinEta = cms.double(-3.5), + MaxEta = cms.double(3.5), + MinPhi = cms.double(-3.14159265359), + MaxPhi = cms.double(3.14159265359), + MinE = cms.double(9.99), + MaxE = cms.double(10.01) + ), + AddAntiParticle = cms.bool(False), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1) + ) + +process.load("Geometry.HGCalCommonData.hgcalPartialIDTester_cff") +process.hgcalPartialIDTesterEE.fileName = inFile +process.hgcalPartialIDTesterHEF.fileName = inFile +process.hgcalPartialIDTesterEE.invert = True +process.hgcalPartialIDTesterHEF.invert = True +process.hgcalPartialIDTesterEE.debug = False +process.hgcalPartialIDTesterHEF.debug = False + +process.p1 = cms.Path(process.generator*process.hgcalPartialIDTesterEE*process.hgcalPartialIDTesterHEF) diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/cms.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/cms.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/cms.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/cms.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcal.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcal.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcal.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcal.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalBeam.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalBeam.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalBeam.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalBeam.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalCons.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalCons.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalCons.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalCons.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalConsData.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalConsData.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalConsData.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalConsData.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalEE.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalEE.xml new file mode 100644 index 0000000000000..d0e60d92ea45a --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalEE.xml @@ -0,0 +1,588 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalcell.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalcell.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalcell.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalcell.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalsense.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalsense.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalsense.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalsense.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalwafer.xml b/Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalwafer.xml similarity index 100% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalwafer.xml rename to Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalwafer.xml diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/cms.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/cms.xml new file mode 100644 index 0000000000000..5a4edf6a9d36f --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/cms.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcal.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcal.xml new file mode 100644 index 0000000000000..23028c4adb4a2 --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcal.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalBeam.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalBeam.xml new file mode 100644 index 0000000000000..536c7f52f2c81 --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalBeam.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalCons.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalCons.xml new file mode 100644 index 0000000000000..652518619804f --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalCons.xml @@ -0,0 +1,83 @@ + + + + + + + 0.0*mm, 0.0*mm + + [hgcal:zHGCalEE1], [hgcal:zHGCalEE2] + + 0, 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalConsData.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalConsData.xml new file mode 100644 index 0000000000000..e987daff7c303 --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalConsData.xml @@ -0,0 +1,179 @@ + + + + + + 0, 0 + + 262146, 262147, 262148, 262149, 262150, 262151, 262152, + 262153, 262178, 262179, 262180, 262181, 262182, 262183, + 262184, 262185, 262210, 262211, 262212, 262213, 262214, + 262215, 262216, 262217, 262241, 262242, 262243, 262244, + 262245, 262246, 262247, 262248, 262272, 262273, 262274, + 262275, 262276, 262277, 262278, 262279, 262280, 262281, + 262282, 262305, 262306, 262307, 262308, 262309, 262310, + 262311, 262312, 262336, 262337, 262338, 262339, 262340, + 262341, 262342, 262343, 262344, 262345, 262346, 262369, + 262370, 262371, 262372, 262373, 262374, 262375, 262400, + 262401, 262402, 262403, 262404, 262405, 262406, 262407, + 262408, 262409, 262410, 262433, 262434, 262435, 262436, + 262437, 262438, 262464, 262465, 262466, 262467, 262468, + 262469, 262470, 262471, 262472, 262473, 262474, 262497, + 262498, 262499, 262500, 262501, 262528, 262529, 262530, + 262531, 262532, 262533, 262534, 262535, 262536, 262537, + 262538, 262561, 262562, 262563, 262564, 262592, 262593, + 262594, 262595, 262596, 262597, 262598, 262599, 262600, + 262601, 262602, 262625, 262626, 262627, 262656, 262657, + 262658, 262659, 262660, 262661, 262662, 262663, 262664, + 262665, 262666, 262689, 262690, 262720, 262721, 262722, + 262723, 262724, 262725, 262726, 262727, 262728, 262729, + 262786, 262787, 262788, 262789, 262790, 262791, 262792, + 264257, 264258, 264259, 264260, 264261, 264262, 264263, + 264264, 264290, 264291, 264292, 264293, 264294, 264295, + 264296, 264297, 264320, 264321, 264322, 264323, 264324, + 264325, 264326, 264327, 264328, 264353, 264354, 264355, + 264356, 264357, 264358, 264359, 264360, 264361, 264362, + 264384, 264385, 264386, 264387, 264388, 264389, 264390, + 264391, 264417, 264418, 264419, 264420, 264421, 264422, + 264423, 264424, 264425, 264426, 264448, 264449, 264450, + 264451, 264452, 264453, 264454, 264481, 264482, 264483, + 264484, 264485, 264486, 264487, 264488, 264489, 264490, + 264512, 264513, 264514, 264515, 264516, 264517, 264545, + 264546, 264547, 264548, 264549, 264550, 264551, 264552, + 264553, 264554, 264576, 264577, 264578, 264579, 264580, + 264609, 264610, 264611, 264612, 264613, 264614, 264615, + 264616, 264617, 264618, 264640, 264641, 264642, 264643, + 264673, 264674, 264675, 264676, 264677, 264678, 264679, + 264680, 264681, 264682, 264704, 264705, 264706, 264737, + 264738, 264739, 264740, 264741, 264742, 264743, 264744, + 264745, 264746, 264768, 264801, 264802, 264803, 264804, + 264805, 264806, 264807, 264808, 264809, 264866, 264867, + 264868, 264869, 264870, 264871, 264872, 524290, 524291, + 524292, 524293, 524294, 524295, 524296, 524322, 524323, + 524324, 524325, 524326, 524327, 524328, 524354, 524355, + 524356, 524357, 524358, 524359, 524360, 524361, 524385, + 524386, 524387, 524388, 524389, 524390, 524391, 524392, + 524416, 524417, 524418, 524419, 524420, 524421, 524422, + 524423, 524424, 524425, 524449, 524450, 524451, 524452, + 524453, 524454, 524455, 524480, 524481, 524482, 524483, + 524484, 524485, 524486, 524487, 524488, 524489, 524513, + 524514, 524515, 524516, 524517, 524518, 524544, 524545, + 524546, 524547, 524548, 524549, 524550, 524551, 524552, + 524553, 524554, 524577, 524578, 524579, 524580, 524581, + 524582, 524608, 524609, 524610, 524611, 524612, 524613, + 524614, 524615, 524616, 524617, 524618, 524641, 524642, + 524643, 524644, 524645, 524672, 524673, 524674, 524675, + 524676, 524677, 524678, 524679, 524680, 524681, 524682, + 524705, 524706, 524707, 524708, 524736, 524737, 524738, + 524739, 524740, 524741, 524742, 524743, 524744, 524745, + 524769, 524770, 524800, 524801, 524802, 524803, 524804, + 524805, 524806, 524807, 524808, 524809, 524833, 524865, + 524866, 524867, 524868, 524869, 524870, 524871, 524872, + 524932, 524933, 524934, 526401, 526402, 526403, 526404, + 526405, 526406, 526407, 526408, 526434, 526435, 526436, + 526437, 526438, 526439, 526440, 526441, 526464, 526465, + 526466, 526467, 526468, 526469, 526470, 526471, 526497, + 526498, 526499, 526500, 526501, 526502, 526503, 526504, + 526505, 526528, 526529, 526530, 526531, 526532, 526533, + 526534, 526561, 526562, 526563, 526564, 526565, 526566, + 526567, 526568, 526569, 526592, 526593, 526594, 526595, + 526596, 526597, 526598, 526625, 526626, 526627, 526628, + 526629, 526630, 526631, 526632, 526633, 526634, 526656, + 526657, 526658, 526659, 526660, 526661, 526689, 526690, + 526691, 526692, 526693, 526694, 526695, 526696, 526697, + 526698, 526720, 526721, 526722, 526723, 526724, 526753, + 526754, 526755, 526756, 526757, 526758, 526759, 526760, + 526761, 526762, 526784, 526785, 526786, 526817, 526818, + 526819, 526820, 526821, 526822, 526823, 526824, 526825, + 526848, 526849, 526881, 526882, 526883, 526884, 526885, + 526886, 526887, 526888, 526889, 526945, 526946, 526947, + 526948, 526949, 526950, 526951, 526952, 527012, 527013, + 527014 + + + 15220, 12000, 12000, 12001, 12002, 12002, 12002, 10162, + 42220, 45000, 45000, 45001, 45002, 45002, 45002, 43162, + 11230, 13000, 12000, 12000, 12002, 12002, 12002, 12002, + 33230, 35000, 35000, 35000, 32002, 32002, 32002, 31152, + 31220, 22230, 20220, 13000, 13000, 12000, 12001, 12002, + 12002, 12002, 11162, 35000, 35000, 35000, 32001, 32002, + 32002, 32002, 33162, 34000, 24000, 24000, 23000, 13000, + 13000, 10001, 12002, 12002, 12002, 15112, 34000, 34000, + 32001, 32002, 32002, 32002, 32112, 34000, 24000, 24000, + 23000, 23000, 13000, 10001, 10002, 12002, 12002, 14152, + 34000, 34001, 34002, 34002, 32002, 30152, 34001, 24000, + 24000, 23000, 23000, 23001, 10002, 10002, 10002, 10002, + 14132, 34002, 34002, 34002, 34002, 30132, 34002, 21002, + 21001, 21001, 23001, 23002, 23002, 10002, 10002, 10002, + 14152, 34002, 34002, 34002, 30152, 34002, 21002, 21002, + 21002, 23002, 23002, 23002, 23002, 10002, 10002, 10112, + 34002, 34002, 31112, 34002, 21002, 21002, 21002, 23002, + 23002, 23002, 23002, 23002, 15152, 11162, 34002, 33162, + 32162, 20152, 21002, 21002, 21002, 23002, 23002, 23002, + 23002, 21162, 22162, 21112, 25152, 25132, 25152, 20112, + 22162, 60230, 62000, 62000, 62000, 65002, 65002, 65002, + 64152, 44230, 40000, 45000, 45000, 45002, 45002, 45002, + 45002, 64220, 62000, 62000, 62000, 65001, 65002, 65002, + 65002, 60162, 55230, 53220, 40000, 40000, 45000, 45001, + 45002, 45002, 45002, 44162, 61000, 61000, 61000, 65001, + 65002, 65002, 65002, 65112, 51000, 51000, 50000, 40000, + 40000, 43001, 45002, 45002, 45002, 42112, 61000, 61000, + 61001, 61002, 61002, 65002, 63152, 51000, 51000, 50000, + 50000, 40000, 43001, 43002, 45002, 45002, 41152, 61001, + 61002, 61002, 61002, 61002, 63132, 51000, 51000, 50000, + 50000, 50001, 43002, 43002, 43002, 43002, 41132, 61002, + 61002, 61002, 61002, 63152, 54002, 54001, 54001, 50001, + 50002, 50002, 43002, 43002, 43002, 41152, 61002, 61002, + 61002, 64112, 54002, 54002, 54002, 50002, 50002, 50002, + 50002, 43002, 43002, 43112, 61002, 61002, 60162, 54002, + 54002, 54002, 50002, 50002, 50002, 50002, 50002, 42152, + 44162, 65162, 53152, 54002, 54002, 54002, 50002, 50002, + 50002, 50002, 54162, 55162, 54112, 52152, 52132, 52152, + 53112, 55162, 12220, 12000, 12000, 12001, 12002, 12002, + 12002, 45220, 45000, 45000, 45001, 45002, 45002, 45002, + 13230, 11000, 12000, 12000, 12002, 12002, 12002, 12112, + 31230, 35000, 35000, 35000, 32002, 32002, 32002, 35112, + 30220, 22230, 21220, 11000, 11000, 12000, 12001, 12002, + 12002, 12002, 35000, 35000, 35000, 32001, 32002, 32002, + 32002, 30000, 20000, 20000, 21000, 11000, 11000, 14001, + 12002, 12002, 12002, 30000, 30000, 32001, 32002, 32002, + 32002, 30000, 20000, 20000, 21000, 21000, 11000, 14001, + 14002, 14002, 14002, 13162, 30000, 30001, 30002, 32002, + 32002, 31162, 30001, 20000, 20000, 21000, 21000, 21001, + 14002, 14002, 14002, 14002, 13162, 30002, 30002, 30002, + 32002, 31162, 30002, 23002, 23001, 23001, 21001, 21002, + 21002, 14002, 14002, 14002, 13162, 30002, 30002, 30002, + 31162, 30002, 23002, 23002, 23002, 21002, 21002, 21002, + 21002, 14002, 14002, 30002, 30002, 30002, 23002, 23002, + 23002, 23002, 21002, 21002, 21002, 21002, 11112, 30112, + 20112, 23002, 23002, 23002, 23002, 21002, 21002, 21112, + 22162, 22162, 22162, 64230, 62000, 62000, 62000, 65002, + 65002, 65002, 62112, 40230, 44000, 45000, 45000, 45002, + 45002, 45002, 45112, 63220, 62000, 62000, 62000, 65001, + 65002, 65002, 65002, 55230, 54220, 44000, 44000, 45000, + 45001, 45002, 45002, 45002, 63000, 63000, 63000, 65001, + 65002, 65002, 65002, 53000, 53000, 54000, 44000, 44000, + 41001, 45002, 45002, 45002, 63000, 63000, 63001, 63002, + 65002, 65002, 64162, 53000, 53000, 54000, 54000, 44000, + 41001, 41002, 41002, 41002, 40162, 63001, 63002, 63002, + 63002, 65002, 64162, 53000, 53000, 54000, 54000, 54001, + 41002, 41002, 41002, 41002, 40162, 63002, 63002, 63002, + 63002, 64162, 50002, 50001, 50001, 54001, 54002, 54002, + 41002, 41002, 41002, 40162, 63002, 63002, 63002, 50002, + 50002, 50002, 54002, 54002, 54002, 54002, 41002, 41002, + 63002, 63112, 50002, 50002, 50002, 50002, 54002, 54002, + 54002, 54002, 44112, 53112, 50002, 50002, 50002, 50002, + 54002, 54002, 54112, 55162, 55162, 55162, 15220, 12000, + 12000 + + + 0, 306 + + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, + 0*mm, 0*mm, 0*mm, 0*mm, 0*mm, 0*mm + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalEE.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalEE.xml similarity index 61% rename from Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalEE.xml rename to Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalEE.xml index 38a5185f5543d..a330b33c12c2d 100644 --- a/Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalEE.xml +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalEE.xml @@ -12,52 +12,61 @@ - - + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - + + @@ -72,6 +81,7 @@ + @@ -96,6 +106,10 @@ + + + + @@ -237,154 +251,202 @@ - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalcell.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalcell.xml new file mode 100644 index 0000000000000..003537d85de81 --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalcell.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + HGCalEECellTrunc01Coarse2, HGCalEECellTrunc02Coarse2, + HGCalEECellTrunc03Coarse2, HGCalEECellTrunc04Coarse2, + HGCalEECellTrunc05Coarse2, HGCalEECellTrunc06Coarse2 + + HGCalEECellSensitiveTrunc01Coarse2, HGCalEECellSensitiveTrunc02Coarse2, + HGCalEECellSensitiveTrunc03Coarse2, HGCalEECellSensitiveTrunc04Coarse2, + HGCalEECellSensitiveTrunc05Coarse2, HGCalEECellSensitiveTrunc06Coarse2 + + HGCalEECellExten01Coarse2, HGCalEECellExten02Coarse2, + HGCalEECellExten03Coarse2, HGCalEECellExten04Coarse2, + HGCalEECellExten05Coarse2, HGCalEECellExten06Coarse2 + + HGCalEECellSensitiveExten01Coarse2, HGCalEECellSensitiveExten02Coarse2, + HGCalEECellSensitiveExten03Coarse2, HGCalEECellSensitiveExten04Coarse2, + HGCalEECellSensitiveExten05Coarse2, HGCalEECellSensitiveExten06Coarse2 + + HGCalEECellCorner01Coarse2, HGCalEECellCorner02Coarse2, + HGCalEECellCorner03Coarse2, HGCalEECellCorner04Coarse2, + HGCalEECellCorner05Coarse2, HGCalEECellCorner06Coarse2, + HGCalEECellCorner07Coarse2, HGCalEECellCorner08Coarse2, + HGCalEECellCorner09Coarse2, HGCalEECellCorner10Coarse2, + HGCalEECellCorner11Coarse2, HGCalEECellCorner12Coarse2 + + HGCalEECellSensitiveCorner01Coarse2, HGCalEECellSensitiveCorner02Coarse2, + HGCalEECellSensitiveCorner03Coarse2, HGCalEECellSensitiveCorner04Coarse2, + HGCalEECellSensitiveCorner05Coarse2, HGCalEECellSensitiveCorner06Coarse2, + HGCalEECellSensitiveCorner07Coarse2, HGCalEECellSensitiveCorner08Coarse2, + HGCalEECellSensitiveCorner09Coarse2, HGCalEECellSensitiveCorner10Coarse2, + HGCalEECellSensitiveCorner11Coarse2, HGCalEECellSensitiveCorner12Coarse2 + + + + + + + + + + + + + + + HGCalEECellTrunc21Coarse2, HGCalEECellTrunc22Coarse2, + HGCalEECellTrunc23Coarse2, HGCalEECellTrunc24Coarse2, + HGCalEECellTrunc25Coarse2, HGCalEECellTrunc26Coarse2 + + HGCalEECellSensitiveTrunc21Coarse2, HGCalEECellSensitiveTrunc22Coarse2, + HGCalEECellSensitiveTrunc23Coarse2, HGCalEECellSensitiveTrunc24Coarse2, + HGCalEECellSensitiveTrunc25Coarse2, HGCalEECellSensitiveTrunc26Coarse2 + + HGCalEECellExten21Coarse2, HGCalEECellExten22Coarse2, + HGCalEECellExten23Coarse2, HGCalEECellExten24Coarse2, + HGCalEECellExten25Coarse2, HGCalEECellExten26Coarse2 + + HGCalEECellSensitiveExten21Coarse2, HGCalEECellSensitiveExten22Coarse2, + HGCalEECellSensitiveExten23Coarse2, HGCalEECellSensitiveExten24Coarse2, + HGCalEECellSensitiveExten25Coarse2, HGCalEECellSensitiveExten26Coarse2 + + HGCalEECellCorner21Coarse2, HGCalEECellCorner22Coarse2, + HGCalEECellCorner23Coarse2, HGCalEECellCorner24Coarse2, + HGCalEECellCorner25Coarse2, HGCalEECellCorner26Coarse2, + HGCalEECellCorner27Coarse2, HGCalEECellCorner28Coarse2, + HGCalEECellCorner29Coarse2, HGCalEECellCorner30Coarse2, + HGCalEECellCorner31Coarse2, HGCalEECellCorner32Coarse2 + + HGCalEECellSensitiveCorner21Coarse2, HGCalEECellSensitiveCorner22Coarse2, + HGCalEECellSensitiveCorner23Coarse2, HGCalEECellSensitiveCorner24Coarse2, + HGCalEECellSensitiveCorner25Coarse2, HGCalEECellSensitiveCorner26Coarse2, + HGCalEECellSensitiveCorner27Coarse2, HGCalEECellSensitiveCorner28Coarse2, + HGCalEECellSensitiveCorner29Coarse2, HGCalEECellSensitiveCorner30Coarse2, + HGCalEECellSensitiveCorner31Coarse2, HGCalEECellSensitiveCorner32Coarse2 + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalsense.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalsense.xml new file mode 100644 index 0000000000000..10c5f11b203ac --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalsense.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalwafer.xml b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalwafer.xml new file mode 100644 index 0000000000000..e5f01e3c36529 --- /dev/null +++ b/Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalwafer.xml @@ -0,0 +1,199 @@ + + + + + + + + + + + + + + + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 0, 0, 0, 0, 0, 0 + + 06, 07, 08, 09, 10, 11 + + HGCalEEMylar, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Mylar, hgcalMaterial:HGC_G10-FR4, + hgcalMaterial:HGC_EEConnector, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 0.50*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 2.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + 0, 1, 13, 19 + + hgcalcell:HGCalEECellFull0Coarse2, hgcalcell:HGCalEECellCorner01Coarse2, + hgcalcell:HGCalEECellCorner02Coarse2,hgcalcell:HGCalEECellCorner03Coarse2, + hgcalcell:HGCalEECellCorner04Coarse2,hgcalcell:HGCalEECellCorner05Coarse2, + hgcalcell:HGCalEECellCorner06Coarse2,hgcalcell:HGCalEECellCorner07Coarse2, + hgcalcell:HGCalEECellCorner08Coarse2,hgcalcell:HGCalEECellCorner09Coarse2, + hgcalcell:HGCalEECellCorner10Coarse2,hgcalcell:HGCalEECellCorner11Coarse2, + hgcalcell:HGCalEECellCorner12Coarse2,hgcalcell:HGCalEECellTrunc01Coarse2, + hgcalcell:HGCalEECellTrunc02Coarse2, hgcalcell:HGCalEECellTrunc03Coarse2, + hgcalcell:HGCalEECellTrunc04Coarse2, hgcalcell:HGCalEECellTrunc05Coarse2, + hgcalcell:HGCalEECellTrunc06Coarse2, hgcalcell:HGCalEECellExten01Coarse2, + hgcalcell:HGCalEECellExten02Coarse2, hgcalcell:HGCalEECellExten03Coarse2, + hgcalcell:HGCalEECellExten04Coarse2, hgcalcell:HGCalEECellExten05Coarse2, + hgcalcell:HGCalEECellExten06Coarse2 + + + + + + + + + + + 0, 1, 2, 3, 4, 5 + + 1, 1, 1, 1, 1, 1 + + 00, 01, 02, 03, 04, 05 + + HGCalEEMylar, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Mylar, hgcalMaterial:HGC_G10-FR4, + hgcalMaterial:HGC_EEConnector, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 0.50*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 2.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + 0, 1, 13, 19 + + hgcalcell:HGCalEECellFull1Coarse2, hgcalcell:HGCalEECellCorner21Coarse2, + hgcalcell:HGCalEECellCorner22Coarse2,hgcalcell:HGCalEECellCorner23Coarse2, + hgcalcell:HGCalEECellCorner24Coarse2,hgcalcell:HGCalEECellCorner25Coarse2, + hgcalcell:HGCalEECellCorner26Coarse2,hgcalcell:HGCalEECellCorner27Coarse2, + hgcalcell:HGCalEECellCorner28Coarse2,hgcalcell:HGCalEECellCorner29Coarse2, + hgcalcell:HGCalEECellCorner30Coarse2,hgcalcell:HGCalEECellCorner31Coarse2, + hgcalcell:HGCalEECellCorner32Coarse2,hgcalcell:HGCalEECellTrunc21Coarse2, + hgcalcell:HGCalEECellTrunc22Coarse2, hgcalcell:HGCalEECellTrunc23Coarse2, + hgcalcell:HGCalEECellTrunc24Coarse2, hgcalcell:HGCalEECellTrunc25Coarse2, + hgcalcell:HGCalEECellTrunc26Coarse2, hgcalcell:HGCalEECellExten21Coarse2, + hgcalcell:HGCalEECellExten22Coarse2, hgcalcell:HGCalEECellExten23Coarse2, + hgcalcell:HGCalEECellExten24Coarse2, hgcalcell:HGCalEECellExten25Coarse2, + hgcalcell:HGCalEECellExten26Coarse2 + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 0, 1, 2, 3, 4, 5 + + 00, 01, 02, 03, 04, 05 + + HGCalEEMylar, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Mylar, hgcalMaterial:HGC_G10-FR4, + hgcalMaterial:HGC_EEConnector, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 0.50*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 2.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 8, 5, 6, 5, 7, 4, 3, 2, 1, 0 + + + + + + + + + + + + + + LD1, LD2, LD3, LD4, LD5, LD6 + + 11, 12, 13, 14, 15, 16 + + 6, 7, 8, 9, 10, 11 + + 06, 07, 08, 09, 10, 11 + + HGCalEEMylar, HGCalEEPCB, HGCalEEConnector, HGCalEEMotherBoard, + HGCalEEEpoxy, HGCalEEEpoxyT, HGCalEEKapton, HGCalEESensitive, + HGCalEEBasePlate + + materials:Mylar, hgcalMaterial:HGC_G10-FR4, + hgcalMaterial:HGC_EEConnector, hgcalMaterial:HGC_G10-FR4, + materials:Epoxy, materials:Epoxy, materials:Kapton, materials:Silicon, + hgcalMaterial:HGC_G10-FR4 + + 0.50*mm, 1.60*mm, 3.73*mm, 1.60*mm, 0.075*mm, 0.065*mm, 0.265*mm, + [WaferThickness], 2.0*mm + + 0.00*mm, 0.00*mm, 0.70*mm, 0.70*mm, [SensorSizeOffset], + [SensorSizeOffset], 0.30*mm, [SensorSizeOffset], 0.50*mm + + 0, 0, 0, 0, 0, 0, 0, 1, 0 + + 0, 1, 2, 3, 4, 7, 5, 6, 5, 8 + + + + + + diff --git a/Geometry/HGCalTBCommonData/python/testTB230JulXML_cfi.py b/Geometry/HGCalTBCommonData/python/testTB230AugXML_cfi.py similarity index 81% rename from Geometry/HGCalTBCommonData/python/testTB230JulXML_cfi.py rename to Geometry/HGCalTBCommonData/python/testTB230AugXML_cfi.py index 0f328a2d81973..67a416e424481 100644 --- a/Geometry/HGCalTBCommonData/python/testTB230JulXML_cfi.py +++ b/Geometry/HGCalTBCommonData/python/testTB230AugXML_cfi.py @@ -4,15 +4,15 @@ geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', 'Geometry/CMSCommonData/data/rotations.xml', 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/cms.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcal.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalBeam.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalcell.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalwafer.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalEE.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalCons.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalConsData.xml', - 'Geometry/HGCalTBCommonData/data/TB230/Jul230/hgcalsense.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/cms.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcal.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalBeam.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalcell.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalwafer.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalEE.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalCons.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalConsData.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Aug230/hgcalsense.xml', 'Geometry/HGCalTBCommonData/data/TB230/hgcProdCuts.xml', ), rootNodeName = cms.string('cms:OCMS') diff --git a/Geometry/HGCalTBCommonData/python/testTB230SepXML_cfi.py b/Geometry/HGCalTBCommonData/python/testTB230SepXML_cfi.py new file mode 100644 index 0000000000000..4273533fb9336 --- /dev/null +++ b/Geometry/HGCalTBCommonData/python/testTB230SepXML_cfi.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/cms.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcal.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalBeam.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalcell.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalwafer.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalEE.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalCons.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalConsData.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalsense.xml', + 'Geometry/HGCalTBCommonData/data/TB230/hgcProdCuts.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/HLTrigger/Configuration/python/HLT_75e33/modules/particleFlowBlock_cfi.py b/HLTrigger/Configuration/python/HLT_75e33/modules/particleFlowBlock_cfi.py index 35330e8022a3b..7beaf6b7b4c6e 100644 --- a/HLTrigger/Configuration/python/HLT_75e33/modules/particleFlowBlock_cfi.py +++ b/HLTrigger/Configuration/python/HLT_75e33/modules/particleFlowBlock_cfi.py @@ -10,7 +10,10 @@ minSuperClusterPt = cms.double(10.0), source_eb = cms.InputTag("particleFlowSuperClusterECAL","particleFlowSuperClusterECALBarrel"), source_ee = cms.InputTag("particleFlowSuperClusterECAL","particleFlowSuperClusterECALEndcapWithPreshower"), - source_towers = cms.InputTag("towerMaker"), + hbheRecHitsTag = cms.InputTag("hltHbhereco"), + maxSeverityHB = cms.int32(9), + maxSeverityHE = cms.int32(9), + usePFThresholdsFromDB = cms.bool(True), superClustersArePF = cms.bool(True) ), cms.PSet( diff --git a/HLTrigger/Configuration/scripts/hltFindDuplicates b/HLTrigger/Configuration/scripts/hltFindDuplicates index 0dd2f41c92eee..6a771dd358fb3 100755 --- a/HLTrigger/Configuration/scripts/hltFindDuplicates +++ b/HLTrigger/Configuration/scripts/hltFindDuplicates @@ -1,11 +1,33 @@ -#! /usr/bin/env python3 +#!/usr/bin/env python3 +"""hltFindDuplicates: script to find duplicate modules of an HLT configuration. + +Input. + Path to a local cmsRun configuration file, or stdin. + +Output. + A directory containing + (1) the input cmsRun configuration, and + (2) text files listing the groups of duplicate modules. + +Examples. + + # input: local configuration file + hltFindDuplicates tmp.py -o output_dir + + # input: stdin + hltConfigFromDB --configName /dev/CMSSW_X_Y_0/GRun/Vn | hltFindDuplicates -o output_dir + hltGetConfiguration /dev/CMSSW_X_Y_0/GRun/Vn | hltFindDuplicates -o output_dir -x realData=0 globalTag=@ +""" +import os +import sys +import argparse +import re +import itertools +import shutil -from __future__ import print_function -import sys, imp, re, itertools -from HLTrigger.Configuration.Tools.frozendict import frozendict import FWCore.ParameterSet.Config as cms -debug = True +from HLTrigger.Configuration.Tools.frozendict import frozendict whitelist_types = [ 'HLTPrescaler', @@ -22,19 +44,21 @@ whitelist_labels = [ def whitelist(module): return module.label in whitelist_labels or module.type in whitelist_types +def iterate(arg): + return (not isinstance(arg, str) and '__iter__' in dir(arg)) def freeze(arg): if type(arg) == dict: - return frozendict((k, freeze(v)) for (k, v) in arg.iteritems()) - elif '__iter__' in dir(arg): + return frozendict((k, freeze(v)) for (k, v) in iter(arg.items())) + elif iterate(arg): return tuple( freeze(v) for v in arg ) else: return arg def unfreeze(arg): if type(arg) == frozendict: - return dict((k, unfreeze(v)) for (k, v) in arg.iteritems()) - elif '__iter__' in dir(arg): + return dict((k, unfreeze(v)) for (k, v) in iter(arg.items())) + elif iterate(arg): return list( unfreeze(v) for v in arg ) else: return arg @@ -43,68 +67,87 @@ def pythonize(arg): if 'parameters_' in dir(arg): arg = arg.parameters_() - if 'value' in dir(arg): + elif 'value' in dir(arg): arg = arg.value() if type(arg) == dict: - return frozendict((k, pythonize(v)) for (k, v) in arg.iteritems()) - elif '__iter__' in dir(arg): + return frozendict((k, pythonize(v)) for (k, v) in iter(arg.items())) + elif iterate(arg): return tuple( pythonize(v) for v in arg ) else: return arg +def mkdirp(dirpath): + try: + os.makedirs(dirpath) + except OSError: + if not os.path.isdir(dirpath): + raise class Module(object): - type = '' - label = '' + type = '' + label = '' params = frozendict() - hash = 0 + hash = 0 def __init__(self, module): - self.label = module.label_() - self.type = module.type_() + self.label = module.label_() + self.type = module.type_() self.params = pythonize(module.parameters_()) - self.__rehash() + self.__rehash(self.params) + def __str__(self): + return f'{self.label} (type: {self.type}): {self.params}' def key(self): return self.hash - def __rehash(self): - self.hash = (hash(self.type) << 4) + hash(self.params) + def __rehash(self, params): + self.hash = (hash(self.type) << 4) + hash(params) - def __check(self, value, group): - return type(value) is str and bool(group.match(value)) + def __check(self, value, check): + if isinstance(value, list): + return any(self.__check(foo, check) for foo in value) + elif isinstance(value, dict): + return any(self.__check(value[foo], check) for foo in value) + else: + return isinstance(value, str) and bool(check.match(value)) def __sub(self, value, group, label): - if type(value) is str: + if isinstance(value, list): + return [self.__sub(foo, group, label) for foo in value] + elif isinstance(value, dict): + return {foo:self.__sub(value[foo], group, label) for foo in value} + elif isinstance(value, str): return group.sub(r'%s\2' % label, value) else: return value - def apply_rename(self, groups): + def apply_rename(self, groups, verbosity_level): modified = False newparams = unfreeze(self.params) - for label, (group, check) in groups.iteritems(): - for k, p in newparams.iteritems(): - if '__iter__' in dir(p): - if any(self.__check(v, check) for v in p): - newparams[k] = tuple(self.__sub(v, check, label) for v in p) - modified = True - else: - if self.__check(p, check): - newparams[k] = self.__sub(p, check, label) - modified = True - if modified: - self.params = frozendict(newparams) - self.__rehash() + if verbosity_level > 2: + print('') + print(f' {self.label} ({self.type})') + print(f' parameters before: {newparams}') + for label, (group, check) in iter(groups.items()): + for k, p in iter(newparams.items()): + if self.__check(p, check): + newparams[k] = self.__sub(p, check, label) + modified = True + if verbosity_level > 2: + print(f' parameters after: {newparams}') + print(f' modified = {modified}') + if modified: + self.__rehash(frozendict(newparams)) class ModuleList(object): modules = [] + hashToLabelDict = {} def append(self, module): m = Module(module) @@ -117,98 +160,196 @@ class ModuleList(object): def __init__(self, *args): for arg in args: - if '__iter__' in dir(arg): + if iterate(arg): self.extend(arg) else: self.append(arg) + def hash_label(self, hash_value): + return self.hashToLabelDict.get(hash_value, None) + def sort(self): self.modules.sort(key = Module.key) def group(self): groups = dict() self.sort() - i = 0 for v, g in itertools.groupby(self.modules, Module.key): group = list(g) if len(group) > 1: - i = i + 1 g = [ m.label for m in group ] g.sort() - l = 'hltGroup%d' %i + # hash identifying the group (it is the same for every module in the group) + g_key = group[0].key() + if g_key not in self.hashToLabelDict: + # label identifying this group of modules + # (set only once so it cannot change from step to step) + self.hashToLabelDict[g_key] = f'{group[0].type} ({g[0]})' r = re.compile(r'^(%s)($|:)' % r'|'.join(g)) - groups[l] = (g, r) + groups[g_key] = (g, r) return groups - def apply_rename(self, groups): + def apply_rename(self, groups, verbosity_level): for module in self.modules: - module.apply_rename(groups) + module.apply_rename(groups, verbosity_level) - def dump(self): + def dump(self, indent=0): for m in self.modules: - print("%s = (%s) {" % (m.label, m.type)) - for k, v in m.params.iteritems(): - print("\t%s = %s" % (k, v)) - print('}') - print() - + print(' '*indent + "%s = (%s) {" % (m.label, m.type)) + for k, v in iter(m.params.items()): + print(' '*indent + " %s = %s" % (k, v)) + print(' '*indent + '}\n') +def findDuplicates(process, output_dir, verbosity_level): + mkdirp(output_dir) -def findDuplicates(process): modules = ModuleList( - process._Process__analyzers.itervalues(), - process._Process__producers.itervalues(), - process._Process__filters.itervalues() + iter(process.analyzers_().values()), + iter(process.producers_().values()), + iter(process.filters_().values()) ) oldups = 0 groups = modules.group() - dups = sum(len(g[0]) for g in groups.itervalues()) - len(groups) + dups = sum(len(g[0]) for g in groups.values()) - len(groups) index = 1 - while(dups != oldups): - if debug: - dump = open('step%d.sed' % index, 'w') - for target, (group, regexp) in groups.iteritems(): - dump.write('s#\\<\\(%s\\)\\>#%s#g\n' % ('\\|'.join(group), target)) - dump.close() - dump = open('step%d.txt' % index, 'w') - for target, (group, regexp) in groups.iteritems(): - dump.write('#%s\n%s\n\n' % ( target, '\n'.join(group))) - dump.close() - print("found %3d duplicates in %3d groups" % (dups, len(groups))) + while dups != oldups: + groupLabelToHashDict = {modules.hash_label(group_hash):group_hash for group_hash in groups} + + dump = open(os.path.join(output_dir, f'step{index}.sed'), 'w') + for group_label in sorted(groupLabelToHashDict.keys()): + (group, regexp) = groups[groupLabelToHashDict[group_label]] + dump.write('s#\\<\\(%s\\)\\>#%s#g\n' % ('\\|'.join(group), group_label)) + dump.close() + + dump = open(os.path.join(output_dir, f'step{index}.txt'), 'w') + first_entry = True + for group_label in sorted(groupLabelToHashDict.keys()): + (group, regexp) = groups[groupLabelToHashDict[group_label]] + dump.write('\n'*(not first_entry) + '# %s\n%s\n' % ( group_label, '\n'.join(group))) + first_entry = False + dump.close() + + if verbosity_level > 0: + print(f"[step {index:>2d}] found {dups:>3d} duplicates in {len(groups):>3d} groups") + + if verbosity_level > 2: + print(f'[step {index:>2d}] groups={groups}') + print(f'[step {index:>2d}] ---------------') + print(f'[step {index:>2d}] apply_rename ..') + oldups = dups - modules.apply_rename(groups) + modules.apply_rename(groups, verbosity_level) + + if verbosity_level > 2: + print() + print(f' ------------------------') + print(f' modules (after renaming)') + print(f' ------------------------') + modules.dump(indent=14) + groups = modules.group() - dups = sum(len(g[0]) for g in groups.itervalues()) - len(groups) - index = index + 1 + dups = sum(len(g[0]) for g in groups.values()) - len(groups) + index += 1 - dump = open('groups.sed', 'w') - for target, (group, regexp) in groups.iteritems(): - dump.write('s#\\<\\(%s\\)\\>#%s#\n' % ('\\|'.join(group), target)) - dump.close() + groupLabelToHashDict = {modules.hash_label(group_hash):group_hash for group_hash in groups} - dump = open('groups.txt', 'w') - for target, (group, regexp) in groups.iteritems(): - dump.write('#%s\n%s\n\n' % ( target, '\n'.join(group))) + dump = open(os.path.join(output_dir, 'groups.sed'), 'w') + for group_label in sorted(groupLabelToHashDict.keys()): + (group, regexp) = groups[groupLabelToHashDict[group_label]] + dump.write('s#\\<\\(%s\\)\\>#%s#\n' % ('\\|'.join(group), group_label)) dump.close() + dump = open(os.path.join(output_dir, 'groups.txt'), 'w') + first_entry = True + for group_label in sorted(groupLabelToHashDict.keys()): + (group, regexp) = groups[groupLabelToHashDict[group_label]] + dump.write('\n'*(not first_entry) + '# %s\n%s\n' % ( group_label, '\n'.join(group))) + first_entry = False + dump.close() +## +## main +## +if __name__ == '__main__': + + ### args + parser = argparse.ArgumentParser( + prog = './'+os.path.basename(__file__), + formatter_class = argparse.RawDescriptionHelpFormatter, + description = __doc__, + argument_default = argparse.SUPPRESS, + ) + + # menu: name of ConfDB config, or local cmsRun cfg file, or stdin + parser.add_argument('menu', + nargs = '?', + metavar = 'MENU', + default = None, + help = 'Path to cmsRun configuration file (if not specified, stdin is used)') + + # output-dir: path to directory containing output files + parser.add_argument('-o', '--output-dir', + metavar = 'OUTPUT_DIR', + default = 'hltFindDuplicates_output', + help = 'Path to directory containing output files') + + # menu arguments: list of arguments to be applied to the cmsRun configuration file + # (via argparse, VarParsing, or similar) + parser.add_argument('-x', '--menu-args', + nargs = '+', + metavar = 'MENU_ARGS', + default = [], + help = 'List of arguments (each without whitespaces) to be applied to the cmsRun configuration file') + + # verbosity level: level of verbosity of stdout/stderr printouts + parser.add_argument('-v', '--verbosity-level', + metavar = 'VERBOSITY_LEVEL', + type = int, + default = 1, + help = 'Verbosity level') + + # parse command line arguments and options + opts = parser.parse_args() + + print('-'*25) + print('hltFindDuplicates') + print('-'*25) + + # create new output directory + if os.path.exists(opts.output_dir): + log_msg = 'Failed to create output directory (a directory or file already exists under that path)' + raise RuntimeError(f'{log_msg}: {opts.output_dir}') + + mkdirp(opts.output_dir) + output_config_filepath = os.path.join(opts.output_dir, 'config.py') + + print(f'output directory: {opts.output_dir}') + print('-'*25) + + # parse the HLT configuration from a local cfg file, or from standard input + hlt = {'process': None, 'fragment': None} + + if opts.menu != None: + if not os.path.isfile(opts.menu): + raise RuntimeError(f'Invalid path to input file (file does not exist): {opts.menu}') + shutil.copyfile(opts.menu, output_config_filepath) + else: + with open(output_config_filepath, 'w') as config_file: + config_file.write(sys.stdin.read()) -def main(): - # parse the HLT configuration from standard input or from the given file - hlt = imp.new_module('hlt') - try: - configname = sys.argv[1] - except: - config = sys.stdin - else: - config = open(configname) - exec(config, globals(), hlt.__dict__) - config.close() - findDuplicates(hlt.process) + sys.argv = [sys.argv[0], output_config_filepath] + opts.menu_args + exec(open(output_config_filepath).read(), globals(), hlt) + # find cms.Process object + process = None + if hlt['process'] != None: + process = hlt['process'] + if hlt['fragment'] != None: + process = hlt['fragment'] -if __name__ == "__main__": - main() + if process == None or not isinstance(process, cms.Process): + raise RuntimeError('Failed to find object of type cms.Process !') + findDuplicates(process, output_dir=opts.output_dir, verbosity_level=opts.verbosity_level) diff --git a/HLTrigger/Configuration/test/BuildFile.xml b/HLTrigger/Configuration/test/BuildFile.xml index 11c72ffe9f4fb..e106df22c9b7d 100644 --- a/HLTrigger/Configuration/test/BuildFile.xml +++ b/HLTrigger/Configuration/test/BuildFile.xml @@ -11,3 +11,6 @@ + + + diff --git a/HLTrigger/Configuration/test/test_hltFindDuplicates.sh b/HLTrigger/Configuration/test/test_hltFindDuplicates.sh new file mode 100755 index 0000000000000..34087048908c9 --- /dev/null +++ b/HLTrigger/Configuration/test/test_hltFindDuplicates.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Pass in name and status +function die { + printf "\n%s: status %s\n" "$1" "$2" + if [ $# -gt 2 ]; then + printf "%s\n" "=== Log File ==========" + cat $3 + printf "%s\n" "=== End of Log File ===" + fi + exit $2 +} + +if [ -z "${SCRAM_TEST_PATH}" ]; then + printf "\n%s\n\n" "ERROR -- environment variable SCRAM_TEST_PATH not defined" + exit 1 +fi + +### +### test #1: "mode == 0" +### +rm -rf test_hltFindDuplicates_mode0_output + +hltFindDuplicates "${SCRAM_TEST_PATH}"/test_hltFindDuplicates_cfg.py -x="--mode=0" -v 2 \ + -o test_hltFindDuplicates_mode0_output &> test_hltFindDuplicates_mode0_log \ + || die 'Failure running hltFindDuplicates (mode: 0)' $? test_hltFindDuplicates_mode0_log + +cat <<@EOF > test_hltFindDuplicates_mode0_groups_expected +# A3 (d3x) +d3x +d3y +m3x +m3y + +# F2 (d2x) +d2x +d2y +m2x +m2y + +# P1 (d1x) +d1x +d1y +m1x +m1y +@EOF + +diff test_hltFindDuplicates_mode0_groups_expected test_hltFindDuplicates_mode0_output/groups.txt \ + || die "Unexpected differences in groups.txt output of hltFindDuplicates (mode: 0)" $? + +### +### test #2: "mode == 1" +### +rm -rf test_hltFindDuplicates_mode1_output + +hltFindDuplicates "${SCRAM_TEST_PATH}"/test_hltFindDuplicates_cfg.py -x="--mode=1" -v 2 \ + -o test_hltFindDuplicates_mode1_output &> test_hltFindDuplicates_mode1_log \ + || die 'Failure running hltFindDuplicates (mode: 1)' $? test_hltFindDuplicates_mode1_log + +cat <<@EOF > test_hltFindDuplicates_mode1_groups_expected +# A3 (d3x) +d3x +d3y +m3x + +# F2 (d2x) +d2x +d2y +m2x + +# P1 (d1x) +d1x +d1y +m1x +@EOF + +diff test_hltFindDuplicates_mode1_groups_expected test_hltFindDuplicates_mode1_output/groups.txt \ + || die "Unexpected differences in groups.txt output of hltFindDuplicates (mode: 1)" $? diff --git a/HLTrigger/Configuration/test/test_hltFindDuplicates_cfg.py b/HLTrigger/Configuration/test/test_hltFindDuplicates_cfg.py new file mode 100644 index 0000000000000..9ab81636a9e8e --- /dev/null +++ b/HLTrigger/Configuration/test/test_hltFindDuplicates_cfg.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python3 +""" +Configuration file to be used as input in unit tests of the utility hltFindDuplicates. + +The configuration is made of modules labelled "d*" and "m*". + +Details on the configuration. + - For each group of modules (d* and m*), + - modules are ordered in 3 levels (e.g. d1*, d2*, d3*), and + - for every level, there are two versions (*x and *y) of the module (e.g. d1x, d1y). + - The *x (*y) modules depend only on *x (*y) modules, and not on *y (*x) modules. + - The *2* modules depend on *1* modules. + - The *3* modules depend on *1* and *2* modules. + - The m* modules are the counterparts of the d* modules. + - The m* modules do not depend on d* modules (and viceversa). + - A given m{1,2,3}{x,y} module may or may not be a duplicate of the corresponding d* module. + +The --mode option determines how the ED modules are configured. + + - mode == 0: + the m* modules are duplicates of the corresponding d* modules. + + - mode == 1: + one parameter in m1y is changed compared to d1y + and this makes all the m*y modules unique, + while the m*x modules should ultimately + be identified as duplicates of the d*x modules. +""" +import FWCore.ParameterSet.Config as cms + +import os +import argparse + +parser = argparse.ArgumentParser( + prog = 'python3 '+os.path.basename(__file__), + formatter_class = argparse.RawDescriptionHelpFormatter, + description = __doc__, + argument_default = argparse.SUPPRESS, +) + +parser.add_argument("--mode", + type = int, + default = 0, + choices = [0,1], + help = "Choose how to configure the modules." +) + +args,_ = parser.parse_known_args() + +process = cms.Process('TEST') + +### "d*" modules: the duplicates +### - the *x (*y) modules depend only on *x (*y) modules, and not on *y (*x) modules +### - the *2* modules depend on *1* modules +### - the *3* modules depend on *1* and *2* modules +process.d1x = cms.EDProducer('P1', + p1 = cms.InputTag('rawDataCollector'), + p2 = cms.bool(False), + p3 = cms.vbool(False, True), + p4 = cms.uint32(1), + p5 = cms.vuint32(1,2,3), + p6 = cms.int32(-1), + p7 = cms.vint32(-1,2,-3), + p8 = cms.double(1.1), + p9 = cms.vdouble(2.3, 4.5) +) + +process.d1y = process.d1x.clone() + +process.d2x = cms.EDFilter('F2', + p1 = cms.vint32(1, 2, 3), + p2 = cms.VInputTag('d1x'), + p3 = cms.PSet( + theStrings = cms.vstring('keyword1', 'keyword2') + ) +) + +process.d2y = process.d2x.clone( p2 = ['d1y'] ) + +process.d3x = cms.EDAnalyzer('A3', + p1 = cms.VPSet( + cms.PSet( + pset_a = cms.PSet( + tag1 = cms.InputTag('d1x') + ), + pset_b = cms.PSet( + tag2 = cms.InputTag('d2x') + ), + ) + ), + p2 = cms.PSet( + p_a = cms.PSet( + p_b = cms.PSet( + p_c = cms.VInputTag('d2x', 'd1x') + ) + ) + ) +) + +process.d3y = process.d3x.clone() +process.d3y.p1[0].pset_a.tag1 = 'd1y' +process.d3y.p1[0].pset_b.tag2 = 'd2y' +process.d3y.p2.p_a.p_b.p_c = ['d2y', 'd1y'] + +### m* modules +### - the m* modules are the counterparts of the d* modules +### - m* modules do not depend on d* modules (and viceversa) +### - if the mode "unique-m*y" is chosen, +### one parameter in m1y is changed compared to d1y +### and this makes all the m*y modules unique, +### while the m*x modules should ultimately +### be flagged as duplicates of the d*x modules +process.m1x = process.d1x.clone() + +if args.mode == 0: + process.m1y = process.d1y.clone() +elif args.mode == 1: + process.m1y = process.d1y.clone( p2 = True ) + +process.m2x = process.d2x.clone( p2 = ['m1x'] ) +process.m2y = process.d2y.clone( p2 = ['m1y'] ) +process.m3x = process.d3x.clone() + +process.m3x.p1[0].pset_a.tag1 = 'm1x' +process.m3x.p1[0].pset_b.tag2 = 'm2x' +process.m3x.p2.p_a.p_b.p_c = ['m2x', 'm1x'] + +process.m3y = process.d3y.clone() +process.m3y.p1[0].pset_a.tag1 = 'm1y' +process.m3y.p1[0].pset_b.tag2 = 'm2y' +process.m3y.p2.p_a.p_b.p_c = ['m2y', 'm1y'] diff --git a/HLTrigger/Egamma/plugins/BuildFile.xml b/HLTrigger/Egamma/plugins/BuildFile.xml index dd7398eaed809..ecf72b45c80c8 100644 --- a/HLTrigger/Egamma/plugins/BuildFile.xml +++ b/HLTrigger/Egamma/plugins/BuildFile.xml @@ -12,6 +12,7 @@ + diff --git a/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.cc b/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.cc index c68819dd294e7..9c637465d46c8 100644 --- a/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.cc +++ b/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.cc @@ -4,18 +4,16 @@ * \author Monica Vazquez Acosta (CERN) * */ +#include #include "HLTDisplacedEgammaFilter.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" #include "RecoEcal/EgammaCoreTools/interface/EcalClusterTools.h" -#include "DataFormats/Math/interface/LorentzVector.h" -// -// constructors and destructor -// HLTDisplacedEgammaFilter::HLTDisplacedEgammaFilter(const edm::ParameterSet& iConfig) : HLTFilter(iConfig) { inputTag_ = iConfig.getParameter("inputTag"); ncandcut_ = iConfig.getParameter("ncandcut"); @@ -23,7 +21,11 @@ HLTDisplacedEgammaFilter::HLTDisplacedEgammaFilter(const edm::ParameterSet& iCon inputTrk = iConfig.getParameter("inputTrack"); trkPtCut = iConfig.getParameter("trackPtCut"); - trkdRCut = iConfig.getParameter("trackdRCut"); + + // track dR^2 threshold with sign + auto const trkDrCut = iConfig.getParameter("trackdRCut"); + trkDr2Cut = trkDrCut * std::abs(trkDrCut); + maxTrkCut = iConfig.getParameter("maxTrackCut"); rechitsEB = iConfig.getParameter("RecHitsEB"); @@ -41,13 +43,12 @@ HLTDisplacedEgammaFilter::HLTDisplacedEgammaFilter(const edm::ParameterSet& iCon inputToken_ = consumes(inputTag_); rechitsEBToken_ = consumes(rechitsEB); rechitsEEToken_ = consumes(rechitsEE); + if (useTrackVeto) { inputTrkToken_ = consumes(inputTrk); } } -HLTDisplacedEgammaFilter::~HLTDisplacedEgammaFilter() = default; - void HLTDisplacedEgammaFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; makeHLTFilterDescription(desc); @@ -139,9 +140,8 @@ bool HLTDisplacedEgammaFilter::hltFilter(edm::Event& iEvent, for (auto const& it : *tracks) { if (it.pt() < trkPtCut) continue; - LorentzVector trkP4(it.px(), it.py(), it.pz(), it.p()); - double dR = ROOT::Math::VectorUtil::DeltaR(trkP4, ref->p4()); - if (dR < trkdRCut) + auto const dR2 = reco::deltaR2(it.eta(), it.phi(), ref->eta(), ref->phi()); + if (dR2 < trkDr2Cut) nTrk++; if (nTrk > maxTrkCut) break; @@ -156,9 +156,7 @@ bool HLTDisplacedEgammaFilter::hltFilter(edm::Event& iEvent, } // filter decision - bool accept(n >= ncandcut_); - - return accept; + return (n >= ncandcut_); } // declare this class as a framework plugin diff --git a/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.h b/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.h index d12f90d1a0eb7..661d9f4cf7023 100644 --- a/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.h +++ b/HLTrigger/Egamma/plugins/HLTDisplacedEgammaFilter.h @@ -1,5 +1,5 @@ -#ifndef HLTDisplacedEgammaFilter_h -#define HLTDisplacedEgammaFilter_h +#ifndef HLTrigger_Egamma_HLTDisplacedEgammaFilter_h +#define HLTrigger_Egamma_HLTDisplacedEgammaFilter_h /** \class HLTDisplacedEgammaFilter * @@ -7,24 +7,19 @@ * */ -#include "HLTrigger/HLTcore/interface/HLTFilter.h" - #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" #include "DataFormats/TrackReco/interface/Track.h" #include "DataFormats/TrackReco/interface/TrackFwd.h" - -// -// class decleration -// -typedef math::XYZTLorentzVector LorentzVector; -#include +#include "HLTrigger/HLTcore/interface/HLTFilter.h" class HLTDisplacedEgammaFilter : public HLTFilter { public: explicit HLTDisplacedEgammaFilter(const edm::ParameterSet&); - ~HLTDisplacedEgammaFilter() override; + ~HLTDisplacedEgammaFilter() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override; @@ -51,8 +46,8 @@ class HLTDisplacedEgammaFilter : public HLTFilter { edm::InputTag inputTrk; edm::EDGetTokenT inputTrkToken_; double trkPtCut; - double trkdRCut; + double trkDr2Cut; int maxTrkCut; }; -#endif //HLTDisplacedEgammaFilter_h +#endif diff --git a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc index 63562e2f99f2c..2f6dde279b85f 100644 --- a/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc +++ b/HLTrigger/Egamma/plugins/HLTScoutingEgammaProducer.cc @@ -279,6 +279,10 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e std::vector trkpt; std::vector trketa; std::vector trkphi; + std::vector trkpMode; + std::vector trketaMode; + std::vector trkphiMode; + std::vector trkqoverpModeError; std::vector trkchi2overndf; std::vector trkcharge; trkd0.reserve(maxTrkSize); @@ -286,6 +290,10 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e trkpt.reserve(maxTrkSize); trketa.reserve(maxTrkSize); trkphi.reserve(maxTrkSize); + trkpMode.reserve(maxTrkSize); + trketaMode.reserve(maxTrkSize); + trkphiMode.reserve(maxTrkSize); + trkqoverpModeError.reserve(maxTrkSize); trkchi2overndf.reserve(maxTrkSize); trkcharge.reserve(maxTrkSize); @@ -300,6 +308,10 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e trkpt.push_back(track.pt()); trketa.push_back(track.eta()); trkphi.push_back(track.phi()); + trkpMode.push_back(track.pMode()); + trketaMode.push_back(track.etaMode()); + trkphiMode.push_back(track.phiMode()); + trkqoverpModeError.push_back(track.qoverpModeError()); auto const trackndof = track.ndof(); trkchi2overndf.push_back(((trackndof == 0) ? -1 : (track.chi2() / trackndof))); trkcharge.push_back(track.charge()); @@ -310,6 +322,9 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e candidate.eta(), candidate.phi(), candidate.mass(), + scRef->rawEnergy(), + scRef->preshowerEnergy(), + scRef->correctedEnergyUncertainty(), (*SigmaIEtaIEtaMap)[candidateRef], HoE, (*EcalPFClusterIsoMap)[candidateRef], @@ -319,6 +334,8 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e sMin, sMaj, seedId, + scRef->clustersSize(), + scRef->size(), mEnergies, mDetIdIds, mTimes, @@ -328,11 +345,18 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e candidate.eta(), candidate.phi(), candidate.mass(), + scRef->rawEnergy(), + scRef->preshowerEnergy(), + scRef->correctedEnergyUncertainty(), trkd0, trkdz, trkpt, trketa, trkphi, + trkpMode, + trketaMode, + trkphiMode, + trkqoverpModeError, trkchi2overndf, (*DetaMap)[candidateRef], (*DphiMap)[candidateRef], @@ -341,6 +365,7 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e (*OneOEMinusOneOPMap)[candidateRef], (*MissingHitsMap)[candidateRef], trkcharge, + 0.0 /* waiting implementation of the track fbrem producer*/, (*EcalPFClusterIsoMap)[candidateRef], (*HcalPFClusterIsoMap)[candidateRef], (*EleGsfTrackIsoMap)[candidateRef], @@ -348,6 +373,8 @@ void HLTScoutingEgammaProducer::produce(edm::StreamID sid, edm::Event& iEvent, e sMin, sMaj, seedId, + scRef->clustersSize(), + scRef->size(), mEnergies, mDetIdIds, mTimes, diff --git a/HLTrigger/HLTcore/BuildFile.xml b/HLTrigger/HLTcore/BuildFile.xml index 5acb169764e24..b9c1c7efa9574 100644 --- a/HLTrigger/HLTcore/BuildFile.xml +++ b/HLTrigger/HLTcore/BuildFile.xml @@ -6,6 +6,7 @@ + diff --git a/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h b/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h index 1a130894a75af..b5276a1469d3a 100644 --- a/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h +++ b/HLTrigger/HLTcore/interface/HLTEventAnalyzerRAW.h @@ -131,6 +131,9 @@ class HLTEventAnalyzerRAW : public edm::stream::EDAnalyzer<> { trigger::VRpftau pftauRefs_; trigger::Vids pfmetIds_; trigger::VRpfmet pfmetRefs_; + + trigger::Vids l1tp2gtcandIds_; + trigger::VRl1tp2gtcand l1tp2gtcandRefs_; }; template diff --git a/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h b/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h index 3b6b6feabc4f3..90426b68efd51 100644 --- a/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h +++ b/HLTrigger/HLTcore/interface/TriggerSummaryProducerAOD.h @@ -43,6 +43,7 @@ #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h" #include "DataFormats/L1Trigger/interface/L1EtMissParticleFwd.h" #include "DataFormats/L1Trigger/interface/L1HFRingsFwd.h" +#include "DataFormats/L1Trigger/interface/P2GTCandidate.h" #include "DataFormats/JetReco/interface/PFJetCollection.h" #include "DataFormats/TauReco/interface/PFTauFwd.h" @@ -217,5 +218,6 @@ class TriggerSummaryProducerAOD : public edm::global::EDProducer<> { edm::GetterOfProducts getL1TPFTauCollection_; edm::GetterOfProducts getL1THPSPFTauCollection_; edm::GetterOfProducts getL1TPFTrackCollection_; + edm::GetterOfProducts getL1TP2GTCandCollection_; }; #endif diff --git a/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc b/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc index 76116f4050f28..8b3c2a873d5a3 100644 --- a/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc +++ b/HLTrigger/HLTcore/plugins/HLTEventAnalyzerRAW.cc @@ -248,6 +248,9 @@ void HLTEventAnalyzerRAW::analyzeTrigger(const edm::Event& iEvent, pfmetIds_.clear(); pfmetRefs_.clear(); + l1tp2gtcandIds_.clear(); + l1tp2gtcandRefs_.clear(); + // Attention: must look only for modules actually run in this path for this event! for (unsigned int j = 0; j <= moduleIndex; ++j) { const std::string& moduleLabel(moduleLabels[j]); @@ -377,6 +380,10 @@ void HLTEventAnalyzerRAW::analyzeTrigger(const edm::Event& iEvent, // PFMETs triggerEventWithRefsHandle_->getObjects(filterIndex, pfmetIds_, pfmetRefs_); showObjects(pfmetIds_, pfmetRefs_, "PFMETs"); + + // L1TP2GTCandidates + triggerEventWithRefsHandle_->getObjects(filterIndex, l1tp2gtcandIds_, l1tp2gtcandRefs_); + showObjects(l1tp2gtcandIds_, l1tp2gtcandRefs_, "L1TP2GTCandidates"); } } diff --git a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc index 1a3367ad08a58..16085439353e4 100644 --- a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc +++ b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerAOD.cc @@ -159,6 +159,8 @@ TriggerSummaryProducerAOD::TriggerSummaryProducerAOD(const edm::ParameterSet& ps getPFTauCollection_ = edm::GetterOfProducts(productMatch, this); getPFMETCollection_ = edm::GetterOfProducts(productMatch, this); + getL1TP2GTCandCollection_ = edm::GetterOfProducts(productMatch, this); + callWhenNewProductsRegistered([this](edm::BranchDescription const& bd) { getTriggerFilterObjectWithRefs_(bd); getRecoEcalCandidateCollection_(bd); @@ -190,6 +192,7 @@ TriggerSummaryProducerAOD::TriggerSummaryProducerAOD(const edm::ParameterSet& ps getPFJetCollection_(bd); getPFTauCollection_(bd); getPFMETCollection_(bd); + getL1TP2GTCandCollection_(bd); }); } @@ -297,15 +300,13 @@ void TriggerSummaryProducerAOD::produce(edm::StreamID, edm::Event& iEvent, const /// debug printout if (isDebugEnabled()) { /// event-by-event tags - const unsigned int nc(collectionTagsEvent.size()); - LogTrace("TriggerSummaryProducerAOD") << "Number of unique collections requested " << nc; + LogTrace("TriggerSummaryProducerAOD") << "Number of unique collections requested " << collectionTagsEvent.size(); const InputTagSet::const_iterator cb(collectionTagsEvent.begin()); const InputTagSet::const_iterator ce(collectionTagsEvent.end()); for (InputTagSet::const_iterator ci = cb; ci != ce; ++ci) { LogTrace("TriggerSummaryProducerAOD") << distance(cb, ci) << " " << ci->encode(); } - const unsigned int nf(filterTagsEvent.size()); - LogTrace("TriggerSummaryProducerAOD") << "Number of unique filters requested " << nf; + LogTrace("TriggerSummaryProducerAOD") << "Number of unique filters requested " << filterTagsEvent.size(); const InputTagSet::const_iterator fb(filterTagsEvent.begin()); const InputTagSet::const_iterator fe(filterTagsEvent.end()); for (InputTagSet::const_iterator fi = fb; fi != fe; ++fi) { @@ -385,6 +386,8 @@ void TriggerSummaryProducerAOD::produce(edm::StreamID, edm::Event& iEvent, const fillTriggerObjectCollections( toc, offset, tags, keys, iEvent, getPFMETCollection_, collectionTagsEvent); /// + fillTriggerObjectCollections( + toc, offset, tags, keys, iEvent, getL1TP2GTCandCollection_, collectionTagsEvent); const unsigned int nk(tags.size()); LogDebug("TriggerSummaryProducerAOD") << "Number of collections found: " << nk; const unsigned int no(toc.size()); @@ -457,6 +460,8 @@ void TriggerSummaryProducerAOD::produce(edm::StreamID, edm::Event& iEvent, const fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfjetIds(), fobs[ifob]->pfjetRefs(), offset, keys, ids); fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pftauIds(), fobs[ifob]->pftauRefs(), offset, keys, ids); fillFilterObjectMembers(iEvent, filterTag, fobs[ifob]->pfmetIds(), fobs[ifob]->pfmetRefs(), offset, keys, ids); + fillFilterObjectMembers( + iEvent, filterTag, fobs[ifob]->l1tp2gtcandIds(), fobs[ifob]->l1tp2gtcandRefs(), offset, keys, ids); product->addFilter(filterTag, ids, keys); } } diff --git a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc index e0800a26aadee..772f07124368c 100644 --- a/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc +++ b/HLTrigger/HLTcore/plugins/TriggerSummaryProducerRAW.cc @@ -115,6 +115,11 @@ void TriggerSummaryProducerRAW::produce(edm::StreamID, edm::Event& iEvent, const << "TriggerSummaryProducerRaw::addFilterObjects( )" << "\n fobs[ifob]->l1tmuonShowerIds().size() = " << fobs[ifob]->l1tmuonShowerIds().size() << "\n fobs[ifob]->l1tmuonShowerRefs().size() = " << fobs[ifob]->l1tmuonShowerRefs().size(); + LogTrace("TriggerSummaryProducerRaw") + << "TriggerSummaryProducerRaw::addFilterObjects( )" + << "\n fobs[ifob]->l1tp2gtcandSize() = " << fobs[ifob]->l1tp2gtcandSize() + << "\n fobs[ifob]->l1tp2gtcandIds().size() = " << fobs[ifob]->l1tp2gtcandIds().size() + << "\n fobs[ifob]->11tp2gtcandRefs().size() = " << fobs[ifob]->l1tp2gtcandRefs().size(); product.addFilterObject(tag, *fobs[ifob]); } diff --git a/HLTrigger/HLTcore/src/HLTConfigData.cc b/HLTrigger/HLTcore/src/HLTConfigData.cc index 81cd648bafbb7..9ee9c6afa9dbd 100644 --- a/HLTrigger/HLTcore/src/HLTConfigData.cc +++ b/HLTrigger/HLTcore/src/HLTConfigData.cc @@ -10,6 +10,7 @@ #include "HLTrigger/HLTcore/interface/HLTConfigData.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Utilities/interface/path_configuration.h" +#include "FWCore/Utilities/interface/thread_safety_macros.h" #include "FWCore/Utilities/interface/transform.h" #include @@ -88,34 +89,33 @@ void HLTConfigData::extract() { using namespace trigger; // Extract process name - if (processPSet_->existsAs("@process_name", true)) { + CMS_SA_ALLOW if (processPSet_->existsAs("@process_name", true)) { processName_ = processPSet_->getParameter("@process_name"); } // Extract globaltag globalTag_ = ""; const ParameterSet* GlobalTagPSet(nullptr); - if (processPSet_->exists("GlobalTag")) { - GlobalTagPSet = &(processPSet_->getParameterSet("GlobalTag")); - } else if (processPSet_->exists("PoolDBESSource@GlobalTag")) { + CMS_SA_ALLOW if (processPSet_->exists("GlobalTag")) { GlobalTagPSet = &(processPSet_->getParameterSet("GlobalTag")); } + else if (processPSet_->exists("PoolDBESSource@GlobalTag")) { GlobalTagPSet = &(processPSet_->getParameterSet("PoolDBESSource@GlobalTag")); } - if (GlobalTagPSet && GlobalTagPSet->existsAs("globaltag", true)) { + CMS_SA_ALLOW if (GlobalTagPSet && GlobalTagPSet->existsAs("globaltag", true)) { globalTag_ = GlobalTagPSet->getParameter("globaltag"); } // Obtain PSet containing table name (available only in 2_1_10++ files) - if (processPSet_->existsAs("HLTConfigVersion", true)) { + CMS_SA_ALLOW if (processPSet_->existsAs("HLTConfigVersion", true)) { const ParameterSet& HLTPSet(processPSet_->getParameterSet("HLTConfigVersion")); - if (HLTPSet.existsAs("tableName", true)) { + CMS_SA_ALLOW if (HLTPSet.existsAs("tableName", true)) { tableName_ = HLTPSet.getParameter("tableName"); } } // Extract trigger paths (= paths - end_paths) - if (processPSet_->existsAs("@trigger_paths", true)) { + CMS_SA_ALLOW if (processPSet_->existsAs("@trigger_paths", true)) { const ParameterSet& HLTPSet(processPSet_->getParameterSet("@trigger_paths")); - if (HLTPSet.existsAs>("@trigger_paths", true)) { + CMS_SA_ALLOW if (HLTPSet.existsAs>("@trigger_paths", true)) { triggerNames_ = HLTPSet.getParameter>("@trigger_paths"); } } @@ -124,7 +124,7 @@ void HLTConfigData::extract() { const unsigned int n(size()); moduleLabels_.reserve(n); for (unsigned int i = 0; i != n; ++i) { - if (processPSet_->existsAs>(triggerNames_[i], true)) { + CMS_SA_ALLOW if (processPSet_->existsAs>(triggerNames_[i], true)) { moduleLabels_.push_back(path_configuration::configurationToModuleBitPosition( processPSet_->getParameter>(triggerNames_[i]))); } @@ -203,7 +203,7 @@ void HLTConfigData::extract() { } // Extract and fill streams information - if (processPSet_->existsAs("streams", true)) { + CMS_SA_ALLOW if (processPSet_->existsAs("streams", true)) { const ParameterSet& streams(processPSet_->getParameterSet("streams")); streamNames_ = streams.getParameterNamesForType>(); sort(streamNames_.begin(), streamNames_.end()); @@ -217,7 +217,7 @@ void HLTConfigData::extract() { } // Extract and fill datasets information - if (processPSet_->existsAs("datasets", true)) { + CMS_SA_ALLOW if (processPSet_->existsAs("datasets", true)) { const ParameterSet& datasets(processPSet_->getParameterSet("datasets")); datasetNames_ = datasets.getParameterNamesForType>(); sort(datasetNames_.begin(), datasetNames_.end()); @@ -236,9 +236,8 @@ void HLTConfigData::extract() { string prescaleName(""); const string preS("PrescaleService"); const string preT("PrescaleTable"); - if (processPSet_->existsAs(preS, true)) { - prescaleName = preS; - } else if (processPSet_->existsAs(preT, true)) { + CMS_SA_ALLOW if (processPSet_->existsAs(preS, true)) { prescaleName = preS; } + else if (processPSet_->existsAs(preT, true)) { prescaleName = preT; } if (prescaleName.empty()) { @@ -246,11 +245,11 @@ void HLTConfigData::extract() { } else { const ParameterSet& iPS(processPSet_->getParameterSet(prescaleName)); string defaultLabel("default"); - if (iPS.existsAs("lvl1DefaultLabel", true)) { + CMS_SA_ALLOW if (iPS.existsAs("lvl1DefaultLabel", true)) { defaultLabel = iPS.getParameter("lvl1DefaultLabel"); } vector labels; - if (iPS.existsAs>("lvl1Labels", true)) { + CMS_SA_ALLOW if (iPS.existsAs>("lvl1Labels", true)) { labels = iPS.getParameter>("lvl1Labels"); } unsigned int set(0); @@ -260,7 +259,7 @@ void HLTConfigData::extract() { set = i; } map> table; - if (iPS.existsAs>("prescaleTable", true)) { + CMS_SA_ALLOW if (iPS.existsAs>("prescaleTable", true)) { const vector& vpTable(iPS.getParameterSetVector("prescaleTable")); const unsigned int m(vpTable.size()); for (unsigned int i = 0; i != m; ++i) { @@ -286,7 +285,7 @@ void HLTConfigData::extract() { // Determine L1T Type (0=unknown, 1=legacy/stage-1 or 2=stage-2) l1tType_ = 0; unsigned int stage1(0), stage2(0); - if (processPSet_->existsAs>("@all_modules")) { + CMS_SA_ALLOW if (processPSet_->existsAs>("@all_modules")) { const std::vector& allModules(processPSet_->getParameter>("@all_modules")); for (auto const& allModule : allModules) { if ((moduleType(allModule) == "HLTLevel1GTSeed") or (moduleType(allModule) == "L1GlobalTrigger")) { @@ -492,18 +491,20 @@ unsigned int HLTConfigData::moduleIndex(const std::string& trigger, const std::s const std::string HLTConfigData::moduleType(const std::string& module) const { const edm::ParameterSet& pset(modulePSet(module)); - if (pset.existsAs("@module_type", true)) { + CMS_SA_ALLOW if (pset.existsAs("@module_type", true)) { return pset.getParameter("@module_type"); - } else { + } + else { return ""; } } const std::string HLTConfigData::moduleEDMType(const std::string& module) const { const edm::ParameterSet& pset(modulePSet(module)); - if (pset.existsAs("@module_edm_type", true)) { + CMS_SA_ALLOW if (pset.existsAs("@module_edm_type", true)) { return pset.getParameter("@module_edm_type"); - } else { + } + else { return ""; } } @@ -515,18 +516,18 @@ const edm::ParameterSet& HLTConfigData::modulePSet(const std::string& module) co //but in the PSet, the module is named "modname" //so if it starts with "-", you need to remove the "-" from the //module name to be able to retreive it from the PSet - if (processPSet_->exists(module.front() != '-' ? module : module.substr(1))) { + CMS_SA_ALLOW if (processPSet_->exists(module.front() != '-' ? module : module.substr(1))) { return processPSet_->getParameterSet(module.front() != '-' ? module : module.substr(1)); - } else { + } + else { return *s_dummyPSet(); } } bool HLTConfigData::saveTags(const std::string& module) const { const edm::ParameterSet& pset(modulePSet(module)); - if (pset.existsAs("saveTags", true)) { - return pset.getParameter("saveTags"); - } else { + CMS_SA_ALLOW if (pset.existsAs("saveTags", true)) { return pset.getParameter("saveTags"); } + else { return false; } } diff --git a/HLTrigger/HLTcore/src/HLTConfigProvider.cc b/HLTrigger/HLTcore/src/HLTConfigProvider.cc index 202efb42fd819..891a0bd62d5e4 100644 --- a/HLTrigger/HLTcore/src/HLTConfigProvider.cc +++ b/HLTrigger/HLTcore/src/HLTConfigProvider.cc @@ -11,6 +11,7 @@ #include "HLTrigger/HLTcore/interface/HLTConfigDataRegistry.h" #include "FWCore/Utilities/interface/RegexMatch.h" #include "FWCore/Utilities/interface/ThreadSafeRegistry.h" +#include "FWCore/Utilities/interface/thread_safety_macros.h" #include "FWCore/ParameterSet/interface/Registry.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/Event.h" @@ -37,10 +38,7 @@ bool HLTConfigProvider::init(const edm::Run& iRun, const edm::EventSetup& iSetup, const std::string& processName, bool& changed) { - using namespace std; - using namespace edm; - - LogInfo("HLTConfigProvider") << "Called (R) with processName '" << processName << "' for " << iRun.id() << endl; + edm::LogInfo("HLTConfigProvider") << "Called (R) with processName '" << processName << "' for " << iRun.id(); init(iRun.processHistory(), processName); @@ -50,7 +48,6 @@ bool HLTConfigProvider::init(const edm::Run& iRun, } void HLTConfigProvider::init(const edm::ProcessHistory& iHistory, const std::string& processName) { - using namespace std; using namespace edm; const ProcessHistory::const_iterator hb(iHistory.begin()); @@ -60,22 +57,23 @@ void HLTConfigProvider::init(const edm::ProcessHistory& iHistory, const std::str const edm::ParameterSet* processPSet(nullptr); processName_ = processName; + if (processName_ == "*") { // auto-discovery of process name for (ProcessHistory::const_iterator hi = hb; hi != he; ++hi) { if (iHistory.getConfigurationForProcess(hi->processName(), processConfiguration)) { processPSet = edm::pset::Registry::instance()->getMapped(processConfiguration.parameterSetID()); - if ((processPSet != nullptr) && (processPSet->exists("hltTriggerSummaryAOD"))) { + CMS_SA_ALLOW if ((processPSet != nullptr) && (processPSet->exists("hltTriggerSummaryAOD"))) { processName_ = hi->processName(); } } } if (processName_ == "*") { - LogError("HLTConfigProvider") << "Auto-discovery of processName failed!" << endl; + LogError("HLTConfigProvider") << "Auto-discovery of processName failed!"; clear(); return; } else { - LogInfo("HLTConfigProvider") << "Auto-discovered processName: '" << processName_ << "'" << endl; + LogInfo("HLTConfigProvider") << "Auto-discovered processName: '" << processName_ << "'"; } } if (processName_ == "@currentProcess") { @@ -90,7 +88,7 @@ void HLTConfigProvider::init(const edm::ProcessHistory& iHistory, const std::str } } if (n > 1) { - LogError("HLTConfigProvider") << " ProcessName '" << processName_ << " found " << n << " times in history!" << endl; + LogError("HLTConfigProvider") << " ProcessName '" << processName_ << " found " << n << " times in history!"; clear(); return; } @@ -151,13 +149,12 @@ void HLTConfigProvider::getDataFrom(const edm::ParameterSetID& iID) { } void HLTConfigProvider::init(const std::string& processName) { - using namespace std; using namespace edm; // Obtain ParameterSetID for requested process (with name // processName) from pset registry - string pNames(""); - string hNames(""); + std::string pNames(""); + std::string hNames(""); const ParameterSet* pset = nullptr; ParameterSetID psetID; unsigned int nPSets(0); @@ -165,8 +162,9 @@ void HLTConfigProvider::init(const std::string& processName) { const edm::pset::Registry::const_iterator rb(registry_->begin()); const edm::pset::Registry::const_iterator re(registry_->end()); for (edm::pset::Registry::const_iterator i = rb; i != re; ++i) { - if (i->second.existsAs("@process_name", true) and i->second.existsAs>("@paths", true)) { - const std::string pName(i->second.getParameter("@process_name")); + CMS_SA_ALLOW if (i->second.existsAs("@process_name", true) and + i->second.existsAs>("@paths", true)) { + const std::string pName(i->second.getParameter("@process_name")); pNames += pName + " "; if (pName == processName) { psetID = i->first; @@ -174,10 +172,10 @@ void HLTConfigProvider::init(const std::string& processName) { if ((hltConfigData_ != s_dummyHLTConfigData()) && (hltConfigData_->id() == psetID)) { hNames += tableName(); } else if (nullptr != (pset = registry_->getMapped(psetID))) { - if (pset->exists("HLTConfigVersion")) { + CMS_SA_ALLOW if (pset->exists("HLTConfigVersion")) { const ParameterSet& HLTPSet(pset->getParameterSet("HLTConfigVersion")); - if (HLTPSet.exists("tableName")) { - hNames += HLTPSet.getParameter("tableName") + " "; + CMS_SA_ALLOW if (HLTPSet.exists("tableName")) { + hNames += HLTPSet.getParameter("tableName") + " "; } } } @@ -185,23 +183,22 @@ void HLTConfigProvider::init(const std::string& processName) { } } - LogVerbatim("HLTConfigProvider") << "Unordered list of all process names found: " << pNames << "." << endl; + LogVerbatim("HLTConfigProvider") << "Unordered list of all process names found: " << pNames << "."; - LogVerbatim("HLTConfigProvider") << "HLT TableName of each selected process: " << hNames << "." << endl; + LogVerbatim("HLTConfigProvider") << "HLT TableName of each selected process: " << hNames << "."; if (nPSets == 0) { - LogError("HLTConfigProvider") << " Process name '" << processName << "' not found in registry!" << endl; + LogError("HLTConfigProvider") << " Process name '" << processName << "' not found in registry!"; clear(); return; } if (psetID == ParameterSetID()) { - LogError("HLTConfigProvider") << " Process name '" << processName << "' found but ParameterSetID invalid!" << endl; + LogError("HLTConfigProvider") << " Process name '" << processName << "' found but ParameterSetID invalid!"; clear(); return; } if (nPSets > 1) { - LogError("HLTConfigProvider") << " Process name '" << processName << " found " << nPSets << " times in registry!" - << endl; + LogError("HLTConfigProvider") << " Process name '" << processName << " found " << nPSets << " times in registry!"; clear(); return; } diff --git a/HLTrigger/HLTfilters/plugins/BuildFile.xml b/HLTrigger/HLTfilters/plugins/BuildFile.xml index cb29742c3a0b3..323d6b58e4f1c 100644 --- a/HLTrigger/HLTfilters/plugins/BuildFile.xml +++ b/HLTrigger/HLTfilters/plugins/BuildFile.xml @@ -11,6 +11,7 @@ + diff --git a/HLTrigger/HLTfilters/plugins/HLTDoublet.cc b/HLTrigger/HLTfilters/plugins/HLTDoublet.cc index 21493e81f98b4..e9abd468b7b8a 100644 --- a/HLTrigger/HLTfilters/plugins/HLTDoublet.cc +++ b/HLTrigger/HLTfilters/plugins/HLTDoublet.cc @@ -6,25 +6,20 @@ * \author Martin Grunewald * */ +#include -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "HLTDoublet.h" - +#include "DataFormats/Candidate/interface/Particle.h" #include "DataFormats/Common/interface/Handle.h" - #include "DataFormats/Common/interface/Ref.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" - -#include "DataFormats/Candidate/interface/Particle.h" - +#include "DataFormats/Math/interface/deltaPhi.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" - +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" -#include +#include "HLTDoublet.h" -// -// constructors and destructor -// template HLTDoublet::HLTDoublet(const edm::ParameterSet& iConfig) : HLTFilter(iConfig), @@ -36,36 +31,40 @@ HLTDoublet::HLTDoublet(const edm::ParameterSet& iConfig) inputToken2_(consumes(inputTag2_)), triggerType1_(iConfig.template getParameter("triggerType1")), triggerType2_(iConfig.template getParameter("triggerType2")), - min_Dphi_(iConfig.template getParameter("MinDphi")), - max_Dphi_(iConfig.template getParameter("MaxDphi")), min_Deta_(iConfig.template getParameter("MinDeta")), max_Deta_(iConfig.template getParameter("MaxDeta")), - min_Minv_(iConfig.template getParameter("MinMinv")), - max_Minv_(iConfig.template getParameter("MaxMinv")), - min_DelR_(iConfig.template getParameter("MinDelR")), - max_DelR_(iConfig.template getParameter("MaxDelR")), + min_Dphi_(iConfig.template getParameter("MinDphi")), + max_Dphi_(iConfig.template getParameter("MaxDphi")), + // min Delta-R^2 threshold with sign + min_DelR2_(iConfig.template getParameter("MinDelR") * + std::abs(iConfig.template getParameter("MinDelR"))), + // max Delta-R^2 threshold with sign + max_DelR2_(iConfig.template getParameter("MaxDelR") * + std::abs(iConfig.template getParameter("MaxDelR"))), min_Pt_(iConfig.template getParameter("MinPt")), max_Pt_(iConfig.template getParameter("MaxPt")), + min_Minv_(iConfig.template getParameter("MinMinv")), + max_Minv_(iConfig.template getParameter("MaxMinv")), min_N_(iConfig.template getParameter("MinN")), same_(inputTag1_.encode() == inputTag2_.encode()), // same collections to be compared? - cutdphi_(min_Dphi_ <= max_Dphi_), // cut active? cutdeta_(min_Deta_ <= max_Deta_), // cut active? - cutminv_(min_Minv_ <= max_Minv_), // cut active? - cutdelr_(min_DelR_ <= max_DelR_), // cut active? - cutpt_(min_Pt_ <= max_Pt_) // cut active? + cutdphi_(min_Dphi_ <= max_Dphi_), // cut active? + cutdelr2_(min_DelR2_ <= max_DelR2_), // cut active? + cutpt_(min_Pt_ <= max_Pt_), // cut active? + cutminv_(min_Minv_ <= max_Minv_) // cut active? { - LogDebug("") << "InputTags and cuts : " << inputTag1_.encode() << " " << inputTag2_.encode() << triggerType1_ << " " - << triggerType2_ << " Dphi [" << min_Dphi_ << " " << max_Dphi_ << "]" - << " Deta [" << min_Deta_ << " " << max_Deta_ << "]" - << " Minv [" << min_Minv_ << " " << max_Minv_ << "]" - << " DelR [" << min_DelR_ << " " << max_DelR_ << "]" - << " Pt [" << min_Pt_ << " " << max_Pt_ << "]" - << " MinN =" << min_N_ << " same/dphi/deta/minv/delr/pt " << same_ << cutdphi_ << cutdeta_ << cutminv_ - << cutdelr_ << cutpt_; + LogDebug("HLTDoublet") << "InputTags and cuts:\n inputTag1=" << inputTag1_.encode() + << " inputTag2=" << inputTag2_.encode() << " triggerType1=" << triggerType1_ + << " triggerType2=" << triggerType2_ << "\n Deta [" << min_Deta_ << ", " << max_Deta_ << "]" + << " Dphi [" << min_Dphi_ << ", " << max_Dphi_ << "]" + << " DelR2 [" << min_DelR2_ << ", " << max_DelR2_ << "]" + << " Pt [" << min_Pt_ << ", " << max_Pt_ << "]" + << " Minv [" << min_Minv_ << ", " << max_Minv_ << "]" + << " MinN=" << min_N_ << "\n same=" << same_ << " cut_deta=" << cutdeta_ + << " cutdphi=" << cutdphi_ << " cut_delr2=" << cutdelr2_ << " cut_pt=" << cutpt_ + << " cut_minv=" << cutminv_; } -template -HLTDoublet::~HLTDoublet() = default; template void HLTDoublet::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -78,16 +77,16 @@ void HLTDoublet::fillDescriptions(edm::ConfigurationDescriptions& descri desc.add("inputTag2", edm::InputTag("hltFiltered22")); desc.add("triggerType1", 0); desc.add("triggerType2", 0); - desc.add("MinDphi", +1.0); - desc.add("MaxDphi", -1.0); desc.add("MinDeta", +1.0); desc.add("MaxDeta", -1.0); - desc.add("MinMinv", +1.0); - desc.add("MaxMinv", -1.0); + desc.add("MinDphi", +1.0); + desc.add("MaxDphi", -1.0); desc.add("MinDelR", +1.0); desc.add("MaxDelR", -1.0); desc.add("MinPt", +1.0); desc.add("MaxPt", -1.0); + desc.add("MinMinv", +1.0); + desc.add("MaxMinv", -1.0); desc.add("MinN", 1); descriptions.add(defaultModuleLabel>(), desc); } @@ -112,7 +111,7 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, bool accept(false); - LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 0 " << std::endl; + LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 0 "; std::vector coll1; std::vector coll2; @@ -129,8 +128,7 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, InputTag tagOld; for (unsigned int i = 0; i < originTag1_.size(); ++i) { filterproduct.addCollectionTag(originTag1_[i]); - LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 1a/" << i << " " << originTag1_[i].encode() - << std::endl; + LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 1a/" << i << " " << originTag1_[i].encode(); } tagOld = InputTag(); for (size_type i1 = 0; i1 != n1; ++i1) { @@ -143,13 +141,12 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, if (tagOld.encode() != tagNew.encode()) { filterproduct.addCollectionTag(tagNew); tagOld = tagNew; - LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 1b " << tagNew.encode() << std::endl; + LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 1b " << tagNew.encode(); } } for (unsigned int i = 0; i < originTag2_.size(); ++i) { filterproduct.addCollectionTag(originTag2_[i]); - LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 2a/" << i << " " << originTag2_[i].encode() - << std::endl; + LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 2a/" << i << " " << originTag2_[i].encode(); } tagOld = InputTag(); for (size_type i2 = 0; i2 != n2; ++i2) { @@ -162,7 +159,7 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, if (tagOld.encode() != tagNew.encode()) { filterproduct.addCollectionTag(tagNew); tagOld = tagNew; - LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 2b " << tagNew.encode() << std::endl; + LogVerbatim("HLTDoublet") << " XXX " << moduleLabel() << " 2b " << tagNew.encode(); } } } @@ -182,29 +179,36 @@ bool HLTDoublet::hltFilter(edm::Event& iEvent, r2 = coll2[i2]; p2 = r2->p4(); - double Dphi(std::abs(p1.phi() - p2.phi())); - if (Dphi > M_PI) - Dphi = 2.0 * M_PI - Dphi; + if (cutdeta_ or cutdphi_ or cutdelr2_) { + double const Deta = std::abs(p1.eta() - p2.eta()); + if (cutdeta_ and (min_Deta_ > Deta or Deta > max_Deta_)) + continue; - double Deta(std::abs(p1.eta() - p2.eta())); + double const Dphi = std::abs(reco::deltaPhi(p1.phi(), p2.phi())); + if (cutdphi_ and (min_Dphi_ > Dphi or Dphi > max_Dphi_)) + continue; - p = p1 + p2; - double Minv(std::abs(p.mass())); - double Pt(p.pt()); - - double DelR(sqrt(Dphi * Dphi + Deta * Deta)); - - if (((!cutdphi_) || ((min_Dphi_ <= Dphi) && (Dphi <= max_Dphi_))) && - ((!cutdeta_) || ((min_Deta_ <= Deta) && (Deta <= max_Deta_))) && - ((!cutminv_) || ((min_Minv_ <= Minv) && (Minv <= max_Minv_))) && - ((!cutdelr_) || ((min_DelR_ <= DelR) && (DelR <= max_DelR_))) && - ((!cutpt_) || ((min_Pt_ <= Pt) && (Pt <= max_Pt_)))) { - n++; - filterproduct.addObject(triggerType1_, r1); - filterproduct.addObject(triggerType2_, r2); + double const DelR2 = Deta * Deta + Dphi * Dphi; + if (cutdelr2_ and (min_DelR2_ > DelR2 or DelR2 > max_DelR2_)) + continue; } + + p = p1 + p2; + + double const Pt = p.pt(); + if (cutpt_ and (min_Pt_ > Pt or Pt > max_Pt_)) + continue; + + double const Minv = std::abs(p.mass()); + if (cutminv_ and (min_Minv_ > Minv or Minv > max_Minv_)) + continue; + + n++; + filterproduct.addObject(triggerType1_, r1); + filterproduct.addObject(triggerType2_, r2); } } + // filter decision accept = (n >= min_N_); } diff --git a/HLTrigger/HLTfilters/plugins/HLTDoublet.h b/HLTrigger/HLTfilters/plugins/HLTDoublet.h index 8c9d84378a745..e360596f6dbaf 100644 --- a/HLTrigger/HLTfilters/plugins/HLTDoublet.h +++ b/HLTrigger/HLTfilters/plugins/HLTDoublet.h @@ -1,5 +1,5 @@ -#ifndef HLTDoublet_h -#define HLTDoublet_h +#ifndef HLTrigger_HLTfilters_HLTDoublet_h +#define HLTrigger_HLTfilters_HLTDoublet_h /** \class HLTDoublet * @@ -19,28 +19,35 @@ #include "DataFormats/Common/interface/Ref.h" #include "HLTrigger/HLTcore/interface/HLTFilter.h" -#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" -#include + #include + +namespace edm { + class ConfigurationDescriptions; +} + namespace trigger { class TriggerFilterObjectWithRefs; } -// -// class declaration -// - template class HLTDoublet : public HLTFilter { public: explicit HLTDoublet(const edm::ParameterSet&); - ~HLTDoublet() override; + ~HLTDoublet() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override; private: + typedef std::vector T1Collection; + typedef edm::Ref T1Ref; + typedef std::vector T2Collection; + typedef edm::Ref T2Ref; + // configuration const std::vector originTag1_; // input tag identifying originals 1st product const std::vector originTag2_; // input tag identifying originals 2nd product @@ -50,22 +57,18 @@ class HLTDoublet : public HLTFilter { const edm::EDGetTokenT inputToken2_; const int triggerType1_; const int triggerType2_; - const double min_Dphi_, max_Dphi_; // Delta phi window - const double min_Deta_, max_Deta_; // Delta eta window - const double min_Minv_, max_Minv_; // Minv(1,2) window - const double min_DelR_, max_DelR_; // Delta R window - const double min_Pt_, max_Pt_; // Pt(1,2) window - const int min_N_; // number of pairs passing cuts required + const double min_Deta_, max_Deta_; // Delta eta window + const double min_Dphi_, max_Dphi_; // Delta phi window + const double min_DelR2_, max_DelR2_; // Delta R^2 window + const double min_Pt_, max_Pt_; // Pt(1,2) window + const double min_Minv_, max_Minv_; // Minv(1,2) window + const int min_N_; // number of pairs passing cuts required // calculated from configuration in c'tor - const bool same_; // 1st and 2nd product are one and the same - const bool cutdphi_, cutdeta_, cutminv_, cutdelr_, cutpt_; // cuts are on=true or off=false - - // - typedef std::vector T1Collection; - typedef edm::Ref T1Ref; - typedef std::vector T2Collection; - typedef edm::Ref T2Ref; + // 1st and 2nd product are one and the same + const bool same_; + // cuts are on=true or off=false + const bool cutdeta_, cutdphi_, cutdelr2_, cutpt_, cutminv_; }; -#endif //HLTDoublet_h +#endif // HLTrigger_HLTfilters_HLTDoublet_h diff --git a/HLTrigger/HLTfilters/plugins/TestBXVectorRefProducer.cc b/HLTrigger/HLTfilters/plugins/TestBXVectorRefProducer.cc index a9e2d8727a0f9..2f3aabb69b13c 100644 --- a/HLTrigger/HLTfilters/plugins/TestBXVectorRefProducer.cc +++ b/HLTrigger/HLTfilters/plugins/TestBXVectorRefProducer.cc @@ -39,19 +39,11 @@ class TestBXVectorRefProducer : public edm::stream::EDProducer<> { public: explicit TestBXVectorRefProducer(const edm::ParameterSet&); - ~TestBXVectorRefProducer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- bool doRefs_; @@ -84,11 +76,6 @@ TestBXVectorRefProducer::TestBXVectorRefProducer(const edm::ParameterSet& iConfi } } -TestBXVectorRefProducer::~TestBXVectorRefProducer() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -127,44 +114,6 @@ void TestBXVectorRefProducer::produce(edm::Event& iEvent, const edm::EventSetup& return; } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void TestBXVectorRefProducer::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void TestBXVectorRefProducer::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -TestBXVectorRefProducer::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -TestBXVectorRefProducer::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -TestBXVectorRefProducer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -TestBXVectorRefProducer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void TestBXVectorRefProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/HLTrigger/HLTfilters/plugins/plugins.cc b/HLTrigger/HLTfilters/plugins/plugins.cc index 4fc9c1c75cc95..dfc0e61d3faf3 100644 --- a/HLTrigger/HLTfilters/plugins/plugins.cc +++ b/HLTrigger/HLTfilters/plugins/plugins.cc @@ -114,6 +114,7 @@ typedef HLTDoublet HLT2ElectronHLTTau; typedef HLTDoublet HLT2MuonHLTTau; typedef HLTDoublet HLT2ElectronPFTau; typedef HLTDoublet HLT2PhotonPFTau; +typedef HLTDoublet HLT2PhotonPFJet; typedef HLTDoublet HLT2MuonPFTau; typedef HLTDoublet HLT2ElectronPFJet; typedef HLTDoublet HLT2MuonPFJet; @@ -130,6 +131,8 @@ typedef HLTDoublet HLT2PhotonPFMET; #include "HLTDoubletSinglet.h" typedef HLTDoubletSinglet HLT3DoublePFTauPFJet; typedef HLTDoubletSinglet HLT3MuonPFTauPFJet; +typedef HLTDoubletSinglet HLT3TriplePFJet; +typedef HLTDoubletSinglet HLT3MuonDoublePFJet; typedef HLTDoubletSinglet HLT3DoublePFJetPhoton; DEFINE_FWK_MODULE(HLTBool); @@ -148,6 +151,7 @@ DEFINE_FWK_MODULE(HLT2PhotonTau); DEFINE_FWK_MODULE(HLT2MuonTau); DEFINE_FWK_MODULE(HLT2ElectronPFTau); DEFINE_FWK_MODULE(HLT2PhotonPFTau); +DEFINE_FWK_MODULE(HLT2PhotonPFJet); DEFINE_FWK_MODULE(HLT2MuonPFTau); DEFINE_FWK_MODULE(HLT2ElectronPFJet); DEFINE_FWK_MODULE(HLT2MuonPFJet); @@ -163,6 +167,8 @@ DEFINE_FWK_MODULE(HLT2PFTauPFTau); DEFINE_FWK_MODULE(HLT3DoublePFTauPFJet); DEFINE_FWK_MODULE(HLT3MuonPFTauPFJet); +DEFINE_FWK_MODULE(HLT3TriplePFJet); +DEFINE_FWK_MODULE(HLT3MuonDoublePFJet); DEFINE_FWK_MODULE(HLT3DoublePFJetPhoton); DEFINE_FWK_MODULE(HLT1Electron); diff --git a/HLTrigger/JetMET/BuildFile.xml b/HLTrigger/JetMET/BuildFile.xml index 585433e4dd13b..b8859874a2e11 100644 --- a/HLTrigger/JetMET/BuildFile.xml +++ b/HLTrigger/JetMET/BuildFile.xml @@ -1,3 +1,4 @@ + diff --git a/HLTrigger/JetMET/interface/HLTCATopTagFilter.h b/HLTrigger/JetMET/interface/HLTCATopTagFilter.h index a98aaff561baa..5c45372e403f2 100644 --- a/HLTrigger/JetMET/interface/HLTCATopTagFilter.h +++ b/HLTrigger/JetMET/interface/HLTCATopTagFilter.h @@ -16,8 +16,6 @@ #include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/JetReco/interface/BasicJet.h" #include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" #include "HLTrigger/HLTcore/interface/HLTFilter.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" diff --git a/HLTrigger/JetMET/interface/HLTCAWZTagFilter.h b/HLTrigger/JetMET/interface/HLTCAWZTagFilter.h index 30935213425d5..da232b1710860 100644 --- a/HLTrigger/JetMET/interface/HLTCAWZTagFilter.h +++ b/HLTrigger/JetMET/interface/HLTCAWZTagFilter.h @@ -14,8 +14,6 @@ #include "DataFormats/JetReco/interface/BasicJet.h" #include "DataFormats/JetReco/interface/CaloJet.h" #include "DataFormats/Candidate/interface/CompositeCandidate.h" -#include "CommonTools/CandUtils/interface/AddFourMomenta.h" -#include "DataFormats/Candidate/interface/CandMatchMap.h" #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" #include "HLTrigger/HLTcore/interface/HLTFilter.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" diff --git a/HLTrigger/JetMET/interface/HLTHPDFilter.h b/HLTrigger/JetMET/interface/HLTHPDFilter.h index e461d7712826f..bde6159859882 100644 --- a/HLTrigger/JetMET/interface/HLTHPDFilter.h +++ b/HLTrigger/JetMET/interface/HLTHPDFilter.h @@ -1,5 +1,5 @@ -#ifndef HLTHPDFilter_h -#define HLTHPDFilter_h +#ifndef HLTrigger_JetMET_HLTHPDFilter_h +#define HLTrigger_JetMET_HLTHPDFilter_h /** \class HLTHPDFilter * @@ -35,4 +35,4 @@ class HLTHPDFilter : public edm::stream::EDFilter<> { double mRBXSpikeUnbalanceThreshold; }; -#endif //HLTHPDFilter_h +#endif diff --git a/HLTrigger/JetMET/interface/HLTJetCollForElePlusJets.h b/HLTrigger/JetMET/interface/HLTJetCollForElePlusJets.h index e86a096aacf33..daba1c4166cc0 100644 --- a/HLTrigger/JetMET/interface/HLTJetCollForElePlusJets.h +++ b/HLTrigger/JetMET/interface/HLTJetCollForElePlusJets.h @@ -1,5 +1,5 @@ -#ifndef HLTJetCollForElePlusJets_h -#define HLTJetCollForElePlusJets_h +#ifndef HLTrigger_JetMET_HLTJetCollForElePlusJets_h +#define HLTrigger_JetMET_HLTJetCollForElePlusJets_h /** \class HLTJetCollForElePlusJets * @@ -17,30 +17,21 @@ */ // user include files +#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" - -#include "FWCore/Framework/interface/Event.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/JetReco/interface/PFJetCollection.h" namespace edm { class ConfigurationDescriptions; } -// -// class declaration -// - template class HLTJetCollForElePlusJets : public edm::stream::EDProducer<> { public: explicit HLTJetCollForElePlusJets(const edm::ParameterSet&); - ~HLTJetCollForElePlusJets() override; + ~HLTJetCollForElePlusJets() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: @@ -54,12 +45,9 @@ class HLTJetCollForElePlusJets : public edm::stream::EDProducer<> { double minJetPt_; // jet pt threshold in GeV double maxAbsJetEta_; // jet |eta| range unsigned int minNJets_; // number of required jets passing cuts after cleaning - - double minDeltaR_; //min dR for jets and electrons not to match - - double minSoftJetPt_; // jet pt threshold for the soft jet in the VBF pair - double minDeltaEta_; // pseudorapidity separation for the VBF pair - - // ----------member data --------------------------- + double minDeltaR2_; // min dR^2 (with sign) for jets and electrons not to match + double minSoftJetPt_; // jet pt threshold for the soft jet in the VBF pair + double minDeltaEta_; // pseudorapidity separation for the VBF pair }; -#endif //HLTJetCollForElePlusJets_h + +#endif diff --git a/HLTrigger/JetMET/interface/HLTJetCollectionsForBoostedLeptonPlusJets.h b/HLTrigger/JetMET/interface/HLTJetCollectionsForBoostedLeptonPlusJets.h index 21dfd8a2201d9..0c49db40dad0a 100644 --- a/HLTrigger/JetMET/interface/HLTJetCollectionsForBoostedLeptonPlusJets.h +++ b/HLTrigger/JetMET/interface/HLTJetCollectionsForBoostedLeptonPlusJets.h @@ -1,5 +1,5 @@ -#ifndef HLTJetCollectionsForBoostedLeptonPlusJets_h -#define HLTJetCollectionsForBoostedLeptonPlusJets_h +#ifndef HLTrigger_JetMET_HLTJetCollectionsForBoostedLeptonPlusJets_h +#define HLTrigger_JetMET_HLTJetCollectionsForBoostedLeptonPlusJets_h /** \class HLTJetCollectionsForBoostedLeptonPlusJets * @@ -16,26 +16,15 @@ * */ -// user include files +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" - -#include "DataFormats/JetReco/interface/PFJetCollection.h" - namespace edm { class ConfigurationDescriptions; } -// -// class declaration -// - template class HLTJetCollectionsForBoostedLeptonPlusJets : public edm::stream::EDProducer<> { public: @@ -51,8 +40,7 @@ class HLTJetCollectionsForBoostedLeptonPlusJets : public edm::stream::EDProducer edm::InputTag hltLeptonTag; edm::InputTag sourceJetTag; - double minDeltaR_; //min dR to consider cleaning - - // ----------member data --------------------------- + double minDeltaR2_; // min dR^2 (with sign) to consider cleaning }; -#endif //HLTJetCollectionsForBoostedLeptonPlusJets_h + +#endif diff --git a/HLTrigger/JetMET/interface/HLTJetCollectionsForLeptonPlusJets.h b/HLTrigger/JetMET/interface/HLTJetCollectionsForLeptonPlusJets.h index 9aa95422a2fe0..52d51ae2108c4 100644 --- a/HLTrigger/JetMET/interface/HLTJetCollectionsForLeptonPlusJets.h +++ b/HLTrigger/JetMET/interface/HLTJetCollectionsForLeptonPlusJets.h @@ -1,5 +1,5 @@ -#ifndef HLTJetCollectionsForLeptonPlusJets_h -#define HLTJetCollectionsForLeptonPlusJets_h +#ifndef HLTrigger_JetMET_HLTJetCollectionsForLeptonPlusJets_h +#define HLTrigger_JetMET_HLTJetCollectionsForLeptonPlusJets_h /** \class HLTJetCollectionsForLeptonPlusJets * @@ -17,17 +17,11 @@ */ // user include files +#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" +#include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/Event.h" - -#include "FWCore/ParameterSet/interface/ParameterSet.h" - -#include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" -#include "DataFormats/JetReco/interface/CaloJetCollection.h" -#include "DataFormats/JetReco/interface/PFJetCollection.h" - namespace edm { class ConfigurationDescriptions; } @@ -40,7 +34,7 @@ template class HLTJetCollectionsForLeptonPlusJets : public edm::stream::EDProducer<> { public: explicit HLTJetCollectionsForLeptonPlusJets(const edm::ParameterSet&); - ~HLTJetCollectionsForLeptonPlusJets() override; + ~HLTJetCollectionsForLeptonPlusJets() override = default; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: @@ -51,8 +45,7 @@ class HLTJetCollectionsForLeptonPlusJets : public edm::stream::EDProducer<> { edm::InputTag hltLeptonTag; edm::InputTag sourceJetTag; - double minDeltaR_; //min dR for jets and leptons not to match - - // ----------member data --------------------------- + double minDeltaR2_; // min dR^2 (with sign) for jets and leptons not to match }; -#endif //HLTJetCollectionsForLeptonPlusJets_h + +#endif diff --git a/HLTrigger/JetMET/interface/HLTJetL1MatchProducer.h b/HLTrigger/JetMET/interface/HLTJetL1MatchProducer.h index b3230c1fdddf0..8b82096aa3495 100644 --- a/HLTrigger/JetMET/interface/HLTJetL1MatchProducer.h +++ b/HLTrigger/JetMET/interface/HLTJetL1MatchProducer.h @@ -34,8 +34,7 @@ class HLTJetL1MatchProducer : public edm::stream::EDProducer<> { edm::InputTag L1TauJets_; edm::InputTag L1CenJets_; edm::InputTag L1ForJets_; - // std::string jetType_; - double DeltaR_; // DeltaR(HLT,L1) + double DeltaR2_; // DeltaR2(HLT,L1) with sign }; #endif diff --git a/HLTrigger/JetMET/interface/HLTJetL1TMatchProducer.h b/HLTrigger/JetMET/interface/HLTJetL1TMatchProducer.h index 71cdc0e411c9e..77d9e7b1ff5da 100644 --- a/HLTrigger/JetMET/interface/HLTJetL1TMatchProducer.h +++ b/HLTrigger/JetMET/interface/HLTJetL1TMatchProducer.h @@ -20,19 +20,19 @@ template class HLTJetL1TMatchProducer : public edm::stream::EDProducer<> { public: - explicit HLTJetL1TMatchProducer(const edm::ParameterSet &); - ~HLTJetL1TMatchProducer() override; - static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); - virtual void beginJob(); - void produce(edm::Event &, const edm::EventSetup &) override; + explicit HLTJetL1TMatchProducer(const edm::ParameterSet&); + ~HLTJetL1TMatchProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + + void produce(edm::Event&, const edm::EventSetup&) override; private: - edm::EDGetTokenT> m_theJetToken; - edm::EDGetTokenT m_theL1JetToken; edm::InputTag jetsInput_; edm::InputTag L1Jets_; - // std::string jetType_; - double DeltaR_; // DeltaR(HLT,L1) + double DeltaR2_; // DeltaR2(HLT,L1) with sign + edm::EDGetTokenT> m_theJetToken; + edm::EDGetTokenT m_theL1JetToken; }; #endif diff --git a/HLTrigger/JetMET/interface/HLTJetSortedVBFFilter.h b/HLTrigger/JetMET/interface/HLTJetSortedVBFFilter.h index f9e38b0121ac2..ac71b6adb1a18 100644 --- a/HLTrigger/JetMET/interface/HLTJetSortedVBFFilter.h +++ b/HLTrigger/JetMET/interface/HLTJetSortedVBFFilter.h @@ -36,9 +36,12 @@ class HLTJetSortedVBFFilter : public HLTFilter { static bool comparator(const Jpair& l, const Jpair& r) { return l.first < r.first; } explicit HLTJetSortedVBFFilter(const edm::ParameterSet&); - ~HLTJetSortedVBFFilter() override; + ~HLTJetSortedVBFFilter() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + static float findCSV(const typename std::vector::const_iterator& jet, const reco::JetTagCollection& jetTags); + bool hltFilter(edm::Event&, const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override; diff --git a/HLTrigger/JetMET/plugins/HLTJetHbbFilter.cc b/HLTrigger/JetMET/plugins/HLTJetHbbFilter.cc index 8b09869adeb1b..2b2492737b4ad 100644 --- a/HLTrigger/JetMET/plugins/HLTJetHbbFilter.cc +++ b/HLTrigger/JetMET/plugins/HLTJetHbbFilter.cc @@ -5,16 +5,15 @@ * \author Ann Wang * */ - -#include +#include #include +#include #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/Math/interface/deltaPhi.h" #include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/Common/interface/RefToBase.h" #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h" @@ -78,12 +77,12 @@ void HLTJetHbbFilter::fillDescriptions(edm::ConfigurationDescriptions& descri template float HLTJetHbbFilter::findCSV(const typename std::vector::const_iterator& jet, const reco::JetTagCollection& jetTags) { - float minDr = 0.1; //matching jet tag with jet + float minDr2 = 0.01f; //matching jet tag with jet float tmpCSV = -20; for (auto jetb = jetTags.begin(); (jetb != jetTags.end()); ++jetb) { - float tmpDr = reco::deltaR(*jet, *(jetb->first)); - if (tmpDr < minDr) { - minDr = tmpDr; + float tmpDr2 = reco::deltaR2(*jet, *(jetb->first)); + if (tmpDr2 < minDr2) { + minDr2 = tmpDr2; tmpCSV = jetb->second; } } diff --git a/HLTrigger/JetMET/src/HLTHPDFilter.cc b/HLTrigger/JetMET/src/HLTHPDFilter.cc index babb9dcd45b90..29b2604a8ce17 100644 --- a/HLTrigger/JetMET/src/HLTHPDFilter.cc +++ b/HLTrigger/JetMET/src/HLTHPDFilter.cc @@ -4,31 +4,17 @@ * Fedor Ratnikov (UMd) May 19, 2008 */ -#include "HLTrigger/JetMET/interface/HLTHPDFilter.h" - #include - #include - -#include +#include #include "DataFormats/Common/interface/Handle.h" -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/EventSetup.h" - -#include "Geometry/Records/interface/IdealGeometryRecord.h" -#include "Geometry/CaloTopology/interface/HcalTopology.h" - -#include "FWCore/ServiceRegistry/interface/Service.h" -#include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "TH1F.h" -#include "TH2F.h" - +#include "DataFormats/HcalDetId/interface/HcalDetId.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "FWCore/Utilities/interface/InputTag.h" +#include "HLTrigger/JetMET/interface/HLTHPDFilter.h" namespace { enum Partition { HBM = 0, HBP = 1, HEM = 2, HEP = 3 }; diff --git a/HLTrigger/JetMET/src/HLTJetCollForElePlusJets.cc b/HLTrigger/JetMET/src/HLTJetCollForElePlusJets.cc index 56f8939a9df64..57031428c0e61 100644 --- a/HLTrigger/JetMET/src/HLTJetCollForElePlusJets.cc +++ b/HLTrigger/JetMET/src/HLTJetCollForElePlusJets.cc @@ -1,15 +1,18 @@ -#include "HLTrigger/JetMET/interface/HLTJetCollForElePlusJets.h" - -#include "FWCore/Framework/interface/MakerMacros.h" +#include +#include +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "DataFormats/Common/interface/Handle.h" - -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" #include "DataFormats/EgammaCandidates/interface/Electron.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "TVector3.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" #include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "HLTrigger/JetMET/interface/HLTJetCollForElePlusJets.h" + +#include template HLTJetCollForElePlusJets::HLTJetCollForElePlusJets(const edm::ParameterSet& iConfig) @@ -18,7 +21,8 @@ HLTJetCollForElePlusJets::HLTJetCollForElePlusJets(const edm::ParameterSet& i minJetPt_(iConfig.getParameter("MinJetPt")), maxAbsJetEta_(iConfig.getParameter("MaxAbsJetEta")), minNJets_(iConfig.getParameter("MinNJets")), - minDeltaR_(iConfig.getParameter("minDeltaR")), + // minimum delta-R^2 threshold with sign + minDeltaR2_(iConfig.getParameter("minDeltaR") * std::abs(iConfig.getParameter("minDeltaR"))), //Only for VBF minSoftJetPt_(iConfig.getParameter("MinSoftJetPt")), minDeltaEta_(iConfig.getParameter("MinDeltaEta")) { @@ -28,12 +32,6 @@ HLTJetCollForElePlusJets::HLTJetCollForElePlusJets(const edm::ParameterSet& i produces(); } -template -HLTJetCollForElePlusJets::~HLTJetCollForElePlusJets() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - template void HLTJetCollForElePlusJets::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -116,28 +114,37 @@ void HLTJetCollForElePlusJets::produce(edm::Event& iEvent, const edm::EventSe bool foundSolution(false); - for (auto& EleP : ElePs) { + for (auto const& EleP : ElePs) { bool VBFJetPair = false; std::vector store_jet; TRefVector refVector; for (unsigned int j = 0; j < theJetCollection.size(); j++) { TVector3 JetP(theJetCollection[j].px(), theJetCollection[j].py(), theJetCollection[j].pz()); - double DR = EleP.DeltaR(JetP); - if (JetP.Pt() > minJetPt_ && std::abs(JetP.Eta()) < maxAbsJetEta_ && DR > minDeltaR_) { + double const Deta = EleP.Eta() - JetP.Eta(); + double const Dphi = EleP.DeltaPhi(JetP); + double const DR2 = Deta * Deta + Dphi * Dphi; + + if (JetP.Pt() > minJetPt_ && std::abs(JetP.Eta()) < maxAbsJetEta_ && DR2 > minDeltaR2_) { store_jet.push_back(j); // The VBF part of the filter if (minDeltaEta_ > 0) { for (unsigned int k = j + 1; k < theJetCollection.size(); k++) { TVector3 SoftJetP(theJetCollection[k].px(), theJetCollection[k].py(), theJetCollection[k].pz()); - double softDR = EleP.DeltaR(SoftJetP); - if (SoftJetP.Pt() > minSoftJetPt_ && std::abs(SoftJetP.Eta()) < maxAbsJetEta_ && softDR > minDeltaR_) - if (std::abs(SoftJetP.Eta() - JetP.Eta()) > minDeltaEta_) { - store_jet.push_back(k); - VBFJetPair = true; - } + if (std::abs(SoftJetP.Eta() - JetP.Eta()) <= minDeltaEta_) { + continue; + } + + double const softDeta = EleP.Eta() - SoftJetP.Eta(); + double const softDphi = EleP.DeltaPhi(SoftJetP); + double const softDR2 = softDeta * softDeta + softDphi * softDphi; + + if (SoftJetP.Pt() > minSoftJetPt_ && std::abs(SoftJetP.Eta()) < maxAbsJetEta_ && softDR2 > minDeltaR2_) { + store_jet.push_back(k); + VBFJetPair = true; + } } } } diff --git a/HLTrigger/JetMET/src/HLTJetCollectionsForBoostedLeptonPlusJets.cc b/HLTrigger/JetMET/src/HLTJetCollectionsForBoostedLeptonPlusJets.cc index 65080277e095c..cef8d0a049cad 100644 --- a/HLTrigger/JetMET/src/HLTJetCollectionsForBoostedLeptonPlusJets.cc +++ b/HLTrigger/JetMET/src/HLTJetCollectionsForBoostedLeptonPlusJets.cc @@ -1,29 +1,31 @@ +#include #include #include -#include "TVector3.h" - -#include "FWCore/Framework/interface/MakerMacros.h" -#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "CommonTools/Utils/interface/PtComparator.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/EgammaCandidates/interface/Electron.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/JetReco/interface/PFJet.h" +#include "DataFormats/Math/interface/deltaR.h" #include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "HLTrigger/JetMET/interface/HLTJetCollectionsForBoostedLeptonPlusJets.h" #include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" -#include "CommonTools/Utils/interface/PtComparator.h" template HLTJetCollectionsForBoostedLeptonPlusJets::HLTJetCollectionsForBoostedLeptonPlusJets( const edm::ParameterSet& iConfig) : hltLeptonTag(iConfig.getParameter("HltLeptonTag")), sourceJetTag(iConfig.getParameter("SourceJetTag")), - minDeltaR_(iConfig.getParameter("minDeltaR")) { + // minimum delta-R^2 threshold with sign + minDeltaR2_(iConfig.getParameter("minDeltaR") * std::abs(iConfig.getParameter("minDeltaR"))) { using namespace edm; using namespace std; @@ -107,12 +109,12 @@ void HLTJetCollectionsForBoostedLeptonPlusJets::produce(edm::Event& iEv for (size_t candNr = 0; candNr < muonCands.size(); candNr++) { if (std::find(usedCands.begin(), usedCands.end(), candNr) != usedCands.end()) continue; - if (deltaR((*muonCands[candNr]), cleanedJet) <= minDeltaR_) { + if (reco::deltaR2((*muonCands[candNr]), cleanedJet) <= minDeltaR2_) { std::vector> pfConstituents = cleanedJet.getPFConstituents(); for (std::vector>::const_iterator i_candidate = pfConstituents.begin(); i_candidate != pfConstituents.end(); ++i_candidate) { - if (deltaR((*muonCands[candNr]), (**i_candidate)) < 0.001) { + if (reco::deltaR2((*muonCands[candNr]), (**i_candidate)) < 1e-6) { cleanedJet.setP4(cleanedJet.p4() - muonCands[candNr]->p4()); usedCands.push_back(candNr); break; @@ -131,12 +133,12 @@ void HLTJetCollectionsForBoostedLeptonPlusJets::produce(edm::Event& iEv for (size_t candNr = 0; candNr < eleCands.size(); candNr++) { if (std::find(usedCands.begin(), usedCands.end(), candNr) != usedCands.end()) continue; - if (deltaR((*eleCands[candNr]), cleanedJet) <= minDeltaR_) { + if (reco::deltaR2((*eleCands[candNr]), cleanedJet) <= minDeltaR2_) { std::vector> pfConstituents = cleanedJet.getPFConstituents(); for (std::vector>::const_iterator i_candidate = pfConstituents.begin(); i_candidate != pfConstituents.end(); ++i_candidate) { - if (deltaR((*eleCands[candNr]), (**i_candidate)) < 0.001) { + if (reco::deltaR2((*eleCands[candNr]), (**i_candidate)) < 1e-6) { cleanedJet.setP4(cleanedJet.p4() - eleCands[candNr]->p4()); usedCands.push_back(candNr); break; @@ -155,12 +157,12 @@ void HLTJetCollectionsForBoostedLeptonPlusJets::produce(edm::Event& iEv for (size_t candNr = 0; candNr < photonCands.size(); candNr++) { if (std::find(usedCands.begin(), usedCands.end(), candNr) != usedCands.end()) continue; - if (deltaR((*photonCands[candNr]), cleanedJet) <= minDeltaR_) { + if (reco::deltaR2((*photonCands[candNr]), cleanedJet) <= minDeltaR2_) { std::vector> pfConstituents = cleanedJet.getPFConstituents(); for (std::vector>::const_iterator i_candidate = pfConstituents.begin(); i_candidate != pfConstituents.end(); ++i_candidate) { - if (deltaR((*photonCands[candNr]), (**i_candidate)) < 0.001) { + if (reco::deltaR2((*photonCands[candNr]), (**i_candidate)) < 1e-6) { cleanedJet.setP4(cleanedJet.p4() - photonCands[candNr]->p4()); usedCands.push_back(candNr); break; @@ -179,12 +181,12 @@ void HLTJetCollectionsForBoostedLeptonPlusJets::produce(edm::Event& iEv for (size_t candNr = 0; candNr < clusCands.size(); candNr++) { if (std::find(usedCands.begin(), usedCands.end(), candNr) != usedCands.end()) continue; - if (deltaR((*clusCands[candNr]), cleanedJet) <= minDeltaR_) { + if (reco::deltaR2((*clusCands[candNr]), cleanedJet) <= minDeltaR2_) { std::vector> pfConstituents = cleanedJet.getPFConstituents(); for (std::vector>::const_iterator i_candidate = pfConstituents.begin(); i_candidate != pfConstituents.end(); ++i_candidate) { - if (deltaR((*clusCands[candNr]), (**i_candidate)) < 0.001) { + if (reco::deltaR2((*clusCands[candNr]), (**i_candidate)) < 1e-6) { cleanedJet.setP4(cleanedJet.p4() - clusCands[candNr]->p4()); usedCands.push_back(candNr); break; @@ -204,7 +206,7 @@ void HLTJetCollectionsForBoostedLeptonPlusJets::produce(edm::Event& iEv JetCollection const& jets = *cleanedJetHandle; JetRefVector cleanedJetRefs; - + cleanedJetRefs.reserve(jets.size()); for (unsigned iJet = 0; iJet < jets.size(); ++iJet) { cleanedJetRefs.push_back(JetRef(cleanedJetHandle, iJet)); } diff --git a/HLTrigger/JetMET/src/HLTJetCollectionsForLeptonPlusJets.cc b/HLTrigger/JetMET/src/HLTJetCollectionsForLeptonPlusJets.cc index 2018c93717f9f..821bdf4bf730f 100644 --- a/HLTrigger/JetMET/src/HLTJetCollectionsForLeptonPlusJets.cc +++ b/HLTrigger/JetMET/src/HLTJetCollectionsForLeptonPlusJets.cc @@ -1,25 +1,25 @@ -#include "HLTrigger/JetMET/interface/HLTJetCollectionsForLeptonPlusJets.h" - -#include "FWCore/Framework/interface/MakerMacros.h" - -#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" -#include "DataFormats/EgammaCandidates/interface/Electron.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" -#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" - -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include #include "DataFormats/Common/interface/Handle.h" - +#include "DataFormats/EgammaCandidates/interface/Electron.h" #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h" +#include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" +#include "DataFormats/RecoCandidate/interface/RecoEcalCandidate.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "HLTrigger/JetMET/interface/HLTJetCollectionsForLeptonPlusJets.h" template HLTJetCollectionsForLeptonPlusJets::HLTJetCollectionsForLeptonPlusJets(const edm::ParameterSet& iConfig) : hltLeptonTag(iConfig.getParameter("HltLeptonTag")), sourceJetTag(iConfig.getParameter("SourceJetTag")), - minDeltaR_(iConfig.getParameter("minDeltaR")) { + // minimum delta-R^2 threshold with sign + minDeltaR2_(iConfig.getParameter("minDeltaR") * std::abs(iConfig.getParameter("minDeltaR"))) { using namespace edm; using namespace std; typedef vector, jetType, refhelper::FindUsingAdvance, jetType>>> @@ -29,12 +29,6 @@ HLTJetCollectionsForLeptonPlusJets::HLTJetCollectionsForLeptonPlusJets( produces(); } -template -HLTJetCollectionsForLeptonPlusJets::~HLTJetCollectionsForLeptonPlusJets() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - template void HLTJetCollectionsForLeptonPlusJets::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -86,10 +80,10 @@ void HLTJetCollectionsForLeptonPlusJets::produce(edm::Event& iEvent, co unique_ptr allSelections(new JetCollectionVector()); if (!clusCands.empty()) { // try trigger clusters - for (auto& clusCand : clusCands) { + for (auto const& clusCand : clusCands) { JetRefVector refVector; for (unsigned int j = 0; j < theJetCollection.size(); j++) { - if (deltaR(clusCand->superCluster()->position(), theJetCollection[j]) > minDeltaR_) + if (reco::deltaR2(clusCand->superCluster()->position(), theJetCollection[j]) > minDeltaR2_) refVector.push_back(JetRef(theJetCollectionHandle, j)); } allSelections->push_back(refVector); @@ -97,10 +91,10 @@ void HLTJetCollectionsForLeptonPlusJets::produce(edm::Event& iEvent, co } if (!eleCands.empty()) { // try electrons - for (auto& eleCand : eleCands) { + for (auto const& eleCand : eleCands) { JetRefVector refVector; for (unsigned int j = 0; j < theJetCollection.size(); j++) { - if (deltaR(eleCand->superCluster()->position(), theJetCollection[j]) > minDeltaR_) + if (reco::deltaR2(eleCand->superCluster()->position(), theJetCollection[j]) > minDeltaR2_) refVector.push_back(JetRef(theJetCollectionHandle, j)); } allSelections->push_back(refVector); @@ -108,10 +102,10 @@ void HLTJetCollectionsForLeptonPlusJets::produce(edm::Event& iEvent, co } if (!photonCands.empty()) { // try photons - for (auto& photonCand : photonCands) { + for (auto const& photonCand : photonCands) { JetRefVector refVector; for (unsigned int j = 0; j < theJetCollection.size(); j++) { - if (deltaR(photonCand->superCluster()->position(), theJetCollection[j]) > minDeltaR_) + if (reco::deltaR2(photonCand->superCluster()->position(), theJetCollection[j]) > minDeltaR2_) refVector.push_back(JetRef(theJetCollectionHandle, j)); } allSelections->push_back(refVector); @@ -119,10 +113,10 @@ void HLTJetCollectionsForLeptonPlusJets::produce(edm::Event& iEvent, co } if (!muonCands.empty()) { // muons - for (auto& muonCand : muonCands) { + for (auto const& muonCand : muonCands) { JetRefVector refVector; for (unsigned int j = 0; j < theJetCollection.size(); j++) { - if (deltaR(muonCand->p4(), theJetCollection[j]) > minDeltaR_) + if (reco::deltaR2(muonCand->p4(), theJetCollection[j]) > minDeltaR2_) refVector.push_back(JetRef(theJetCollectionHandle, j)); } allSelections->push_back(refVector); diff --git a/HLTrigger/JetMET/src/HLTJetL1MatchProducer.cc b/HLTrigger/JetMET/src/HLTJetL1MatchProducer.cc index 44800b475fdaf..70bda8efa2695 100644 --- a/HLTrigger/JetMET/src/HLTJetL1MatchProducer.cc +++ b/HLTrigger/JetMET/src/HLTJetL1MatchProducer.cc @@ -1,13 +1,14 @@ -#include +#include +#include -#include "HLTrigger/JetMET/interface/HLTJetL1MatchProducer.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Math/interface/deltaR.h" #include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Math/interface/deltaPhi.h" - #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "HLTrigger/JetMET/interface/HLTJetL1MatchProducer.h" template HLTJetL1MatchProducer::HLTJetL1MatchProducer(const edm::ParameterSet& iConfig) { @@ -15,7 +16,10 @@ HLTJetL1MatchProducer::HLTJetL1MatchProducer(const edm::ParameterSet& iConfig L1TauJets_ = iConfig.template getParameter("L1TauJets"); L1CenJets_ = iConfig.template getParameter("L1CenJets"); L1ForJets_ = iConfig.template getParameter("L1ForJets"); - DeltaR_ = iConfig.template getParameter("DeltaR"); + + // minimum delta-R^2 threshold with sign + auto const DeltaR = iConfig.template getParameter("DeltaR"); + DeltaR2_ = DeltaR * std::abs(DeltaR); typedef std::vector TCollection; m_theJetToken = consumes(jetsInput_); @@ -44,53 +48,54 @@ void HLTJetL1MatchProducer::fillDescriptions(edm::ConfigurationDescriptions& template void HLTJetL1MatchProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - typedef std::vector TCollection; - - edm::Handle jets; - iEvent.getByToken(m_theJetToken, jets); - - std::unique_ptr result(new TCollection); + auto const& jets = iEvent.get(m_theJetToken); - edm::Handle l1TauJets; - iEvent.getByToken(m_theL1TauJetToken, l1TauJets); + auto result = std::make_unique>(); + result->reserve(jets.size()); - edm::Handle l1CenJets; - iEvent.getByToken(m_theL1CenJetToken, l1CenJets); + auto const& l1TauJets = iEvent.get(m_theL1TauJetToken); + auto const& l1CenJets = iEvent.get(m_theL1CenJetToken); + auto const& l1ForJets = iEvent.get(m_theL1ForJetToken); - edm::Handle l1ForJets; - iEvent.getByToken(m_theL1ForJetToken, l1ForJets); - - typename TCollection::const_iterator jet_iter; - for (jet_iter = jets->begin(); jet_iter != jets->end(); ++jet_iter) { + for (auto const& jet : jets) { bool isMatched = false; - //std::cout << "FL: l1TauJets.size = " << l1TauJets->size() << std::endl; - for (unsigned int jetc = 0; jetc < l1TauJets->size(); ++jetc) { - const double deltaeta = jet_iter->eta() - (*l1TauJets)[jetc].eta(); - const double deltaphi = deltaPhi(jet_iter->phi(), (*l1TauJets)[jetc].phi()); - //std::cout << "FL: sqrt(2) = " << sqrt(2) << std::endl; - if (sqrt(deltaeta * deltaeta + deltaphi * deltaphi) < DeltaR_) + for (auto const& l1t_obj : l1TauJets) { + if (reco::deltaR2(jet.eta(), jet.phi(), l1t_obj.eta(), l1t_obj.phi()) < DeltaR2_) { isMatched = true; + break; + } } - for (unsigned int jetc = 0; jetc < l1CenJets->size(); ++jetc) { - const double deltaeta = jet_iter->eta() - (*l1CenJets)[jetc].eta(); - const double deltaphi = deltaPhi(jet_iter->phi(), (*l1CenJets)[jetc].phi()); - if (sqrt(deltaeta * deltaeta + deltaphi * deltaphi) < DeltaR_) - isMatched = true; + if (isMatched) { + result->emplace_back(jet); + continue; } - for (unsigned int jetc = 0; jetc < l1ForJets->size(); ++jetc) { - const double deltaeta = jet_iter->eta() - (*l1ForJets)[jetc].eta(); - const double deltaphi = deltaPhi(jet_iter->phi(), (*l1ForJets)[jetc].phi()); - if (sqrt(deltaeta * deltaeta + deltaphi * deltaphi) < DeltaR_) + for (auto const& l1t_obj : l1CenJets) { + if (reco::deltaR2(jet.eta(), jet.phi(), l1t_obj.eta(), l1t_obj.phi()) < DeltaR2_) { isMatched = true; + break; + } } - if (isMatched == true) - result->push_back(*jet_iter); + if (isMatched) { + result->emplace_back(jet); + continue; + } - } // jet_iter + for (auto const& l1t_obj : l1ForJets) { + if (reco::deltaR2(jet.eta(), jet.phi(), l1t_obj.eta(), l1t_obj.phi()) < DeltaR2_) { + isMatched = true; + break; + } + } + + if (isMatched) { + result->emplace_back(jet); + continue; + } + } iEvent.put(std::move(result)); } diff --git a/HLTrigger/JetMET/src/HLTJetL1TMatchProducer.cc b/HLTrigger/JetMET/src/HLTJetL1TMatchProducer.cc index 7cc733f87e0e9..4ec006123ee1f 100644 --- a/HLTrigger/JetMET/src/HLTJetL1TMatchProducer.cc +++ b/HLTrigger/JetMET/src/HLTJetL1TMatchProducer.cc @@ -1,32 +1,29 @@ -#include +#include +#include -#include "HLTrigger/JetMET/interface/HLTJetL1TMatchProducer.h" #include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Math/interface/deltaR.h" #include "FWCore/Framework/interface/ESHandle.h" -#include "DataFormats/Math/interface/deltaPhi.h" - #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" #include "HLTrigger/HLTcore/interface/defaultModuleLabel.h" +#include "HLTrigger/JetMET/interface/HLTJetL1TMatchProducer.h" template HLTJetL1TMatchProducer::HLTJetL1TMatchProducer(const edm::ParameterSet& iConfig) { jetsInput_ = iConfig.template getParameter("jetsInput"); L1Jets_ = iConfig.template getParameter("L1Jets"); - DeltaR_ = iConfig.template getParameter("DeltaR"); - typedef std::vector TCollection; - m_theJetToken = consumes(jetsInput_); - m_theL1JetToken = consumes(L1Jets_); - produces(); -} + // minimum delta-R^2 threshold with sign + auto const DeltaR = iConfig.template getParameter("DeltaR"); + DeltaR2_ = DeltaR * std::abs(DeltaR); -template -void HLTJetL1TMatchProducer::beginJob() {} + m_theJetToken = consumes(jetsInput_); + m_theL1JetToken = consumes(L1Jets_); -template -HLTJetL1TMatchProducer::~HLTJetL1TMatchProducer() = default; + produces>(); +} template void HLTJetL1TMatchProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -39,20 +36,15 @@ void HLTJetL1TMatchProducer::fillDescriptions(edm::ConfigurationDescriptions& template void HLTJetL1TMatchProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { - typedef std::vector TCollection; - - edm::Handle jets; - iEvent.getByToken(m_theJetToken, jets); - - std::unique_ptr result(new TCollection); + auto const& jets = iEvent.get(m_theJetToken); + auto const l1Jets = iEvent.getHandle(m_theL1JetToken); - edm::Handle l1Jets; - iEvent.getByToken(m_theL1JetToken, l1Jets); bool trigger_bx_only = true; // selection of BX not implemented + auto result = std::make_unique>(); + if (l1Jets.isValid()) { - typename TCollection::const_iterator jet_iter; - for (jet_iter = jets->begin(); jet_iter != jets->end(); ++jet_iter) { + for (auto const& jet : jets) { bool isMatched = false; for (int ibx = l1Jets->getFirstBX(); ibx <= l1Jets->getLastBX(); ++ibx) { if (trigger_bx_only && (ibx != 0)) @@ -60,18 +52,18 @@ void HLTJetL1TMatchProducer::produce(edm::Event& iEvent, const edm::EventSetu for (auto it = l1Jets->begin(ibx); it != l1Jets->end(ibx); it++) { if (it->et() == 0) continue; // if you don't care about L1T candidates with zero ET. - const double deltaeta = jet_iter->eta() - it->eta(); - const double deltaphi = deltaPhi(jet_iter->phi(), it->phi()); - if (sqrt(deltaeta * deltaeta + deltaphi * deltaphi) < DeltaR_) + if (reco::deltaR2(jet.eta(), jet.phi(), it->eta(), it->phi()) < DeltaR2_) { isMatched = true; - //cout << "bx: " << ibx << " et: " << it->et() << " eta: " << it->eta() << " phi: " << it->phi() << "\n"; + break; + } } } - if (isMatched == true) - result->push_back(*jet_iter); - } // jet_iter + if (isMatched) { + result->emplace_back(jet); + } + } } else { - edm::LogWarning("MissingProduct") << "L1Upgrade l1Jets bx collection not found." << std::endl; + edm::LogWarning("MissingProduct") << "L1Upgrade l1Jets bx collection not found."; } iEvent.put(std::move(result)); diff --git a/HLTrigger/JetMET/src/HLTJetSortedVBFFilter.cc b/HLTrigger/JetMET/src/HLTJetSortedVBFFilter.cc index a5d7823406307..21a736b374cb3 100644 --- a/HLTrigger/JetMET/src/HLTJetSortedVBFFilter.cc +++ b/HLTrigger/JetMET/src/HLTJetSortedVBFFilter.cc @@ -2,15 +2,13 @@ * * See header file for documentation * - - * * \author Jacopo Bernardini * */ - -#include +#include #include +#include #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -49,9 +47,6 @@ HLTJetSortedVBFFilter::HLTJetSortedVBFFilter(const edm::ParameterSet& iConfig } } -template -HLTJetSortedVBFFilter::~HLTJetSortedVBFFilter() = default; - template void HLTJetSortedVBFFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; @@ -74,13 +69,12 @@ void HLTJetSortedVBFFilter::fillDescriptions(edm::ConfigurationDescriptions& template float HLTJetSortedVBFFilter::findCSV(const typename std::vector::const_iterator& jet, const reco::JetTagCollection& jetTags) { - float minDr = 0.1; + float minDr2 = 0.01f; float tmpCSV = -20; for (auto jetb = jetTags.begin(); (jetb != jetTags.end()); ++jetb) { - float tmpDr = reco::deltaR(*jet, *(jetb->first)); - - if (tmpDr < minDr) { - minDr = tmpDr; + float tmpDr2 = reco::deltaR2(*jet, *(jetb->first)); + if (tmpDr2 < minDr2) { + minDr2 = tmpDr2; tmpCSV = jetb->second; } } diff --git a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc index 49db0a676ecfc..1f5e617432fb0 100644 --- a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc +++ b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.cc @@ -1,3 +1,5 @@ +#include + #include "HLTDiMuonGlbTrkFilter.h" #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h" @@ -28,7 +30,6 @@ HLTDiMuonGlbTrkFilter::HLTDiMuonGlbTrkFilter(const edm::ParameterSet& iConfig) m_minTrkHits = iConfig.getParameter("minTrkHits"); m_minMuonHits = iConfig.getParameter("minMuonHits"); m_maxNormalizedChi2 = iConfig.getParameter("maxNormalizedChi2"); - m_minDR = iConfig.getParameter("minDR"); m_allowedTypeMask = iConfig.getParameter("allowedTypeMask"); m_requiredTypeMask = iConfig.getParameter("requiredTypeMask"); m_trkMuonId = muon::SelectionType(iConfig.getParameter("trkMuonId")); @@ -41,6 +42,10 @@ HLTDiMuonGlbTrkFilter::HLTDiMuonGlbTrkFilter(const edm::ParameterSet& iConfig) m_chargeOpt = iConfig.getParameter("ChargeOpt"); m_maxDCAMuMu = iConfig.getParameter("maxDCAMuMu"); m_maxdEtaMuMu = iConfig.getParameter("maxdEtaMuMu"); + + // minimum delta-R^2 threshold with sign + auto const minDR = iConfig.getParameter("minDR"); + m_minDR2 = minDR * std::abs(minDR); } void HLTDiMuonGlbTrkFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -117,7 +122,7 @@ bool HLTDiMuonGlbTrkFilter::hltFilter(edm::Event& iEvent, const reco::Muon& mu1(muons->at(filteredMuons.at(i))); const reco::Muon& mu2(muons->at(filteredMuons.at(j))); if (std::max(mu1.pt(), mu2.pt()) > std::max(m_minPtMuon1, m_minPtMuon2) && - std::abs(mu2.eta() - mu1.eta()) < m_maxdEtaMuMu && deltaR(mu1, mu2) > m_minDR && + std::abs(mu2.eta() - mu1.eta()) < m_maxdEtaMuMu && reco::deltaR2(mu1, mu2) > m_minDR2 && (mu1.p4() + mu2.p4()).mass() > m_minMass && (mu1.p4() + mu2.p4()).mass() < m_maxMass && std::abs((mu1.p4() + mu2.p4()).Rapidity()) < m_maxYDimuon) { if (m_chargeOpt < 0) { diff --git a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h index f68b58f3aee95..16d11a05ab1d5 100644 --- a/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h +++ b/HLTrigger/Muon/plugins/HLTDiMuonGlbTrkFilter.h @@ -1,10 +1,12 @@ -#ifndef HLTDiMuonGlbTrkFilter_h -#define HLTDiMuonGlbTrkFilter_h +#ifndef HLTrigger_Muon_HLTDiMuonGlbTrkFilter_h +#define HLTrigger_Muon_HLTDiMuonGlbTrkFilter_h + // author D.Kovalskyi -#include "HLTrigger/HLTcore/interface/HLTFilter.h" + #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h" #include "DataFormats/MuonReco/interface/MuonFwd.h" #include "DataFormats/MuonReco/interface/MuonSelectors.h" +#include "HLTrigger/HLTcore/interface/HLTFilter.h" #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" @@ -15,8 +17,10 @@ namespace edm { class HLTDiMuonGlbTrkFilter : public HLTFilter { public: HLTDiMuonGlbTrkFilter(const edm::ParameterSet&); - ~HLTDiMuonGlbTrkFilter() override {} + ~HLTDiMuonGlbTrkFilter() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + bool hltFilter(edm::Event&, const edm::EventSetup&, trigger::TriggerFilterObjectWithRefs& filterproduct) const override; @@ -34,7 +38,7 @@ class HLTDiMuonGlbTrkFilter : public HLTFilter { unsigned int m_allowedTypeMask; unsigned int m_requiredTypeMask; double m_maxNormalizedChi2; - double m_minDR; + double m_minDR2; double m_minPtMuon1; double m_minPtMuon2; double m_maxEtaMuon; @@ -48,4 +52,4 @@ class HLTDiMuonGlbTrkFilter : public HLTFilter { bool m_saveTags; }; -#endif //HLTMuonDimuonFilter_h +#endif diff --git a/HLTrigger/Muon/plugins/HLTMuonTrackSelector.cc b/HLTrigger/Muon/plugins/HLTMuonTrackSelector.cc index e7eebfd5ef18c..260b143843c63 100644 --- a/HLTrigger/Muon/plugins/HLTMuonTrackSelector.cc +++ b/HLTrigger/Muon/plugins/HLTMuonTrackSelector.cc @@ -6,6 +6,7 @@ * Author: Kyeongpil Lee (kplee@cern.ch) * */ +#include #include "HLTMuonTrackSelector.h" @@ -27,8 +28,6 @@ HLTMuonTrackSelector::HLTMuonTrackSelector(const edm::ParameterSet& iConfig) produces("MVAValues"); } -HLTMuonTrackSelector::~HLTMuonTrackSelector() {} - void HLTMuonTrackSelector::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("track", edm::InputTag()); @@ -89,7 +88,7 @@ void HLTMuonTrackSelector::produce(edm::StreamID, edm::Event& iEvent, const edm: double trackEta = track.eta(); double trackPhi = track.phi(); - if (deltaR(trackEta, trackPhi, muonEta, muonPhi) < 0.1) { + if (reco::deltaR2(trackEta, trackPhi, muonEta, muonPhi) < 0.01) { double dPt = fabs(trackPt - muonPt); if (dPt < smallestDPt) { diff --git a/HLTrigger/Muon/plugins/HLTMuonTrackSelector.h b/HLTrigger/Muon/plugins/HLTMuonTrackSelector.h index b6089ba2747fe..9621dff9b75e0 100644 --- a/HLTrigger/Muon/plugins/HLTMuonTrackSelector.h +++ b/HLTrigger/Muon/plugins/HLTMuonTrackSelector.h @@ -1,12 +1,12 @@ -#ifndef HLTMuonTrackSelector_h -#define HLTMuonTrackSelector_h +#ifndef HLTrigger_Muon_HLTMuonTrackSelector_h +#define HLTrigger_Muon_HLTMuonTrackSelector_h /* * class HLTMuonTrackSelector * * Select tracks matched to the reco::Muon * -* base on RecoTracker/FinalTrackSelectors/plugins/TrackCollectionFilterCloner.cc +* based on RecoTracker/FinalTrackSelectors/plugins/TrackCollectionFilterCloner.cc * * Author: Kyeongpil Lee (kplee@cern.ch) * @@ -30,7 +30,7 @@ class HLTMuonTrackSelector : public edm::global::EDProducer<> { public: explicit HLTMuonTrackSelector(const edm::ParameterSet &); - ~HLTMuonTrackSelector() override; + ~HLTMuonTrackSelector() override = default; using MVACollection = std::vector; @@ -47,4 +47,4 @@ class HLTMuonTrackSelector : public edm::global::EDProducer<> { const bool flag_copyMVA; }; -#endif //HLTMuonTrackSelector_h +#endif diff --git a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc index ed46fdb03ab6f..2cfe32743c12d 100644 --- a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.cc @@ -22,7 +22,6 @@ using namespace reco; using namespace std; using namespace trigger; -// ---------------------------------------------------------------------- HLTmumutkVtxProducer::HLTmumutkVtxProducer(const edm::ParameterSet& iConfig) : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), muCandTag_(iConfig.getParameter("MuCand")), @@ -39,15 +38,13 @@ HLTmumutkVtxProducer::HLTmumutkVtxProducer(const edm::ParameterSet& iConfig) minInvMass_(iConfig.getParameter("MinInvMass")), maxInvMass_(iConfig.getParameter("MaxInvMass")), minD0Significance_(iConfig.getParameter("MinD0Significance")), - overlapDR_(iConfig.getParameter("OverlapDR")), + // minimum delta-R^2 threshold (with sign) for non-overlapping tracks + overlapDR2_(iConfig.getParameter("OverlapDR") * std::abs(iConfig.getParameter("OverlapDR"))), beamSpotTag_(iConfig.getParameter("BeamSpotTag")), beamSpotToken_(consumes(beamSpotTag_)) { produces(); } -// ---------------------------------------------------------------------- -HLTmumutkVtxProducer::~HLTmumutkVtxProducer() = default; - void HLTmumutkVtxProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("MuCand", edm::InputTag("hltMuTracks")); @@ -65,7 +62,6 @@ void HLTmumutkVtxProducer::fillDescriptions(edm::ConfigurationDescriptions& desc descriptions.add("HLTmumutkVtxProducer", desc); } -// ---------------------------------------------------------------------- void HLTmumutkVtxProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { const double MuMass(0.106); const double MuMass2(MuMass * MuMass); @@ -224,9 +220,7 @@ FreeTrajectoryState HLTmumutkVtxProducer::initialFreeState(const reco::Track& tk } bool HLTmumutkVtxProducer::overlap(const TrackRef& trackref1, const TrackRef& trackref2) { - if (deltaR(trackref1->eta(), trackref1->phi(), trackref2->eta(), trackref2->phi()) < overlapDR_) - return true; - return false; + return (reco::deltaR2(trackref1->eta(), trackref1->phi(), trackref2->eta(), trackref2->phi()) < overlapDR2_); } bool HLTmumutkVtxProducer::checkPreviousCand(const TrackRef& trackref, diff --git a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h index 84a8890e4035a..bd63dd9543af2 100644 --- a/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTmumutkVtxProducer.h @@ -1,7 +1,7 @@ -#ifndef HLTmumutkVtxProducer_h -#define HLTmumutkVtxProducer_h +#ifndef HLTrigger_btau_HLTmumutkVtxProducer_h +#define HLTrigger_btau_HLTmumutkVtxProducer_h // -// Package: HLTstaging +// Package: HLTrigger/btau // Class: HLTmumutkVtxProducer // /**\class HLTmumutkVtxProducer @@ -12,8 +12,8 @@ */ -// system include files #include +#include #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" @@ -28,7 +28,6 @@ #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "MagneticField/Engine/interface/MagneticField.h" -#include namespace edm { class ConfigurationDescriptions; @@ -47,8 +46,10 @@ class MagneticField; class HLTmumutkVtxProducer : public edm::stream::EDProducer<> { public: explicit HLTmumutkVtxProducer(const edm::ParameterSet&); - ~HLTmumutkVtxProducer() override; + ~HLTmumutkVtxProducer() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + void produce(edm::Event&, const edm::EventSetup&) override; private: @@ -74,9 +75,10 @@ class HLTmumutkVtxProducer : public edm::stream::EDProducer<> { const double minInvMass_; const double maxInvMass_; const double minD0Significance_; - const double overlapDR_; + const double overlapDR2_; const edm::InputTag beamSpotTag_; const edm::EDGetTokenT beamSpotToken_; }; + #endif diff --git a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc index 0caf95649a1f9..33e4faeada6e9 100644 --- a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc +++ b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.cc @@ -23,7 +23,6 @@ using namespace reco; using namespace std; using namespace trigger; -// ---------------------------------------------------------------------- HLTmumutktkVtxProducer::HLTmumutktkVtxProducer(const edm::ParameterSet& iConfig) : transientTrackRecordToken_(esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))), muCandTag_(iConfig.getParameter("MuCand")), @@ -44,15 +43,13 @@ HLTmumutktkVtxProducer::HLTmumutktkVtxProducer(const edm::ParameterSet& iConfig) maxTrkTrkMass_(iConfig.getParameter("MaxTrkTrkMass")), minD0Significance_(iConfig.getParameter("MinD0Significance")), oppositeSign_(iConfig.getParameter("OppositeSign")), - overlapDR_(iConfig.getParameter("OverlapDR")), + // minimum delta-R^2 threshold (with sign) for non-overlapping tracks + overlapDR2_(iConfig.getParameter("OverlapDR") * std::abs(iConfig.getParameter("OverlapDR"))), beamSpotTag_(iConfig.getParameter("BeamSpotTag")), beamSpotToken_(consumes(beamSpotTag_)) { produces(); } -// ---------------------------------------------------------------------- -HLTmumutktkVtxProducer::~HLTmumutktkVtxProducer() = default; - void HLTmumutktkVtxProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("MuCand", edm::InputTag("hltMuTracks")); @@ -74,7 +71,6 @@ void HLTmumutktkVtxProducer::fillDescriptions(edm::ConfigurationDescriptions& de descriptions.add("HLTmumutktkVtxProducer", desc); } -// ---------------------------------------------------------------------- void HLTmumutktkVtxProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { const double MuMass(0.106); const double MuMass2(MuMass * MuMass); @@ -278,9 +274,7 @@ FreeTrajectoryState HLTmumutktkVtxProducer::initialFreeState(const reco::Track& } bool HLTmumutktkVtxProducer::overlap(const TrackRef& trackref1, const TrackRef& trackref2) { - if (deltaR(trackref1->eta(), trackref1->phi(), trackref2->eta(), trackref2->phi()) < overlapDR_) - return true; - return false; + return (reco::deltaR2(trackref1->eta(), trackref1->phi(), trackref2->eta(), trackref2->phi()) < overlapDR2_); } bool HLTmumutktkVtxProducer::checkPreviousCand(const TrackRef& trackref, diff --git a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h index f0fe3a1dee872..53efcd85a40b0 100644 --- a/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h +++ b/HLTrigger/btau/plugins/HLTmumutktkVtxProducer.h @@ -1,12 +1,15 @@ -#ifndef HLTmumutktkVtxProducer_h -#define HLTmumutktkVtxProducer_h +#ifndef HLTrigger_btau_HLTmumutktkVtxProducer_h +#define HLTrigger_btau_HLTmumutktkVtxProducer_h // -// Package: HLTstaging +// Package: HLTrigger/btau // Class: HLTmumutktkVtxProducer // /**\class HLTmumutktkVtxProducer */ +#include +#include + #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Framework/interface/Event.h" @@ -21,8 +24,6 @@ #include "TrackingTools/TransientTrack/interface/TransientTrackBuilder.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" #include "MagneticField/Engine/interface/MagneticField.h" -#include -#include namespace edm { class ConfigurationDescriptions; @@ -41,8 +42,10 @@ class MagneticField; class HLTmumutktkVtxProducer : public edm::stream::EDProducer<> { public: explicit HLTmumutktkVtxProducer(const edm::ParameterSet&); - ~HLTmumutktkVtxProducer() override; + ~HLTmumutktkVtxProducer() override = default; + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); + void produce(edm::Event&, const edm::EventSetup&) override; private: @@ -72,8 +75,9 @@ class HLTmumutktkVtxProducer : public edm::stream::EDProducer<> { const double maxTrkTrkMass_; const double minD0Significance_; const bool oppositeSign_; - const double overlapDR_; + const double overlapDR2_; const edm::InputTag beamSpotTag_; const edm::EDGetTokenT beamSpotToken_; }; + #endif diff --git a/HLTrigger/special/plugins/BuildFile.xml b/HLTrigger/special/plugins/BuildFile.xml index 3ccd205655847..6543d439c0431 100644 --- a/HLTrigger/special/plugins/BuildFile.xml +++ b/HLTrigger/special/plugins/BuildFile.xml @@ -38,6 +38,7 @@ + diff --git a/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc b/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc index cf95b3c96bd53..cd988996f93cd 100644 --- a/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc +++ b/HLTrigger/special/plugins/HLTEcalResonanceFilter.cc @@ -1,7 +1,12 @@ -#include "HLTEcalResonanceFilter.h" +#include + +#include "DataFormats/Math/interface/deltaPhi.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" -#include "TLorentzVector.h" +#include "HLTEcalResonanceFilter.h" + +#include using namespace std; using namespace edm; @@ -39,7 +44,10 @@ HLTEcalResonanceFilter::HLTEcalResonanceFilter(const edm::ParameterSet &iConfig) } seleIso_ = barrelSelection.getParameter("seleIso"); ptMinForIsolation_ = barrelSelection.getParameter("ptMinForIsolation"); - seleBeltDR_ = barrelSelection.getParameter("seleBeltDR"); + + auto const seleBeltDR = barrelSelection.getParameter("seleBeltDR"); + seleBeltDR2_ = seleBeltDR * std::abs(seleBeltDR); + seleBeltDeta_ = barrelSelection.getParameter("seleBeltDeta"); store5x5RecHitEB_ = barrelSelection.getParameter("store5x5RecHitEB"); @@ -71,7 +79,10 @@ HLTEcalResonanceFilter::HLTEcalResonanceFilter(const edm::ParameterSet &iConfig) seleS4S9GammaEndCap_ = endcapSelection.getParameter("seleS4S9GammaEndCap"); seleS9S25GammaEndCap_ = endcapSelection.getParameter("seleS9S25GammaEndCap"); ptMinForIsolationEndCap_ = endcapSelection.getParameter("ptMinForIsolationEndCap"); - seleBeltDREndCap_ = endcapSelection.getParameter("seleBeltDREndCap"); + + auto const seleBeltDREndCap = endcapSelection.getParameter("seleBeltDREndCap"); + seleBeltDR2EndCap_ = seleBeltDREndCap * std::abs(seleBeltDREndCap); + seleBeltDetaEndCap_ = endcapSelection.getParameter("seleBeltDetaEndCap"); seleIsoEndCap_ = endcapSelection.getParameter("seleIsoEndCap"); @@ -500,7 +511,7 @@ void HLTEcalResonanceFilter::doSelection( double m_maxCut = seleMinvMaxBarrel_; double ptminforIso = ptMinForIsolation_; double isoCut = seleIso_; - double isoBeltdrCut = seleBeltDR_; + double isoBeltdr2Cut = seleBeltDR2_; double isoBeltdetaCut = seleBeltDeta_; double s4s9Cut = seleS4S9Gamma_; double s9s25Cut = seleS9S25Gamma_; @@ -511,7 +522,7 @@ void HLTEcalResonanceFilter::doSelection( m_maxCut = seleMinvMaxEndCap_; ptminforIso = ptMinForIsolationEndCap_; isoCut = seleIsoEndCap_; - isoBeltdrCut = seleBeltDREndCap_; + isoBeltdr2Cut = seleBeltDR2EndCap_; isoBeltdetaCut = seleBeltDetaEndCap_; s4s9Cut = seleS4S9GammaEndCap_; s9s25Cut = seleS9S25GammaEndCap_; @@ -597,9 +608,12 @@ void HLTEcalResonanceFilter::doSelection( for (auto it_bc3 = clusterCollection->begin(); it_bc3 != clusterCollection->end(); it_bc3++) { if (it_bc3->seed() == it_bc->seed() || it_bc3->seed() == it_bc2->seed()) continue; - float drcl = GetDeltaR(eta_pair, it_bc3->eta(), phi_pair, it_bc3->phi()); - float dretacl = fabs(eta_pair - it_bc3->eta()); - if (drcl > isoBeltdrCut || dretacl > isoBeltdetaCut) + float dretacl = std::abs(eta_pair - it_bc3->eta()); + if (dretacl > isoBeltdetaCut) + continue; + float drphicl = reco::deltaPhi(phi_pair, it_bc3->phi()); + float drcl2 = dretacl * dretacl + drphicl * drphicl; + if (drcl2 > isoBeltdr2Cut) continue; float pt3 = it_bc3->energy() * sin(it_bc3->position().theta()); if (pt3 < ptminforIso) @@ -874,21 +888,6 @@ bool HLTEcalResonanceFilter::checkStatusOfEcalRecHit(const EcalChannelStatus &ch return true; } -float HLTEcalResonanceFilter::DeltaPhi(float phi1, float phi2) { - float diff = fabs(phi2 - phi1); - - while (diff > acos(-1)) - diff -= 2 * acos(-1); - while (diff <= -acos(-1)) - diff += 2 * acos(-1); - - return diff; -} - -float HLTEcalResonanceFilter::GetDeltaR(float eta1, float eta2, float phi1, float phi2) { - return sqrt((eta1 - eta2) * (eta1 - eta2) + DeltaPhi(phi1, phi2) * DeltaPhi(phi1, phi2)); -} - void HLTEcalResonanceFilter::makeClusterES( float x, float y, float z, const CaloSubdetectorGeometry *geometry_es, const CaloSubdetectorTopology *topology_es) { ///get assosicated ES clusters of this endcap cluster diff --git a/HLTrigger/special/plugins/HLTEcalResonanceFilter.h b/HLTrigger/special/plugins/HLTEcalResonanceFilter.h index 75214b57e09a8..fea227cca388a 100644 --- a/HLTrigger/special/plugins/HLTEcalResonanceFilter.h +++ b/HLTrigger/special/plugins/HLTEcalResonanceFilter.h @@ -109,9 +109,6 @@ class HLTEcalResonanceFilter : public edm::stream::EDFilter<> { int diff_neta_s(int, int); int diff_nphi_s(int, int); - static float DeltaPhi(float phi1, float phi2); - static float GetDeltaR(float eta1, float eta2, float phi1, float phi2); - edm::ESGetToken const caloTopologyRecordToken_; edm::ESGetToken const ecalChannelStatusRcdToken_; edm::ESGetToken const caloGeometryRecordToken_; @@ -141,7 +138,7 @@ class HLTEcalResonanceFilter : public edm::stream::EDFilter<> { double seleMinvMinBarrel_; double seleS4S9Gamma_; double seleS9S25Gamma_; - double seleBeltDR_; + double seleBeltDR2_; double seleBeltDeta_; double seleIso_; double ptMinForIsolation_; @@ -166,7 +163,7 @@ class HLTEcalResonanceFilter : public edm::stream::EDFilter<> { double seleS4S9GammaEndCap_; double seleS9S25GammaEndCap_; double seleIsoEndCap_; - double seleBeltDREndCap_; + double seleBeltDR2EndCap_; double seleBeltDetaEndCap_; double ptMinForIsolationEndCap_; bool store5x5RecHitEE_; diff --git a/HLTrigger/special/plugins/HLTHcalNoiseFilter.cc b/HLTrigger/special/plugins/HLTHcalNoiseFilter.cc index a0ecf889e0d02..61ce62a60ea68 100644 --- a/HLTrigger/special/plugins/HLTHcalNoiseFilter.cc +++ b/HLTrigger/special/plugins/HLTHcalNoiseFilter.cc @@ -85,8 +85,8 @@ bool HLTHcalNoiseFilter::hltFilter(edm::Event& iEvent, JetContainer.push_back(calojetIter); double maxTowerE = 0.0; for (auto const& kal : *towerHandle) { - double dR = deltaR(calojetIter.eta(), calojetIter.phi(), kal.eta(), kal.phi()); - if ((dR < 0.50) and (kal.p() > maxTowerE)) { + double const dR2 = reco::deltaR2(calojetIter.eta(), calojetIter.phi(), kal.eta(), kal.phi()); + if (dR2 < 0.25 and kal.p() > maxTowerE) { maxTowerE = kal.p(); seedTower = kal; } diff --git a/HLTrigger/special/plugins/HLTRechitsToDigis.cc b/HLTrigger/special/plugins/HLTRechitsToDigis.cc index 69673dd6ef082..ba5383e8ea4fc 100644 --- a/HLTrigger/special/plugins/HLTRechitsToDigis.cc +++ b/HLTrigger/special/plugins/HLTRechitsToDigis.cc @@ -46,7 +46,6 @@ class HLTRechitsToDigis : public edm::stream::EDProducer<> { public: explicit HLTRechitsToDigis(const edm::ParameterSet&); - ~HLTRechitsToDigis() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); enum ecalRegion { invalidRegion = 0, barrel, endcap }; static const HLTRechitsToDigis::ecalRegion stringToRegion(const std::string& region); @@ -125,11 +124,6 @@ HLTRechitsToDigis::HLTRechitsToDigis(const edm::ParameterSet& iConfig) recHitsToken_ = consumes(recHits_); } -HLTRechitsToDigis::~HLTRechitsToDigis() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -262,38 +256,6 @@ void HLTRechitsToDigis::produce(edm::Event& iEvent, edm::EventSetup const& setup } // end switch statement for the region (barrel, endcap, invalid) } -// ------------ method called when starting to processes a run ------------ -/* -void -HLTRechitsToDigis::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -HLTRechitsToDigis::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -HLTRechitsToDigis::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -HLTRechitsToDigis::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void HLTRechitsToDigis::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/HeterogeneousCore/AlpakaInterface/interface/workdivision.h b/HeterogeneousCore/AlpakaInterface/interface/workdivision.h index 39f19fe463745..4c0aa9fe5f2b9 100644 --- a/HeterogeneousCore/AlpakaInterface/interface/workdivision.h +++ b/HeterogeneousCore/AlpakaInterface/interface/workdivision.h @@ -86,6 +86,29 @@ namespace cms::alpakatools { }; /* elements_with_stride + * + * `elements_with_stride(acc, [first, ]extent)` returns an iteratable range that spans the element indices required to + * cover the given problem size: + * - `first` (optional) is index to the first element; if not specified, the loop starts from 0; + * - `extent` is the total size of the problem, including any elements that may come before `first`. + * + * To cover the problem space, different threads may execute a different number of iterations. As a result, it is not + * safe to call alpaka::syncBlockThreads() within this loop. If a block synchronisation is needed, one should split + * the loop into an outer loop on the blocks and an inner loop on the threads, and call the syncronisation only in the + * outer loop: + * + * for (auto group : uniform_groups(acc, extent) { + * for (auto element : uniform_group_elements(acc, group, extent) { + * // no synchronisations here + * ... + * } + * alpaka::syncBlockThreads(); + * for (auto element : uniform_group_elements(acc, group, extent) { + * // no synchronisations here + * ... + * } + * alpaka::syncBlockThreads(); + * } */ template and alpaka::Dim::value == 1>> @@ -93,20 +116,33 @@ namespace cms::alpakatools { public: ALPAKA_FN_ACC inline elements_with_stride(TAcc const& acc) : elements_{alpaka::getWorkDiv(acc)[0u]}, - thread_{alpaka::getIdx(acc)[0u] * elements_}, + first_{alpaka::getIdx(acc)[0u] * elements_}, stride_{alpaka::getWorkDiv(acc)[0u] * elements_}, extent_{stride_} {} ALPAKA_FN_ACC inline elements_with_stride(TAcc const& acc, Idx extent) : elements_{alpaka::getWorkDiv(acc)[0u]}, - thread_{alpaka::getIdx(acc)[0u] * elements_}, + first_{alpaka::getIdx(acc)[0u] * elements_}, + stride_{alpaka::getWorkDiv(acc)[0u] * elements_}, + extent_{extent} {} + + ALPAKA_FN_ACC inline elements_with_stride(TAcc const& acc, Idx first, Idx extent) + : elements_{alpaka::getWorkDiv(acc)[0u]}, + first_{alpaka::getIdx(acc)[0u] * elements_ + first}, stride_{alpaka::getWorkDiv(acc)[0u] * elements_}, extent_{extent} {} - class iterator { + class const_iterator; + using iterator = const_iterator; + + ALPAKA_FN_ACC inline const_iterator begin() const { return const_iterator(elements_, stride_, extent_, first_); } + + ALPAKA_FN_ACC inline const_iterator end() const { return const_iterator(elements_, stride_, extent_, extent_); } + + class const_iterator { friend class elements_with_stride; - ALPAKA_FN_ACC inline iterator(Idx elements, Idx stride, Idx extent, Idx first) + ALPAKA_FN_ACC inline const_iterator(Idx elements, Idx stride, Idx extent, Idx first) : elements_{elements}, stride_{stride}, extent_{extent}, @@ -118,7 +154,7 @@ namespace cms::alpakatools { ALPAKA_FN_ACC inline Idx operator*() const { return index_; } // pre-increment the iterator - ALPAKA_FN_ACC inline iterator& operator++() { + ALPAKA_FN_ACC inline const_iterator& operator++() { if constexpr (requires_single_thread_per_block_v) { // increment the index along the elements processed by the current thread ++index_; @@ -141,17 +177,17 @@ namespace cms::alpakatools { } // post-increment the iterator - ALPAKA_FN_ACC inline iterator operator++(int) { - iterator old = *this; + ALPAKA_FN_ACC inline const_iterator operator++(int) { + const_iterator old = *this; ++(*this); return old; } - ALPAKA_FN_ACC inline bool operator==(iterator const& other) const { + ALPAKA_FN_ACC inline bool operator==(const_iterator const& other) const { return (index_ == other.index_) and (first_ == other.first_); } - ALPAKA_FN_ACC inline bool operator!=(iterator const& other) const { return not(*this == other); } + ALPAKA_FN_ACC inline bool operator!=(const_iterator const& other) const { return not(*this == other); } private: // non-const to support iterator copy and assignment @@ -164,13 +200,9 @@ namespace cms::alpakatools { Idx range_; }; - ALPAKA_FN_ACC inline iterator begin() const { return iterator(elements_, stride_, extent_, thread_); } - - ALPAKA_FN_ACC inline iterator end() const { return iterator(elements_, stride_, extent_, extent_); } - private: const Idx elements_; - const Idx thread_; + const Idx first_; const Idx stride_; const Idx extent_; }; @@ -196,39 +228,60 @@ namespace cms::alpakatools { // tag used to construct an end iterator struct at_end_t {}; - class iterator { + class const_iterator; + using iterator = const_iterator; + + ALPAKA_FN_ACC inline const_iterator begin() const { + // check that all dimensions of the current thread index are within the extent + if ((thread_ < extent_).all()) { + // construct an iterator pointing to the first element to be processed by the current thread + return const_iterator{this, thread_}; + } else { + // construct an end iterator, pointing post the end of the extent + return const_iterator{this, at_end_t{}}; + } + } + + ALPAKA_FN_ACC inline const_iterator end() const { + // construct an end iterator, pointing post the end of the extent + return const_iterator{this, at_end_t{}}; + } + + class const_iterator { friend class elements_with_stride_nd; public: ALPAKA_FN_ACC inline Vec operator*() const { return index_; } // pre-increment the iterator - ALPAKA_FN_ACC constexpr inline iterator operator++() { + ALPAKA_FN_ACC constexpr inline const_iterator operator++() { increment(); return *this; } // post-increment the iterator - ALPAKA_FN_ACC constexpr inline iterator operator++(int) { - iterator old = *this; + ALPAKA_FN_ACC constexpr inline const_iterator operator++(int) { + const_iterator old = *this; increment(); return old; } - ALPAKA_FN_ACC constexpr inline bool operator==(iterator const& other) const { return (index_ == other.index_); } + ALPAKA_FN_ACC constexpr inline bool operator==(const_iterator const& other) const { + return (index_ == other.index_); + } - ALPAKA_FN_ACC constexpr inline bool operator!=(iterator const& other) const { return not(*this == other); } + ALPAKA_FN_ACC constexpr inline bool operator!=(const_iterator const& other) const { return not(*this == other); } private: // construct an iterator pointing to the first element to be processed by the current thread - ALPAKA_FN_ACC inline iterator(elements_with_stride_nd const* loop, Vec first) + ALPAKA_FN_ACC inline const_iterator(elements_with_stride_nd const* loop, Vec first) : loop_{loop}, first_{alpaka::elementwise_min(first, loop->extent_)}, range_{alpaka::elementwise_min(first + loop->elements_, loop->extent_)}, index_{first_} {} // construct an end iterator, pointing post the end of the extent - ALPAKA_FN_ACC inline iterator(elements_with_stride_nd const* loop, at_end_t const&) + ALPAKA_FN_ACC inline const_iterator(elements_with_stride_nd const* loop, at_end_t const&) : loop_{loop}, first_{loop_->extent_}, range_{loop_->extent_}, index_{loop_->extent_} {} template @@ -316,22 +369,6 @@ namespace cms::alpakatools { Vec index_; // current element processed by this thread }; - ALPAKA_FN_ACC inline iterator begin() const { - // check that all dimensions of the current thread index are within the extent - if ((thread_ < extent_).all()) { - // construct an iterator pointing to the first element to be processed by the current thread - return iterator{this, thread_}; - } else { - // construct an end iterator, pointing post the end of the extent - return iterator{this, at_end_t{}}; - } - } - - ALPAKA_FN_ACC inline iterator end() const { - // construct an end iterator, pointing post the end of the extent - return iterator{this, at_end_t{}}; - } - private: const Vec elements_; const Vec thread_; @@ -368,17 +405,24 @@ namespace cms::alpakatools { stride_{alpaka::getWorkDiv(acc)[0u]}, extent_{divide_up_by(extent, alpaka::getWorkDiv(acc)[0u])} {} - class iterator { + class const_iterator; + using iterator = const_iterator; + + ALPAKA_FN_ACC inline const_iterator begin() const { return const_iterator(stride_, extent_, first_); } + + ALPAKA_FN_ACC inline const_iterator end() const { return const_iterator(stride_, extent_, extent_); } + + class const_iterator { friend class blocks_with_stride; - ALPAKA_FN_ACC inline iterator(Idx stride, Idx extent, Idx first) + ALPAKA_FN_ACC inline const_iterator(Idx stride, Idx extent, Idx first) : stride_{stride}, extent_{extent}, first_{std::min(first, extent)} {} public: ALPAKA_FN_ACC inline Idx operator*() const { return first_; } // pre-increment the iterator - ALPAKA_FN_ACC inline iterator& operator++() { + ALPAKA_FN_ACC inline const_iterator& operator++() { // increment the first-element-in-block index by the grid stride first_ += stride_; if (first_ < extent_) @@ -390,15 +434,15 @@ namespace cms::alpakatools { } // post-increment the iterator - ALPAKA_FN_ACC inline iterator operator++(int) { - iterator old = *this; + ALPAKA_FN_ACC inline const_iterator operator++(int) { + const_iterator old = *this; ++(*this); return old; } - ALPAKA_FN_ACC inline bool operator==(iterator const& other) const { return (first_ == other.first_); } + ALPAKA_FN_ACC inline bool operator==(const_iterator const& other) const { return (first_ == other.first_); } - ALPAKA_FN_ACC inline bool operator!=(iterator const& other) const { return not(*this == other); } + ALPAKA_FN_ACC inline bool operator!=(const_iterator const& other) const { return not(*this == other); } private: // non-const to support iterator copy and assignment @@ -408,10 +452,6 @@ namespace cms::alpakatools { Idx first_; }; - ALPAKA_FN_ACC inline iterator begin() const { return iterator(stride_, extent_, first_); } - - ALPAKA_FN_ACC inline iterator end() const { return iterator(stride_, extent_, extent_); } - private: const Idx first_; const Idx stride_; @@ -427,6 +467,10 @@ namespace cms::alpakatools { * If the work division has only one element per thread, the loop will perform at most one iteration. * If the work division has more than one elements per thread, the loop will perform that number of iterations, * or less if it reaches size. + * + * If the problem size is not a multiple of the block size, different threads may execute a different number of + * iterations. As a result, it is not safe to call alpaka::syncBlockThreads() within this loop. If a block + * synchronisation is needed, one should split the loop, and synchronise the threads between the loops. */ template and alpaka::Dim::value == 1>> @@ -445,16 +489,24 @@ namespace cms::alpakatools { alpaka::getWorkDiv(acc)[0u])}, range_{std::min(extent - first_, local_ + alpaka::getWorkDiv(acc)[0u])} {} - class iterator { + class const_iterator; + using iterator = const_iterator; + + ALPAKA_FN_ACC inline const_iterator begin() const { return const_iterator(local_, first_, range_); } + + ALPAKA_FN_ACC inline const_iterator end() const { return const_iterator(range_, first_, range_); } + + class const_iterator { friend class elements_in_block; - ALPAKA_FN_ACC inline iterator(Idx local, Idx first, Idx range) : index_{local}, first_{first}, range_{range} {} + ALPAKA_FN_ACC inline const_iterator(Idx local, Idx first, Idx range) + : index_{local}, first_{first}, range_{range} {} public: ALPAKA_FN_ACC inline ElementIndex operator*() const { return ElementIndex{index_ + first_, index_}; } // pre-increment the iterator - ALPAKA_FN_ACC inline iterator& operator++() { + ALPAKA_FN_ACC inline const_iterator& operator++() { if constexpr (requires_single_thread_per_block_v) { // increment the index along the elements processed by the current thread ++index_; @@ -468,15 +520,15 @@ namespace cms::alpakatools { } // post-increment the iterator - ALPAKA_FN_ACC inline iterator operator++(int) { - iterator old = *this; + ALPAKA_FN_ACC inline const_iterator operator++(int) { + const_iterator old = *this; ++(*this); return old; } - ALPAKA_FN_ACC inline bool operator==(iterator const& other) const { return (index_ == other.index_); } + ALPAKA_FN_ACC inline bool operator==(const_iterator const& other) const { return (index_ == other.index_); } - ALPAKA_FN_ACC inline bool operator!=(iterator const& other) const { return not(*this == other); } + ALPAKA_FN_ACC inline bool operator!=(const_iterator const& other) const { return not(*this == other); } private: // modified by the pre/post-increment operator @@ -486,16 +538,244 @@ namespace cms::alpakatools { Idx range_; }; - ALPAKA_FN_ACC inline iterator begin() const { return iterator(local_, first_, range_); } - - ALPAKA_FN_ACC inline iterator end() const { return iterator(range_, first_, range_); } - private: const Idx first_; const Idx local_; const Idx range_; }; + /* uniform_groups + * + * `uniform_groups(acc, elements)` returns a range than spans the group indices required to cover the given problem + * size, in units of the block size: + * - the `elements` argument indicates the total number of elements, across all groups. + * + * `uniform_groups` should be called consistently by all the threads in a block. All threads in a block see the same + * loop iterations, while threads in different blocks may see a different number of iterations. + * + * For example, if `size` is 1000 and the block size is 16, + * + * for (auto group: uniform_groups(acc, 1000) + * + * will return the range from 0 to 62, split across all blocks in the work division. + * + * If the work division has more than 63 blocks, the first 63 will perform one iteration of the loop, while the other + * blocks will exit immediately. + * If the work division has less than 63 blocks, some of the blocks will perform more than one iteration, in order to + * cover then whole problem space. + * + * If the problem size is not a multiple of the block size, the last group will process a number of elements smaller + * than the block size. Also in this case all threads in the block will execute the same number of iterations of this + * loop: this makes it safe to use block-level synchronisations in the loop body. It is left to the inner loop (or the + * user) to ensure that only the correct number of threads process any data. + */ + + template and alpaka::Dim::value == 1>> + using uniform_groups = blocks_with_stride; + + /* uniform_group_elements + * + * `uniform_group_elements(acc, group, elements)` returns a range that spans all the elements within the given group: + * - the `group` argument indicates the id of the current group, for example as obtained from `uniform_groups`; + * - the `elements` argument indicates the total number of elements, across all groups. + * + * Iterating over the range yields values of type `ElementIndex`, that contain the `.global` and `.local` indices of + * the corresponding element. + * + * The loop will perform a number of iterations up to the number of elements per thread, stopping earlier when the + * element index reaches `size`. + * + * If the problem size is not a multiple of the block size, different threads may execute a different number of + * iterations. As a result, it is not safe to call alpaka::syncBlockThreads() within this loop. If a block + * synchronisation is needed, one should split the loop, and synchronise the threads between the loops. + */ + + template and alpaka::Dim::value == 1>> + using uniform_group_elements = elements_in_block; + + /* independent_groups + * + * `independent_groups(acc, groups)` returns a range than spans the group indices from 0 to `groups`, with one group + * per block: + * - the `groups` argument indicates the total number of groups. + * + * If the work division has more blocks than `groups`, only the first `groups` blocks will perform one iteration of + * the loop, while the other blocks will exit immediately. + * If the work division has less blocks than `groups`, some of the blocks will perform more than one iteration, in + * order to cover then whole problem space. + */ + + template and alpaka::Dim::value == 1>> + class independent_groups { + public: + ALPAKA_FN_ACC inline independent_groups(TAcc const& acc) + : first_{alpaka::getIdx(acc)[0u]}, + stride_{alpaka::getWorkDiv(acc)[0u]}, + extent_{stride_} {} + + // extent is the total number of elements (not blocks) + ALPAKA_FN_ACC inline independent_groups(TAcc const& acc, Idx groups) + : first_{alpaka::getIdx(acc)[0u]}, + stride_{alpaka::getWorkDiv(acc)[0u]}, + extent_{groups} {} + + class const_iterator; + using iterator = const_iterator; + + ALPAKA_FN_ACC inline const_iterator begin() const { return const_iterator(stride_, extent_, first_); } + + ALPAKA_FN_ACC inline const_iterator end() const { return const_iterator(stride_, extent_, extent_); } + + class const_iterator { + friend class independent_groups; + + ALPAKA_FN_ACC inline const_iterator(Idx stride, Idx extent, Idx first) + : stride_{stride}, extent_{extent}, first_{std::min(first, extent)} {} + + public: + ALPAKA_FN_ACC inline Idx operator*() const { return first_; } + + // pre-increment the iterator + ALPAKA_FN_ACC inline const_iterator& operator++() { + // increment the first-element-in-block index by the grid stride + first_ += stride_; + if (first_ < extent_) + return *this; + + // the iterator has reached or passed the end of the extent, clamp it to the extent + first_ = extent_; + return *this; + } + + // post-increment the iterator + ALPAKA_FN_ACC inline const_iterator operator++(int) { + const_iterator old = *this; + ++(*this); + return old; + } + + ALPAKA_FN_ACC inline bool operator==(const_iterator const& other) const { return (first_ == other.first_); } + + ALPAKA_FN_ACC inline bool operator!=(const_iterator const& other) const { return not(*this == other); } + + private: + // non-const to support iterator copy and assignment + Idx stride_; + Idx extent_; + // modified by the pre/post-increment operator + Idx first_; + }; + + private: + const Idx first_; + const Idx stride_; + const Idx extent_; + }; + + /* independent_group_elements + * + * `independent_group_elements(acc, elements)` returns a range that spans all the elements within the given group: + * - the `elements` argument indicates the number of elements in the current group. + * + * Iterating over the range yields the local element index, between `0` and `elements - 1`. The threads in the block + * will perform one or more iterations, depending on the number of elements per thread, and on the number of threads + * per block, compared with the total number of elements. + * + * If the problem size is not a multiple of the block size, different threads may execute a different number of + * iterations. As a result, it is not safe to call alpaka::syncBlockThreads() within this loop. If a block + * synchronisation is needed, one should split the loop, and synchronise the threads between the loops. + */ + + template and alpaka::Dim::value == 1>> + class independent_group_elements { + public: + ALPAKA_FN_ACC inline independent_group_elements(TAcc const& acc) + : elements_{alpaka::getWorkDiv(acc)[0u]}, + thread_{alpaka::getIdx(acc)[0u] * elements_}, + stride_{alpaka::getWorkDiv(acc)[0u] * elements_}, + extent_{stride_} {} + + ALPAKA_FN_ACC inline independent_group_elements(TAcc const& acc, Idx extent) + : elements_{alpaka::getWorkDiv(acc)[0u]}, + thread_{alpaka::getIdx(acc)[0u] * elements_}, + stride_{alpaka::getWorkDiv(acc)[0u] * elements_}, + extent_{extent} {} + + class const_iterator; + using iterator = const_iterator; + + ALPAKA_FN_ACC inline const_iterator begin() const { return const_iterator(elements_, stride_, extent_, thread_); } + + ALPAKA_FN_ACC inline const_iterator end() const { return const_iterator(elements_, stride_, extent_, extent_); } + + class const_iterator { + friend class independent_group_elements; + + ALPAKA_FN_ACC inline const_iterator(Idx elements, Idx stride, Idx extent, Idx first) + : elements_{elements}, + stride_{stride}, + extent_{extent}, + first_{std::min(first, extent)}, + index_{first_}, + range_{std::min(first + elements, extent)} {} + + public: + ALPAKA_FN_ACC inline Idx operator*() const { return index_; } + + // pre-increment the iterator + ALPAKA_FN_ACC inline const_iterator& operator++() { + if constexpr (requires_single_thread_per_block_v) { + // increment the index along the elements processed by the current thread + ++index_; + if (index_ < range_) + return *this; + } + + // increment the thread index with the block stride + first_ += stride_; + index_ = first_; + range_ = std::min(first_ + elements_, extent_); + if (index_ < extent_) + return *this; + + // the iterator has reached or passed the end of the extent, clamp it to the extent + first_ = extent_; + index_ = extent_; + range_ = extent_; + return *this; + } + + // post-increment the iterator + ALPAKA_FN_ACC inline const_iterator operator++(int) { + const_iterator old = *this; + ++(*this); + return old; + } + + ALPAKA_FN_ACC inline bool operator==(const_iterator const& other) const { + return (index_ == other.index_) and (first_ == other.first_); + } + + ALPAKA_FN_ACC inline bool operator!=(const_iterator const& other) const { return not(*this == other); } + + private: + // non-const to support iterator copy and assignment + Idx elements_; + Idx stride_; + Idx extent_; + // modified by the pre/post-increment operator + Idx first_; + Idx index_; + Idx range_; + }; + + private: + const Idx elements_; + const Idx thread_; + const Idx stride_; + const Idx extent_; + }; + /* once_per_grid * * `once_per_grid(acc)` returns true for a single thread within the kernel execution grid. diff --git a/HeterogeneousCore/AlpakaInterface/test/BuildFile.xml b/HeterogeneousCore/AlpakaInterface/test/BuildFile.xml index 5f9c5fe81981f..2d204819d740b 100644 --- a/HeterogeneousCore/AlpakaInterface/test/BuildFile.xml +++ b/HeterogeneousCore/AlpakaInterface/test/BuildFile.xml @@ -12,6 +12,13 @@ + + + + + + + diff --git a/HeterogeneousCore/AlpakaInterface/test/alpaka/testIndependentKernel.dev.cc b/HeterogeneousCore/AlpakaInterface/test/alpaka/testIndependentKernel.dev.cc new file mode 100644 index 0000000000000..bd98efcfa32d6 --- /dev/null +++ b/HeterogeneousCore/AlpakaInterface/test/alpaka/testIndependentKernel.dev.cc @@ -0,0 +1,144 @@ +#include +#include + +#include + +#define CATCH_CONFIG_MAIN +#include + +#include "HeterogeneousCore/AlpakaInterface/interface/config.h" +#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" +#include "HeterogeneousCore/AlpakaInterface/interface/workdivision.h" + +// each test binary is built for a single Alpaka backend +using namespace ALPAKA_ACCELERATOR_NAMESPACE; + +/* Add the group id to te value of each element in the group. + * Each group is composed by the elements first[group]..first[group+1]-1 . + */ +struct IndependentWorkKernel { + template + ALPAKA_FN_ACC void operator()(TAcc const& acc, + T const* __restrict__ in, + T* __restrict__ out, + size_t const* __restrict__ indices, + size_t groups) const { + for (auto group : cms::alpakatools::independent_groups(acc, groups)) { + size_t first = indices[group]; + size_t last = indices[group + 1]; + size_t size = last - first; + for (auto index : cms::alpakatools::independent_group_elements(acc, size)) { + out[first + index] = in[first + index] + group; + } + } + } +}; + +/* Test the IndependentWorkKernel kernel on all devices + */ +template +void testIndependentWorkKernel(size_t groups, size_t grid_size, size_t block_size, TKernel kernel) { + // random number generator with a gaussian distribution + std::random_device rd{}; + std::default_random_engine engine{rd()}; + + // uniform distribution + std::uniform_int_distribution random_size{100, 201}; + + // gaussian distribution + std::normal_distribution dist{0., 1.}; + + // build the groups + std::vector sizes(groups); + auto indices_h = cms::alpakatools::make_host_buffer(groups + 1); + indices_h[0] = 0; + for (size_t i = 0; i < groups; ++i) { + auto size = random_size(engine); + sizes[i] = size; + indices_h[i + 1] = indices_h[i] + size; + } + + // tolerance + constexpr float epsilon = 0.000001; + + // buffer size + const size_t size = indices_h[groups]; + + // allocate the input and output host buffer in pinned memory accessible by the Platform devices + auto in_h = cms::alpakatools::make_host_buffer(size); + auto out_h = cms::alpakatools::make_host_buffer(size); + + // fill the input buffers with random data, and the output buffer with zeros + for (size_t i = 0; i < size; ++i) { + in_h[i] = dist(engine); + out_h[i] = 0; + } + + // run the test on each device + for (auto const& device : cms::alpakatools::devices()) { + std::cout << "Test IndependentWorkKernel on " << alpaka::getName(device) << " over " << size << " elements in " + << groups << " independent groups with " << grid_size << " blocks of " << block_size << " elements\n"; + auto queue = Queue(device); + + // allocate input and output buffers on the device + auto indices_d = cms::alpakatools::make_device_buffer(queue, groups + 1); + auto in_d = cms::alpakatools::make_device_buffer(queue, size); + auto out_d = cms::alpakatools::make_device_buffer(queue, size); + + // copy the input data to the device; the size is known from the buffer objects + alpaka::memcpy(queue, indices_d, indices_h); + alpaka::memcpy(queue, in_d, in_h); + + // fill the output buffer with zeros; the size is known from the buffer objects + alpaka::memset(queue, out_d, 0.); + + // launch the 1-dimensional kernel with independent work groups + auto div = cms::alpakatools::make_workdiv(grid_size, block_size); + alpaka::exec(queue, div, kernel, in_d.data(), out_d.data(), indices_d.data(), groups); + + // copy the results from the device to the host + alpaka::memcpy(queue, out_h, out_d); + + // wait for all the operations to complete + alpaka::wait(queue); + + // check the results + for (size_t g = 0; g < groups; ++g) { + size_t first = indices_h[g]; + size_t last = indices_h[g + 1]; + for (size_t i = first; i < last; ++i) { + float sum = in_h[i] + g; + float delta = std::max(std::fabs(sum) * epsilon, epsilon); + REQUIRE(out_h[i] < sum + delta); + REQUIRE(out_h[i] > sum - delta); + } + } + } +} + +TEST_CASE("Test alpaka kernels for the " EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) " backend", + "[" EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE) "]") { + SECTION("Independent work groups") { + // get the list of devices on the current platform + auto const& devices = cms::alpakatools::devices(); + if (devices.empty()) { + INFO("No devices available on the platform " EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESPACE)); + REQUIRE(not devices.empty()); + } + + // launch the independent work kernel with a small block size and a small number of blocks; + // this relies on the kernel to loop over the "problem space" and do more work per block + std::cout << "Test independent work kernel with small block size, using scalar dimensions\n"; + testIndependentWorkKernel(100, 32, 32, IndependentWorkKernel{}); + + // launch the independent work kernel with a large block size and a single block; + // this relies on the kernel to check the size of the "problem space" and avoid accessing out-of-bounds data + std::cout << "Test independent work kernel with large block size, using scalar dimensions\n"; + testIndependentWorkKernel(100, 1, 1024, IndependentWorkKernel{}); + + // launch the independent work kernel with a large block size and a large number of blocks; + // this relies on the kernel to check the size of the "problem space" and avoid accessing out-of-bounds data + std::cout << "Test independent work kernel with large block size, using scalar dimensions\n"; + testIndependentWorkKernel(100, 1024, 1024, IndependentWorkKernel{}); + } +} diff --git a/HeterogeneousCore/AlpakaInterface/test/alpaka/testKernel.dev.cc b/HeterogeneousCore/AlpakaInterface/test/alpaka/testKernel.dev.cc index 300f139b0c6e3..a730e4b515a76 100644 --- a/HeterogeneousCore/AlpakaInterface/test/alpaka/testKernel.dev.cc +++ b/HeterogeneousCore/AlpakaInterface/test/alpaka/testKernel.dev.cc @@ -23,6 +23,20 @@ struct VectorAddKernel { } }; +struct VectorAddKernelSkip { + template + ALPAKA_FN_ACC void operator()(TAcc const& acc, + T const* __restrict__ in1, + T const* __restrict__ in2, + T* __restrict__ out, + size_t first, + size_t size) const { + for (auto index : cms::alpakatools::elements_with_stride(acc, first, size)) { + out[index] = in1[index] + in2[index]; + } + } +}; + struct VectorAddKernel1D { template ALPAKA_FN_ACC void operator()( @@ -224,6 +238,76 @@ void testVectorAddKernel(std::size_t problem_size, std::size_t grid_size, std::s } } +// test the 1-dimensional kernel on all devices, potentially skipping some elements +template +void testVectorAddKernelSkip(std::size_t skip_elements, + std::size_t problem_size, + std::size_t grid_size, + std::size_t block_size, + TKernel kernel) { + // random number generator with a gaussian distribution + std::random_device rd{}; + std::default_random_engine rand{rd()}; + std::normal_distribution dist{0., 1.}; + + // tolerance + constexpr float epsilon = 0.000001; + + // buffer size + const size_t size = problem_size; + + // allocate input and output host buffers in pinned memory accessible by the Platform devices + auto in1_h = cms::alpakatools::make_host_buffer(size); + auto in2_h = cms::alpakatools::make_host_buffer(size); + auto out_h = cms::alpakatools::make_host_buffer(size); + + // fill the input buffers with random data, and the output buffer with zeros + for (size_t i = 0; i < size; ++i) { + in1_h[i] = dist(rand); + in2_h[i] = dist(rand); + out_h[i] = 0.; + } + + // run the test on each device + for (auto const& device : cms::alpakatools::devices()) { + std::cout << "Test 1D vector addition on " << alpaka::getName(device) << " skipping " << skip_elements << " over " + << problem_size << " values with " << grid_size << " blocks of " << block_size << " elements\n"; + auto queue = Queue(device); + + // allocate input and output buffers on the device + auto in1_d = cms::alpakatools::make_device_buffer(queue, size); + auto in2_d = cms::alpakatools::make_device_buffer(queue, size); + auto out_d = cms::alpakatools::make_device_buffer(queue, size); + + // copy the input data to the device; the size is known from the buffer objects + alpaka::memcpy(queue, in1_d, in1_h); + alpaka::memcpy(queue, in2_d, in2_h); + + // fill the output buffer with zeros; the size is known from the buffer objects + alpaka::memset(queue, out_d, 0.); + + // launch the 1-dimensional kernel with scalar size + auto div = cms::alpakatools::make_workdiv(grid_size, block_size); + alpaka::exec(queue, div, kernel, in1_d.data(), in2_d.data(), out_d.data(), skip_elements, size); + + // copy the results from the device to the host + alpaka::memcpy(queue, out_h, out_d); + + // wait for all the operations to complete + alpaka::wait(queue); + + // check the results + for (size_t i = 0; i < skip_elements; ++i) { + REQUIRE(out_h[i] == 0); + } + for (size_t i = skip_elements; i < size; ++i) { + float sum = in1_h[i] + in2_h[i]; + REQUIRE(out_h[i] < sum + epsilon); + REQUIRE(out_h[i] > sum - epsilon); + } + } +} + // test the N-dimensional kernels on all devices template void testVectorAddKernelND(Vec problem_size, Vec grid_size, Vec block_size, TKernel kernel) { @@ -367,5 +451,15 @@ TEST_CASE("Test alpaka kernels for the " EDM_STRINGIZE(ALPAKA_ACCELERATOR_NAMESP // this relies on the kernel to check the size of the "problem space" and avoid accessing out-of-bounds data std::cout << "Test 1D vector block-level serial addition with large block size, using scalar dimensions\n"; testVectorAddKernel(100, 1, 1024, VectorAddKernelBlockSerial{}); + + // launch the 1-dimensional kernel with a small block size and a small number of blocks; + // this relies on the kernel to loop over the "problem space" and do more work per block + std::cout << "Test 1D vector addition with small block size, using scalar dimensions\n"; + testVectorAddKernelSkip(20, 10000, 32, 32, VectorAddKernelSkip{}); + + // launch the 1-dimensional kernel with a large block size and a single block; + // this relies on the kernel to check the size of the "problem space" and avoid accessing out-of-bounds data + std::cout << "Test 1D vector addition with large block size, using scalar dimensions\n"; + testVectorAddKernelSkip(20, 100, 1, 1024, VectorAddKernelSkip{}); } } diff --git a/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h b/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h index 1c34de98d4b78..9975feda1b92e 100644 --- a/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h +++ b/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h @@ -2,6 +2,7 @@ #define HeterogeneousCore_AlpakaTest_interface_AlpakaESTestData_h #include "DataFormats/Portable/interface/PortableHostCollection.h" +#include "DataFormats/Portable/interface/PortableCollection.h" #include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" #include "HeterogeneousCore/AlpakaInterface/interface/memory.h" @@ -32,12 +33,52 @@ namespace cms::alpakatest { private: Buffer buffer_; }; + + // Template-over-device model with PortableCollection members + // Demonstrates indirection from one PortableCollection to the other + template + class AlpakaESTestDataE { + public: + using ECollection = PortableCollection; + using EDataCollection = PortableCollection; + + class ConstView { + public: + constexpr ConstView(typename ECollection::ConstView e, typename EDataCollection::ConstView data) + : eView_(e), dataView_(data) {} + + constexpr auto size() const { return eView_.metadata().size(); } + constexpr int val(int i) const { return eView_.val(i); } + constexpr int val2(int i) const { return dataView_.val2(eView_.ind(i)); } + + private: + typename ECollection::ConstView eView_; + typename EDataCollection::ConstView dataView_; + }; + + AlpakaESTestDataE(size_t size, size_t dataSize) : e_(size), data_(dataSize) {} + + AlpakaESTestDataE(ECollection e, EDataCollection data) : e_(std::move(e)), data_(std::move(data)) {} + + ECollection const& e() const { return e_; } + EDataCollection const& data() const { return data_; } + + ConstView view() const { return const_view(); } + ConstView const_view() const { return ConstView(e_.const_view(), data_.const_view()); } + + private: + ECollection e_; + EDataCollection data_; + }; + using AlpakaESTestDataEHost = AlpakaESTestDataE; + } // namespace cms::alpakatest namespace cms::alpakatools { - // Explicit specialization is needed for the template-over-device model + // Explicit specializations are needed for the template-over-device model // - // PortableCollection-based model gets this for free from PortableCollection itself + // PortableCollection-based model gets these for free from PortableCollection itself + template <> struct CopyToDevice> { template @@ -57,6 +98,18 @@ namespace cms::alpakatools { return cms::alpakatest::AlpakaESTestDataB>(std::move(dstBuffer)); } }; + + template <> + struct CopyToDevice { + template + static auto copyAsync(TQueue& queue, cms::alpakatest::AlpakaESTestDataEHost const& srcData) { + using ECopy = CopyToDevice; + using EDataCopy = CopyToDevice; + using TDevice = alpaka::Dev; + return cms::alpakatest::AlpakaESTestDataE(ECopy::copyAsync(queue, srcData.e()), + EDataCopy::copyAsync(queue, srcData.data())); + } + }; } // namespace cms::alpakatools #endif diff --git a/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestSoA.h b/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestSoA.h index d947d2b8f2333..425a248e7f378 100644 --- a/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestSoA.h +++ b/HeterogeneousCore/AlpakaTest/interface/AlpakaESTestSoA.h @@ -10,10 +10,14 @@ namespace cms::alpakatest { GENERATE_SOA_LAYOUT(AlpakaESTestSoALayoutA, SOA_COLUMN(int, z)) GENERATE_SOA_LAYOUT(AlpakaESTestSoALayoutC, SOA_COLUMN(int, x)) GENERATE_SOA_LAYOUT(AlpakaESTestSoALayoutD, SOA_COLUMN(int, y)) + GENERATE_SOA_LAYOUT(AlpakaESTestSoALayoutE, SOA_COLUMN(float, val), SOA_COLUMN(int, ind)) + GENERATE_SOA_LAYOUT(AlpakaESTestSoALayoutEData, SOA_COLUMN(float, val2)) using AlpakaESTestSoAA = AlpakaESTestSoALayoutA<>; using AlpakaESTestSoAC = AlpakaESTestSoALayoutC<>; using AlpakaESTestSoAD = AlpakaESTestSoALayoutD<>; + using AlpakaESTestSoAE = AlpakaESTestSoALayoutE<>; + using AlpakaESTestSoAEData = AlpakaESTestSoALayoutEData<>; } // namespace cms::alpakatest #endif diff --git a/HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h b/HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h index 4eca569722b4f..71c3b91d8ba2a 100644 --- a/HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h +++ b/HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h @@ -17,11 +17,15 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { using AlpakaESTestDataDHost = cms::alpakatest::AlpakaESTestDataDHost; using AlpakaESTestDataDDevice = PortableCollection; + + using AlpakaESTestDataEHost = cms::alpakatest::AlpakaESTestDataEHost; + using AlpakaESTestDataEDevice = cms::alpakatest::AlpakaESTestDataE; } // namespace ALPAKA_ACCELERATOR_NAMESPACE // check that the portable device collections for the host device are the same as the portable host collections ASSERT_DEVICE_MATCHES_HOST_COLLECTION(AlpakaESTestDataADevice, cms::alpakatest::AlpakaESTestDataAHost); ASSERT_DEVICE_MATCHES_HOST_COLLECTION(AlpakaESTestDataCDevice, cms::alpakatest::AlpakaESTestDataCHost); ASSERT_DEVICE_MATCHES_HOST_COLLECTION(AlpakaESTestDataDDevice, cms::alpakatest::AlpakaESTestDataDHost); +ASSERT_DEVICE_MATCHES_HOST_COLLECTION(AlpakaESTestDataEDevice, cms::alpakatest::AlpakaESTestDataEHost); #endif // HeterogeneousCore_AlpakaTest_interface_alpaka_AlpakaESTestData_h diff --git a/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc b/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc index 7698121a523b1..e1834ff95a31f 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc +++ b/HeterogeneousCore/AlpakaTest/plugins/TestAlpakaAnalyzer.cc @@ -85,7 +85,8 @@ class TestAlpakaAnalyzer : public edm::global::EDAnalyzer<> { TestAlpakaAnalyzer(edm::ParameterSet const& config) : source_{config.getParameter("source")}, token_{consumes(source_)}, - expectSize_{config.getParameter("expectSize")} { + expectSize_{config.getParameter("expectSize")}, + expectXvalues_{config.getParameter>("expectXvalues")} { if (std::string const& eb = config.getParameter("expectBackend"); not eb.empty()) { expectBackend_ = cms::alpakatools::toBackend(eb); backendToken_ = consumes(edm::InputTag(source_.label(), "backend", source_.process())); @@ -146,7 +147,10 @@ class TestAlpakaAnalyzer : public edm::global::EDAnalyzer<> { assert(view.r() == 1.); for (int32_t i = 0; i < view.metadata().size(); ++i) { auto vi = view[i]; - assert(vi.x() == 0.); + if (not expectXvalues_.empty() and vi.x() != expectXvalues_[i % expectXvalues_.size()]) { + throw cms::Exception("Assert") << "Index " << i << " expected value " + << expectXvalues_[i % expectXvalues_.size()] << ", got " << vi.x(); + } assert(vi.y() == 0.); assert(vi.z() == 0.); assert(vi.id() == i); @@ -168,6 +172,11 @@ class TestAlpakaAnalyzer : public edm::global::EDAnalyzer<> { desc.add("source"); desc.add("expectSize", -1) ->setComment("Expected size of the input collection. Values < 0 mean the check is not performed. Default: -1"); + desc.add>("expectXvalues", std::vector(0.)) + ->setComment( + "Expected values of the 'x' field in the input collection. Empty value means to not perform the check. If " + "input collection has more elements than this parameter, the parameter values are looped over. Default: " + "{0.}"); desc.add("expectBackend", "") ->setComment( "Expected backend of the input collection. Empty value means to not perform the check. Default: empty " @@ -181,6 +190,7 @@ class TestAlpakaAnalyzer : public edm::global::EDAnalyzer<> { edm::EDGetTokenT backendToken_; std::optional expectBackend_; const int expectSize_; + const std::vector expectXvalues_; }; #include "FWCore/Framework/interface/MakerMacros.h" diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc index 9dab03aac0823..e574da64ef84e 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.dev.cc @@ -23,13 +23,11 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { portabletest::TestDeviceCollection::View view, int32_t size, double xvalue) const { - // global index of the thread within the grid - const int32_t thread = alpaka::getIdx(acc)[0u]; const portabletest::Matrix matrix{{1, 2, 3, 4, 5, 6}, {2, 4, 6, 8, 10, 12}, {3, 6, 9, 12, 15, 18}}; const portabletest::Array flags = {{6, 4, 2, 0}}; // set this only once in the whole kernel grid - if (thread == 0) { + if (once_per_grid(acc)) { view.r() = 1.; } @@ -82,4 +80,48 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { alpaka::exec(queue, workDiv, TestAlgoStructKernel{}, object.data(), x, y, z, id); } + class TestAlgoKernelUpdate { + public: + template >> + ALPAKA_FN_ACC void operator()(TAcc const& acc, + portabletest::TestDeviceCollection::ConstView input, + AlpakaESTestDataEDevice::ConstView esData, + portabletest::TestDeviceCollection::View output) const { + // set this only once in the whole kernel grid + if (once_per_grid(acc)) { + output.r() = input.r(); + } + + // make a strided loop over the kernel grid, covering up to "size" elements + for (int32_t i : elements_with_stride(acc, output.metadata().size())) { + double x = input[i].x(); + if (i < esData.size()) { + x += esData.val(i) + esData.val2(i); + } + output[i] = {x, input[i].y(), input[i].z(), input[i].id(), input[i].flags(), input[i].m()}; + } + } + }; + + portabletest::TestDeviceCollection TestAlgo::update(Queue& queue, + portabletest::TestDeviceCollection const& input, + AlpakaESTestDataEDevice const& esData) const { + portabletest::TestDeviceCollection collection{input->metadata().size(), queue}; + + // use 64 items per group (this value is arbitrary, but it's a reasonable starting point) + uint32_t items = 64; + + // use as many groups as needed to cover the whole problem + uint32_t groups = divide_up_by(collection->metadata().size(), items); + + // map items to + // - threads with a single element per thread on a GPU backend + // - elements within a single thread on a CPU backend + auto workDiv = make_workdiv(groups, items); + + alpaka::exec(queue, workDiv, TestAlgoKernelUpdate{}, input.view(), esData.view(), collection.view()); + + return collection; + } + } // namespace ALPAKA_ACCELERATOR_NAMESPACE diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.h b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.h index e54a606275b37..e9eca3f364b54 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.h +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlgo.h @@ -4,6 +4,7 @@ #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceCollection.h" #include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceObject.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" +#include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h" namespace ALPAKA_ACCELERATOR_NAMESPACE { @@ -12,6 +13,10 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void fill(Queue& queue, portabletest::TestDeviceCollection& collection, double xvalue = 0.) const; void fillObject( Queue& queue, portabletest::TestDeviceObject& object, double x, double y, double z, int32_t id) const; + + portabletest::TestDeviceCollection update(Queue& queue, + portabletest::TestDeviceCollection const& input, + AlpakaESTestDataEDevice const& esData) const; }; } // namespace ALPAKA_ACCELERATOR_NAMESPACE diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerA.cc b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerA.cc index e0fd86c9a48c1..2bfe90ecf196b 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerA.cc +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerA.cc @@ -1,9 +1,9 @@ -#include "FWCore/Framework/interface/ESTransientHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/ESGetToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" +#include "HeterogeneousCore/AlpakaInterface/interface/host.h" #include "HeterogeneousCore/AlpakaInterface/interface/memory.h" #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h" #include "HeterogeneousCore/AlpakaTest/interface/ESTestData.h" diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerC.cc b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerC.cc index 3db197f36e2e4..b6784b717d91d 100644 --- a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerC.cc +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerC.cc @@ -1,13 +1,10 @@ -#include "FWCore/Framework/interface/ESTransientHandle.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/ESGetToken.h" -#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" #include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" #include "HeterogeneousCore/AlpakaInterface/interface/host.h" #include "HeterogeneousCore/AlpakaInterface/interface/memory.h" -#include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h" #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h" #include "HeterogeneousCore/AlpakaTest/interface/ESTestData.h" #include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h" diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerE.cc b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerE.cc new file mode 100644 index 0000000000000..1285ac0347706 --- /dev/null +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaESProducerE.cc @@ -0,0 +1,58 @@ +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESProducer.h" +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ModuleFactory.h" +#include "HeterogeneousCore/AlpakaInterface/interface/config.h" +#include "HeterogeneousCore/AlpakaInterface/interface/host.h" +#include "HeterogeneousCore/AlpakaInterface/interface/memory.h" +#include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h" +#include "HeterogeneousCore/AlpakaTest/interface/ESTestData.h" +#include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h" + +#include + +namespace ALPAKA_ACCELERATOR_NAMESPACE { + /** + * This class demonstrates an ESProducer that uses the + * PortableCollection-based data model, and that consumes a standard + * host ESProduct and converts the data into PortableCollection, and + * implicitly transfers the data product to device + */ + class TestAlpakaESProducerE : public ESProducer { + public: + TestAlpakaESProducerE(edm::ParameterSet const& iConfig) : ESProducer(iConfig) { + auto cc = setWhatProduced(this); + token_ = cc.consumes(); + } + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + descriptions.addWithDefaultLabel(desc); + } + + std::optional produce(AlpakaESTestRecordC const& iRecord) { + auto const& input = iRecord.get(token_); + + int const edatasize = 2; + AlpakaESTestDataEHost::EDataCollection data(edatasize, cms::alpakatools::host()); + for (int i = 0; i < edatasize; ++i) { + data.view()[i].val2() = i * 10 + 1; + } + + int const esize = 5; + // TODO: pinned allocation? + // TODO: cached allocation? + AlpakaESTestDataEHost::ECollection e(esize, cms::alpakatools::host()); + for (int i = 0; i < esize; ++i) { + e.view()[i].val() = std::abs(input.value()) + i * 2; + e.view()[i].ind() = i % edatasize; + } + return AlpakaESTestDataEHost(std::move(e), std::move(data)); + } + + private: + edm::ESGetToken token_; + }; +} // namespace ALPAKA_ACCELERATOR_NAMESPACE + +DEFINE_FWK_EVENTSETUP_ALPAKA_MODULE(TestAlpakaESProducerE); diff --git a/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaGlobalProducerE.cc b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaGlobalProducerE.cc new file mode 100644 index 0000000000000..95d1423fdf2bc --- /dev/null +++ b/HeterogeneousCore/AlpakaTest/plugins/alpaka/TestAlpakaGlobalProducerE.cc @@ -0,0 +1,59 @@ +#include "DataFormats/PortableTestObjects/interface/alpaka/TestDeviceCollection.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/global/EDProducer.h" +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/EDPutToken.h" +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/ESGetToken.h" +#include "HeterogeneousCore/AlpakaInterface/interface/config.h" +#include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestRecords.h" +#include "HeterogeneousCore/AlpakaTest/interface/alpaka/AlpakaESTestData.h" + +#include "TestAlgo.h" + +namespace ALPAKA_ACCELERATOR_NAMESPACE { + /** + * This class demonstrates a global EDProducer that + * - consumes a device ESProduct + * - consumes a device EDProduct + * - produces a device EDProduct (that can get transferred to host automatically) + */ + class TestAlpakaGlobalProducerE : public global::EDProducer<> { + public: + TestAlpakaGlobalProducerE(edm::ParameterSet const& config) + : esToken_(esConsumes(config.getParameter("eventSetupSource"))), + getToken_(consumes(config.getParameter("source"))), + putToken_{produces()} {} + + void produce(edm::StreamID, device::Event& iEvent, device::EventSetup const& iSetup) const override { + auto const& esData = iSetup.getData(esToken_); + auto const& input = iEvent.get(getToken_); + + // run the algorithm, potentially asynchronously + auto deviceProduct = algo_.update(iEvent.queue(), input, esData); + + iEvent.emplace(putToken_, std::move(deviceProduct)); + } + + static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("eventSetupSource", edm::ESInputTag{}); + desc.add("source", edm::InputTag{}); + + descriptions.addWithDefaultLabel(desc); + } + + private: + const device::ESGetToken esToken_; + const device::EDGetToken getToken_; + const device::EDPutToken putToken_; + + // implementation of the algorithm + TestAlgo algo_; + }; + +} // namespace ALPAKA_ACCELERATOR_NAMESPACE + +#include "HeterogeneousCore/AlpakaCore/interface/alpaka/MakerMacros.h" +DEFINE_FWK_ALPAKA_MODULE(TestAlpakaGlobalProducerE); diff --git a/HeterogeneousCore/AlpakaTest/src/ES_AlpakaESTestData.cc b/HeterogeneousCore/AlpakaTest/src/ES_AlpakaESTestData.cc index 6e5c253fcd9f7..b6b2adaa98d81 100644 --- a/HeterogeneousCore/AlpakaTest/src/ES_AlpakaESTestData.cc +++ b/HeterogeneousCore/AlpakaTest/src/ES_AlpakaESTestData.cc @@ -8,3 +8,6 @@ TYPELOOKUP_DATA_REG(cms::alpakatest::AlpakaESTestDataDHost); // Template-over-device model TYPELOOKUP_DATA_REG(cms::alpakatest::AlpakaESTestDataB); + +// Template-over-device model with PortableCollection members +TYPELOOKUP_DATA_REG(cms::alpakatest::AlpakaESTestDataEHost); diff --git a/HeterogeneousCore/AlpakaTest/src/alpaka/ES_AlpakaESTestData.cc b/HeterogeneousCore/AlpakaTest/src/alpaka/ES_AlpakaESTestData.cc index 8af0c172ef83f..f5093b6bf2e9d 100644 --- a/HeterogeneousCore/AlpakaTest/src/alpaka/ES_AlpakaESTestData.cc +++ b/HeterogeneousCore/AlpakaTest/src/alpaka/ES_AlpakaESTestData.cc @@ -9,3 +9,6 @@ TYPELOOKUP_ALPAKA_DATA_REG(AlpakaESTestDataDDevice); // Template-over-device model #include "HeterogeneousCore/AlpakaTest/interface/AlpakaESTestData.h" TYPELOOKUP_ALPAKA_TEMPLATED_DATA_REG(cms::alpakatest::AlpakaESTestDataB); + +// Template-over-device model with PortableCollection members +TYPELOOKUP_ALPAKA_TEMPLATED_DATA_REG(cms::alpakatest::AlpakaESTestDataE); diff --git a/HeterogeneousCore/AlpakaTest/test/testAlpakaModules_cfg.py b/HeterogeneousCore/AlpakaTest/test/testAlpakaModules_cfg.py index 406833b920eb0..331fac9b84312 100644 --- a/HeterogeneousCore/AlpakaTest/test/testAlpakaModules_cfg.py +++ b/HeterogeneousCore/AlpakaTest/test/testAlpakaModules_cfg.py @@ -54,6 +54,7 @@ srcA = cms.ESInputTag("", "appendedLabel"), srcB = cms.ESInputTag("", "explicitLabel"), ) +process.alpakaESProducerE = cms.ESProducer("TestAlpakaESProducerE@alpaka") process.alpakaESProducerNull = cms.ESProducer("TestAlpakaESProducerNull@alpaka", appendToDataLabel = cms.string("null"), ) @@ -69,6 +70,9 @@ alpaka_rocm_async = 30, ) ) +process.alpakaGlobalProducerE = cms.EDProducer("TestAlpakaGlobalProducerE@alpaka", + source = cms.InputTag("alpakaGlobalProducer") +) process.alpakaStreamProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka", source = cms.InputTag("intProduct"), eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"), @@ -99,6 +103,10 @@ expectSize = cms.int32(10), expectBackend = cms.string("SerialSync") ) +process.alpakaGlobalConsumerE = process.alpakaGlobalConsumer.clone( + source = "alpakaGlobalProducerE", + expectXvalues = cms.vdouble([(i%2)*10+1 + abs(27)+i*2 for i in range(0,5)] + [0]*5) +) process.alpakaStreamConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer", source = cms.InputTag("alpakaStreamProducer"), expectSize = cms.int32(5), @@ -121,8 +129,10 @@ if args.processAcceleratorBackend != "": process.ProcessAcceleratorAlpaka.setBackend(args.processAcceleratorBackend) if args.moduleBackend != "": - for name in ["ESProducerA", "ESProducerB", "ESProducerC", "ESProducerD", "ESProducerNull", - "GlobalProducer", "StreamProducer", "StreamInstanceProducer", "StreamSynchronizingProducer", + for name in ["ESProducerA", "ESProducerB", "ESProducerC", "ESProducerD", "ESProducerE", + "ESProducerNull", + "GlobalProducer", "GlobalProducerE", + "StreamProducer", "StreamInstanceProducer", "StreamSynchronizingProducer", "NullESConsumer"]: mod = getattr(process, "alpaka"+name) mod.alpaka = cms.untracked.PSet(backend = cms.untracked.string(args.moduleBackend)) @@ -131,6 +141,8 @@ def setExpect(m, size): m.expectSize = size m.expectBackend = "CudaAsync" setExpect(process.alpakaGlobalConsumer, size=20) + setExpect(process.alpakaGlobalConsumerE, size=20) + process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(20-10)) setExpect(process.alpakaStreamConsumer, size=25) setExpect(process.alpakaStreamInstanceConsumer, size=36) setExpect(process.alpakaStreamSynchronizingConsumer, size=20) @@ -139,6 +151,8 @@ def setExpect(m, size): m.expectSize = size m.expectBackend = "ROCmAsync" setExpect(process.alpakaGlobalConsumer, size = 30) + setExpect(process.alpakaGlobalConsumerE, size = 30) + process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(30-10)) setExpect(process.alpakaStreamConsumer, size = 125) setExpect(process.alpakaStreamInstanceConsumer, size = 216) setExpect(process.alpakaStreamSynchronizingConsumer, size = 30) @@ -156,12 +170,14 @@ def setExpect(m, size): process.t = cms.Task( process.intProduct, process.alpakaGlobalProducer, + process.alpakaGlobalProducerE, process.alpakaStreamProducer, process.alpakaStreamInstanceProducer, process.alpakaStreamSynchronizingProducer ) process.p = cms.Path( process.alpakaGlobalConsumer+ + process.alpakaGlobalConsumerE+ process.alpakaStreamConsumer+ process.alpakaStreamInstanceConsumer+ process.alpakaStreamSynchronizingConsumer+ diff --git a/IOMC/RandomEngine/test/unit_test_outputs/testMultiStreamDump.txt b/IOMC/RandomEngine/test/unit_test_outputs/testMultiStreamDump.txt index af396cbdeab39..5fb08c30c8f5e 100644 --- a/IOMC/RandomEngine/test/unit_test_outputs/testMultiStreamDump.txt +++ b/IOMC/RandomEngine/test/unit_test_outputs/testMultiStreamDump.txt @@ -3,11 +3,11 @@ RandomNumberGeneratorService dump Contents of seedsAndNameMap (label moduleID engineType seeds) - t1 4 HepJamesRandom 81 - t2 5 RanecuEngine 1 2 - t3 6 TRandom3 83 - t4 7 HepJamesRandom 84 - t6 8 MixMaxRng 85 + t1 3 HepJamesRandom 81 + t2 4 RanecuEngine 1 2 + t3 5 TRandom3 83 + t4 6 HepJamesRandom 84 + t6 7 MixMaxRng 85 nStreams_ = 3 saveFileName_ = StashStateStream.data saveFileNameRecorded_ = 0 diff --git a/IOMC/RandomEngine/test/unit_test_outputs/testRandomService1Dump.txt b/IOMC/RandomEngine/test/unit_test_outputs/testRandomService1Dump.txt index 5637951fbf9e6..cd5818d5fea34 100644 --- a/IOMC/RandomEngine/test/unit_test_outputs/testRandomService1Dump.txt +++ b/IOMC/RandomEngine/test/unit_test_outputs/testRandomService1Dump.txt @@ -3,11 +3,11 @@ RandomNumberGeneratorService dump Contents of seedsAndNameMap (label moduleID engineType seeds) - t1 4 HepJamesRandom 81 - t2 5 RanecuEngine 1 2 - t3 6 TRandom3 83 - t4 7 HepJamesRandom 84 - t6 8 MixMaxRng 85 + t1 3 HepJamesRandom 81 + t2 4 RanecuEngine 1 2 + t3 5 TRandom3 83 + t4 6 HepJamesRandom 84 + t6 7 MixMaxRng 85 nStreams_ = 1 saveFileName_ = StashState1.data saveFileNameRecorded_ = 0 diff --git a/IOPool/Input/src/OneLumiPoolSource.cc b/IOPool/Input/src/OneLumiPoolSource.cc index 77512503cfbde..8a33b257b9640 100644 --- a/IOPool/Input/src/OneLumiPoolSource.cc +++ b/IOPool/Input/src/OneLumiPoolSource.cc @@ -15,7 +15,7 @@ namespace edm { explicit OneLumiPoolSource(ParameterSet const& pset, InputSourceDescription const& desc); private: - ItemType getNextItemType() override; + ItemTypeInfo getNextItemType() override; std::shared_ptr readLuminosityBlockAuxiliary_() override; void readEvent_(EventPrincipal& eventPrincipal) override { @@ -37,9 +37,9 @@ namespace edm { return ret; } - InputSource::ItemType OneLumiPoolSource::getNextItemType() { + InputSource::ItemTypeInfo OneLumiPoolSource::getNextItemType() { auto type = PoolSource::getNextItemType(); - if (type == IsLumi) { + if (type == ItemType::IsLumi) { if (seenFirstLumi_) { do { edm::HistoryAppender historyAppender; @@ -50,7 +50,7 @@ namespace edm { LuminosityBlockPrincipal temp(prodReg, procConfig, &historyAppender, 0); readLuminosityBlock_(temp); type = PoolSource::getNextItemType(); - } while (type == IsLumi); + } while (type == ItemType::IsLumi); } else { seenFirstLumi_ = true; } diff --git a/IOPool/Input/src/PoolSource.cc b/IOPool/Input/src/PoolSource.cc index 9bd2cb393c848..6996f17d0c637 100644 --- a/IOPool/Input/src/PoolSource.cc +++ b/IOPool/Input/src/PoolSource.cc @@ -260,15 +260,15 @@ namespace edm { return true; } - InputSource::ItemType PoolSource::getNextItemType() { + InputSource::ItemTypeInfo PoolSource::getNextItemType() { RunNumber_t run = IndexIntoFile::invalidRun; LuminosityBlockNumber_t lumi = IndexIntoFile::invalidLumi; EventNumber_t event = IndexIntoFile::invalidEvent; InputSource::ItemType itemType = primaryFileSequence_->getNextItemType(run, lumi, event); - if (secondaryFileSequence_ && (IsSynchronize != state())) { - if (itemType == IsRun || itemType == IsLumi || itemType == IsEvent) { + if (secondaryFileSequence_ && (ItemType::IsSynchronize != state())) { + if (itemType == ItemType::IsRun || itemType == ItemType::IsLumi || itemType == ItemType::IsEvent) { if (!secondaryFileSequence_->containedInCurrentFile(run, lumi, event)) { - return IsSynchronize; + return ItemType::IsSynchronize; } } } diff --git a/IOPool/Input/src/PoolSource.h b/IOPool/Input/src/PoolSource.h index ed7deb115f91f..48560338f867d 100644 --- a/IOPool/Input/src/PoolSource.h +++ b/IOPool/Input/src/PoolSource.h @@ -49,7 +49,7 @@ namespace edm { static void fillDescriptions(ConfigurationDescriptions& descriptions); protected: - ItemType getNextItemType() override; + ItemTypeInfo getNextItemType() override; void readLuminosityBlock_(LuminosityBlockPrincipal& lumiPrincipal) override; std::shared_ptr readLuminosityBlockAuxiliary_() override; void readEvent_(EventPrincipal& eventPrincipal) override; diff --git a/IOPool/Input/src/RepeatingCachedRootSource.cc b/IOPool/Input/src/RepeatingCachedRootSource.cc index f85866180de1b..7b92607e46125 100644 --- a/IOPool/Input/src/RepeatingCachedRootSource.cc +++ b/IOPool/Input/src/RepeatingCachedRootSource.cc @@ -112,7 +112,7 @@ namespace edm { }; protected: - ItemType getNextItemType() override; + ItemTypeInfo getNextItemType() override; void readLuminosityBlock_(LuminosityBlockPrincipal& lumiPrincipal) override; std::shared_ptr readLuminosityBlockAuxiliary_() override; void readEvent_(EventPrincipal& eventPrincipal) override; @@ -153,7 +153,7 @@ namespace edm { std::map productIDToWrapperIndex_; std::vector streamToCacheIndex_; size_t nextEventIndex_ = 0; - ItemType presentState_ = IsFile; + ItemType presentState_ = ItemType::IsFile; unsigned long long eventIndex_ = 0; }; } // namespace edm @@ -344,17 +344,17 @@ std::shared_ptr RepeatingCachedRootSource::getProduct(unsigned int return cachedWrappers_[streamToCacheIndex_[iStreamIndex]][branchIDToWrapperIndex_.find(k)->second]; } -RepeatingCachedRootSource::ItemType RepeatingCachedRootSource::getNextItemType() { +RepeatingCachedRootSource::ItemTypeInfo RepeatingCachedRootSource::getNextItemType() { auto v = presentState_; switch (presentState_) { - case IsFile: - presentState_ = IsRun; + case ItemType::IsFile: + presentState_ = ItemType::IsRun; break; - case IsRun: - presentState_ = IsLumi; + case ItemType::IsRun: + presentState_ = ItemType::IsLumi; break; - case IsLumi: - presentState_ = IsEvent; + case ItemType::IsLumi: + presentState_ = ItemType::IsEvent; break; default: break; diff --git a/IOPool/Input/src/RootPrimaryFileSequence.cc b/IOPool/Input/src/RootPrimaryFileSequence.cc index 2f29dc762538a..07e0255bc0129 100644 --- a/IOPool/Input/src/RootPrimaryFileSequence.cc +++ b/IOPool/Input/src/RootPrimaryFileSequence.cc @@ -226,31 +226,31 @@ namespace edm { return true; } - InputSource::ItemType RootPrimaryFileSequence::getNextItemType(RunNumber_t& run, - LuminosityBlockNumber_t& lumi, - EventNumber_t& event) { + InputSource::ItemTypeInfo RootPrimaryFileSequence::getNextItemType(RunNumber_t& run, + LuminosityBlockNumber_t& lumi, + EventNumber_t& event) { if (noMoreFiles() || skipToStop_) { skipToStop_ = false; - return InputSource::IsStop; + return InputSource::ItemType::IsStop; } if (firstFile_ || goToEventInNewFile_ || skipIntoNewFile_) { - return InputSource::IsFile; + return InputSource::ItemType::IsFile; } if (rootFile()) { IndexIntoFile::EntryType entryType = rootFile()->getNextItemType(run, lumi, event); if (entryType == IndexIntoFile::kEvent) { - return InputSource::IsEvent; + return InputSource::ItemType::IsEvent; } else if (entryType == IndexIntoFile::kLumi) { - return InputSource::IsLumi; + return InputSource::ItemType::IsLumi; } else if (entryType == IndexIntoFile::kRun) { - return InputSource::IsRun; + return InputSource::ItemType::IsRun; } assert(entryType == IndexIntoFile::kEnd); } if (atLastFile()) { - return InputSource::IsStop; + return InputSource::ItemType::IsStop; } - return InputSource::IsFile; + return InputSource::ItemType::IsFile; } // Rewind to before the first event that was read. diff --git a/IOPool/Input/src/RootPrimaryFileSequence.h b/IOPool/Input/src/RootPrimaryFileSequence.h index 75bc262b19c48..aba1fc99cd2fd 100644 --- a/IOPool/Input/src/RootPrimaryFileSequence.h +++ b/IOPool/Input/src/RootPrimaryFileSequence.h @@ -41,7 +41,7 @@ namespace edm { std::shared_ptr readFile_(); void endJob(); - InputSource::ItemType getNextItemType(RunNumber_t& run, LuminosityBlockNumber_t& lumi, EventNumber_t& event); + InputSource::ItemTypeInfo getNextItemType(RunNumber_t& run, LuminosityBlockNumber_t& lumi, EventNumber_t& event); void skipEventsAtBeginning(int offset); void skipEvents(int offset); bool goToEvent(EventID const& eventID); diff --git a/IOPool/Input/src/RunHelper.cc b/IOPool/Input/src/RunHelper.cc index 8537f2165e380..cf1cfbeb76087 100644 --- a/IOPool/Input/src/RunHelper.cc +++ b/IOPool/Input/src/RunHelper.cc @@ -106,8 +106,8 @@ namespace edm { RunNumber_t, LuminosityBlockNumber_t, EventNumber_t) { - if (newItemType == InputSource::IsRun || - (newItemType == InputSource::IsLumi && previousItemType != InputSource::IsRun)) { + if (newItemType == InputSource::ItemType::IsRun || + (newItemType == InputSource::ItemType::IsLumi && previousItemType != InputSource::ItemType::IsRun)) { if (firstTime_) { firstTime_ = false; } else { @@ -125,8 +125,8 @@ namespace edm { } bool sameRunNumber = (indexOfNextRunNumber_ != 0U && run == setRunNumberForEachLumi_[indexOfNextRunNumber_ - 1]); if (!sameRunNumber) { - fakeNewRun_ = (newItemType != InputSource::IsRun); - return InputSource::IsRun; + fakeNewRun_ = (newItemType != InputSource::ItemType::IsRun); + return InputSource::ItemType::IsRun; } } return newItemType; @@ -174,7 +174,7 @@ namespace edm { RunNumber_t, LuminosityBlockNumber_t iLumi, EventNumber_t) { - if (newItemType == InputSource::IsLumi && previousItemType != InputSource::IsRun) { + if (newItemType == InputSource::ItemType::IsLumi && previousItemType != InputSource::ItemType::IsRun) { auto run = findRunFromLumi(iLumi); if (run == 0) { throw Exception(errors::Configuration, "PoolSource") @@ -183,7 +183,7 @@ namespace edm { if (lastUsedRunNumber_ != run) { fakeNewRun_ = true; lastUsedRunNumber_ = run; - return InputSource::IsRun; + return InputSource::ItemType::IsRun; } } return newItemType; diff --git a/IOPool/Input/test/testSchemaEvolution.sh b/IOPool/Input/test/testSchemaEvolution.sh index 237bfa639fcad..faaa577f133fe 100755 --- a/IOPool/Input/test/testSchemaEvolution.sh +++ b/IOPool/Input/test/testSchemaEvolution.sh @@ -1,4 +1,4 @@ -#!/bin/sh -x +#!/bin/sh function die { echo $1: status $2 ; exit $2; } @@ -91,6 +91,28 @@ cmsRun ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile "$inputfil file=SchemaEvolutionTestOLD13_0_0.root inputfile=$(edmFileInPath IOPool/Input/data/$file) || die "Failure edmFileInPath IOPool/Input/data/$file" $? + +# The next test demonstrates the FileReadError that can occur as a +# result of the known ROOT bug in 13_0_0 (file has a problem when +# written with 13_0_0 that causes an exception when read). +# Note that this is also used to test the cmsRun exit code +# after a FileReadError (should be 8021). It is very convenient +# to test that here because it is hard to intentionally create +# a file that will cause a FileReadError. So we take advantage +# of the ROOT bug to implement the test. This bug actually +# occurred, see Issue 42179 for details. +echo "***" +echo "***" +echo "Exception in next test is INTENTIONAL. Test fails if not thrown or cmsRun returns wrong exit code" +echo "***" +echo "***" +cmsRun -j FileReadErrorTest_jobreport.xml ${LOCAL_TEST_DIR}/SchemaEvolution_test_read_cfg.py --inputFile $inputfile && die 'SchemaEvolution_test_read_cfg.py with corrupt input did not throw an exception' 1 +CMSRUN_EXIT_CODE=$(edmFjrDump --exitCode FileReadErrorTest_jobreport.xml) +if [ "x${CMSRUN_EXIT_CODE}" != "x8021" ]; then + echo "cmsRun reported exit code ${CMSRUN_EXIT_CODE} which is different from the expected 8021 (FileReadError)" + exit 1 +fi + # The test below would fail without the "--enableStreamerInfosFix" # because there was a bug in the version of ROOT associated with CMSSW_13_0_0. # The bug caused StreamerInfo objects to be missing from the ROOT file. In this case, diff --git a/IOPool/Streamer/src/StreamerOutputModuleCommon.cc b/IOPool/Streamer/src/StreamerOutputModuleCommon.cc index 76ae5e72ed480..bc79452fcc75e 100644 --- a/IOPool/Streamer/src/StreamerOutputModuleCommon.cc +++ b/IOPool/Streamer/src/StreamerOutputModuleCommon.cc @@ -227,18 +227,15 @@ namespace edm { std::vector hltbits; setHltMask(e, triggerResults, hltbits); - uint32 lumi; - if (lumiSectionInterval_ == 0) { - lumi = e.luminosityBlock(); - } else { + uint32 lumi = e.luminosityBlock(); + if (lumiSectionInterval_ != 0) { struct timeval now; struct timezone dummyTZ; gettimeofday(&now, &dummyTZ); double timeInSec = static_cast(now.tv_sec) + (static_cast(now.tv_usec) / 1000000.0) - timeInSecSinceUTC; // what about overflows? - if (lumiSectionInterval_ > 0) - lumi = static_cast(timeInSec / lumiSectionInterval_) + 1; + lumi = static_cast(timeInSec / std::abs(lumiSectionInterval_)) + 1; } serializer_.serializeEvent(sbuf, e, selectorCfg, compressionAlgo_, compressionLevel_, reserve_size); diff --git a/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py b/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py index 6399f341f7984..80ad9390f2292 100644 --- a/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py +++ b/L1Trigger/Configuration/python/L1Trigger_EventContent_cff.py @@ -197,10 +197,10 @@ def _appendPhase2Digis(obj): 'keep *_l1tPFClustersFromHGC3DClusters_*_*', 'keep *_l1tPFTracksFromL1TracksBarrel_*_*', 'keep *_l1tPFTracksFromL1TracksHGCal_*_*', - 'keep *_l1tSCPFL1PuppiCorrectedEmulator_*_*', - 'keep *_l1tSCPFL1PuppiCorrectedEmulatorMHT_*_*', - 'keep *_l1tSCPFL1PuppiExtendedCorrectedEmulator_*_*', - 'keep *_l1tSCPFL1PuppiExtendedCorrectedEmulatorMHT_*_*', + 'keep *_l1tSC4PFL1PuppiCorrectedEmulator_*_*', + 'keep *_l1tSC4PFL1PuppiCorrectedEmulatorMHT_*_*', + 'keep *_l1tSC4PFL1PuppiExtendedCorrectedEmulator_*_*', + 'keep *_l1tSC4PFL1PuppiExtendedCorrectedEmulatorMHT_*_*', 'keep *_l1tPhase1JetProducer9x9_*_*', 'keep *_l1tPhase1JetCalibrator9x9_*_*', 'keep *_l1tPhase1JetSumsProducer9x9_*_*', diff --git a/L1Trigger/Configuration/python/SimL1CaloEmulator_cff.py b/L1Trigger/Configuration/python/SimL1CaloEmulator_cff.py index 995584b92bc09..bd7d4e337dddc 100644 --- a/L1Trigger/Configuration/python/SimL1CaloEmulator_cff.py +++ b/L1Trigger/Configuration/python/SimL1CaloEmulator_cff.py @@ -4,7 +4,3 @@ # define a core which can be extended in customizations: SimL1CaloEmulator = cms.Sequence( SimL1TCalorimeter ) - -# Emulators are configured from DB (GlobalTags) -# but in the integration branch conffigure from static hackConditions -from L1Trigger.L1TCalorimeter.hackConditions_cff import * diff --git a/L1Trigger/Configuration/python/customiseSettings.py b/L1Trigger/Configuration/python/customiseSettings.py index 5aa071788bfe2..bb253774c073b 100644 --- a/L1Trigger/Configuration/python/customiseSettings.py +++ b/L1Trigger/Configuration/python/customiseSettings.py @@ -2,6 +2,14 @@ import os.path import FWCore.ParameterSet.Config as cms +def L1TSettingsToCaloParamsHI_2023_v0_4_3(process): + process.load("L1Trigger.L1TCalorimeter.caloParamsHI_2023_v0_4_3_cfi") + return process + +def L1TSettingsToCaloParamsHI_2023_v0_4_2(process): + process.load("L1Trigger.L1TCalorimeter.caloParamsHI_2023_v0_4_2_cfi") + return process + def L1TSettingsToCaloParamsHI_2023_v0_4_1(process): process.load("L1Trigger.L1TCalorimeter.caloParamsHI_2023_v0_4_1_cfi") return process diff --git a/L1Trigger/DTTriggerPhase2/src/GlobalCoordsObtainer.cc b/L1Trigger/DTTriggerPhase2/src/GlobalCoordsObtainer.cc index 1376d4c6e40c0..2446d50745a07 100644 --- a/L1Trigger/DTTriggerPhase2/src/GlobalCoordsObtainer.cc +++ b/L1Trigger/DTTriggerPhase2/src/GlobalCoordsObtainer.cc @@ -224,12 +224,6 @@ std::vector GlobalCoordsObtainer::get_global_coordinates(uint32_t chid, int tanpsi_msb = tanpsi >> (TANPSI_SIZE - PHIB_LUT_ADDR_WIDTH); tanpsi_msb = from_two_comp(tanpsi_msb, PHIB_LUT_ADDR_WIDTH); - x_msb = x >> (X_SIZE - PHI_LUT_ADDR_WIDTH); - x_msb = from_two_comp(x_msb, PHI_LUT_ADDR_WIDTH); - - tanpsi_msb = tanpsi >> (TANPSI_SIZE - PHIB_LUT_ADDR_WIDTH); - tanpsi_msb = from_two_comp(tanpsi_msb, PHIB_LUT_ADDR_WIDTH); - // The LSB part can be sliced right away because it must yield a positive integer int x_lsb = x & (int)(std::pow(2, (X_SIZE - PHI_LUT_ADDR_WIDTH)) - 1); int tanpsi_lsb = tanpsi & (int)(std::pow(2, (TANPSI_SIZE - PHIB_LUT_ADDR_WIDTH)) - 1); @@ -261,4 +255,4 @@ std::vector GlobalCoordsObtainer::get_global_coordinates(uint32_t chid, double phib_f = (double)phib / pow(2, PHIB_SIZE); return std::vector({phi_f, phib_f}); -} \ No newline at end of file +} diff --git a/L1Trigger/DTTriggerPhase2/src/MuonPathAnalyzerInChamber.cc b/L1Trigger/DTTriggerPhase2/src/MuonPathAnalyzerInChamber.cc index abae4a2af3108..3df9e90d545d8 100644 --- a/L1Trigger/DTTriggerPhase2/src/MuonPathAnalyzerInChamber.cc +++ b/L1Trigger/DTTriggerPhase2/src/MuonPathAnalyzerInChamber.cc @@ -1,4 +1,5 @@ #include "L1Trigger/DTTriggerPhase2/interface/MuonPathAnalyzerInChamber.h" +#include "FWCore/Utilities/interface/isFinite.h" #include #include @@ -242,7 +243,7 @@ void MuonPathAnalyzerInChamber::analyze(MuonPathPtr &inMPath, MuonPathPtrs &outM } // Protection against non-converged fits - if (isnan(jm_x)) + if (edm::isNotFinite(jm_x)) continue; // Updating muon-path horizontal position diff --git a/L1Trigger/DemonstratorTools/test/gtt/createFirmwareInputFiles_cfg.py b/L1Trigger/DemonstratorTools/test/gtt/createFirmwareInputFiles_cfg.py index 0e12824e33e3b..293efb9de91e4 100644 --- a/L1Trigger/DemonstratorTools/test/gtt/createFirmwareInputFiles_cfg.py +++ b/L1Trigger/DemonstratorTools/test/gtt/createFirmwareInputFiles_cfg.py @@ -89,6 +89,7 @@ nStubsMin = cms.int32(4), # number of stubs must be greater than or equal to this value nPSStubsMin = cms.int32(0), # the number of stubs in the PS Modules must be greater than or equal to this value + promptMVAMin = cms.double(-1.0), # MVA must be greater than this value reducedBendChi2Max = cms.double(2.25), # bend chi2 must be less than this value reducedChi2RZMax = cms.double(5.0), # chi2rz/dof must be less than this value reducedChi2RPhiMax = cms.double(20.0), # chi2rphi/dof must be less than this value @@ -104,12 +105,7 @@ #Disable internal track selection #There is a problem with setting all of these (especially eta) to high numbers. -process.l1tTrackJetsEmulation.MaxDzTrackPV = cms.double(10000.0) process.l1tTrackJetsEmulation.trk_zMax = cms.double(20.46912512) # maximum track z from TrackWord -process.l1tTrackJetsEmulation.nStubs4PromptChi2=cms.double(10000.0) #Prompt track quality flags for loose/tight -process.l1tTrackJetsEmulation.nStubs4PromptBend=cms.double(10000.0) -process.l1tTrackJetsEmulation.nStubs5PromptChi2=cms.double(10000.0) -process.l1tTrackJetsEmulation.nStubs5PromptBend=cms.double(10000.0) if options.debug: process.MessageLogger.cerr.INFO.limit = cms.untracked.int32(1000000000) diff --git a/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloEGammaUtils.h b/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloEGammaUtils.h index b7cc986694ee8..97c2eeb25c446 100644 --- a/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloEGammaUtils.h +++ b/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloEGammaUtils.h @@ -60,7 +60,7 @@ namespace p2eg { static constexpr float e0_looseTkss = 0.944, e1_looseTkss = 0.65, e2_looseTkss = 0.4; // passes_looseTkss static constexpr float cut_500_MeV = 0.5; - static constexpr float ECAL_LSB = 0.125; // to convert from int to float (GeV) multiply by LSB + static constexpr float ECAL_LSB = 0.5; // to convert from int to float (GeV) multiply by LSB static constexpr float HCAL_LSB = 0.5; static constexpr int N_CLUSTERS_PER_REGION = 4; // number of clusters per ECAL region @@ -434,10 +434,22 @@ namespace p2eg { class towerHCAL { private: - ap_uint<10> et = 0; - ap_uint<6> fb = 0; + ap_uint<10> et; + ap_uint<6> fb; public: + // constructor + towerHCAL() { + et = 0; + fb = 0; + }; + + // copy constructor + towerHCAL(const towerHCAL& other) { + et = other.et; + fb = other.fb; + }; + // set members inline void zeroOut() { et = 0; @@ -474,12 +486,6 @@ namespace p2eg { }; }; - // overload operator= to use copy constructor - towers3x4 operator=(const towers3x4& other) { - const towers3x4& newRegion(other); - return newRegion; - }; - // set members inline void zeroOut() { for (int i = 0; i < TOWER_IN_ETA; i++) { @@ -591,9 +597,22 @@ namespace p2eg { */ class crystalMax { public: - ap_uint<10> energy = 0; - uint8_t phiMax = 0; - uint8_t etaMax = 0; + ap_uint<10> energy; + uint8_t phiMax; + uint8_t etaMax; + + crystalMax() { + energy = 0; + phiMax = 0; + etaMax = 0; + } + + crystalMax& operator=(const crystalMax& rhs) { + energy = rhs.energy; + phiMax = rhs.phiMax; + etaMax = rhs.etaMax; + return *this; + } }; class ecaltp_t { @@ -667,9 +686,14 @@ namespace p2eg { class tower_t { public: - ap_uint<16> data = 0; + ap_uint<16> data; + + tower_t() { data = 0; } + tower_t& operator=(const tower_t& rhs) { + data = rhs.data; + return *this; + } - tower_t() = default; tower_t(ap_uint<12> et, ap_uint<4> hoe) { data = (et) | (((ap_uint<16>)hoe) << 12); } ap_uint<12> et() { return (data & 0xFFF); } @@ -685,7 +709,7 @@ namespace p2eg { float newEt = getEt() * factor; // Convert the new pT to an unsigned int (16 bits so we can take the logical OR with the bit mask later) - ap_uint<16> newEt_uint = (ap_uint<16>)(int)(newEt * 8.0); + ap_uint<16> newEt_uint = (ap_uint<16>)(int)(newEt / ECAL_LSB); // Make sure the first four bits are zero newEt_uint = (newEt_uint & 0x0FFF); @@ -697,9 +721,7 @@ namespace p2eg { /* * For towers: Calculate H/E ratio given the ECAL and HCAL energies and modify the hoe() value. */ - void getHoverE(ap_uint<12> ECAL, ap_uint<12> HCAL_inHcalConvention) { - // Convert HCAL ET to ECAL ET convention - ap_uint<12> HCAL = convertHcalETtoEcalET(HCAL_inHcalConvention); + void addHoverEToTower(ap_uint<12> ECAL, ap_uint<12> HCAL) { ap_uint<4> hoeOut; ap_uint<1> hoeLSB = 0; ap_uint<4> hoe = 0; @@ -741,13 +763,34 @@ namespace p2eg { class clusterInfo { public: - ap_uint<10> seedEnergy = 0; - ap_uint<15> energy = 0; - ap_uint<15> et5x5 = 0; - ap_uint<15> et2x5 = 0; - ap_uint<5> phiMax = 0; - ap_uint<5> etaMax = 0; - ap_uint<2> brems = 0; + ap_uint<10> seedEnergy; + ap_uint<15> energy; + ap_uint<15> et5x5; + ap_uint<15> et2x5; + ap_uint<5> phiMax; + ap_uint<5> etaMax; + ap_uint<2> brems; + + clusterInfo() { + seedEnergy = 0; + energy = 0; + et5x5 = 0; + et2x5 = 0; + phiMax = 0; + etaMax = 0; + brems = 0; + } + + clusterInfo& operator=(const clusterInfo& rhs) { + seedEnergy = rhs.seedEnergy; + energy = rhs.energy; + et5x5 = rhs.et5x5; + et2x5 = rhs.et2x5; + phiMax = rhs.phiMax; + etaMax = rhs.etaMax; + brems = rhs.brems; + return *this; + } }; //--------------------------------------------------------// @@ -808,6 +851,20 @@ namespace p2eg { is_looseTkiso = cluster_is_looseTkiso; } + Cluster& operator=(const Cluster& rhs) { + data = rhs.data; + regionIdx = rhs.regionIdx; + calib = rhs.calib; + brems = rhs.brems; + et5x5 = rhs.et5x5; + et2x5 = rhs.et2x5; + is_ss = rhs.is_ss; + is_looseTkss = rhs.is_looseTkss; + is_iso = rhs.is_iso; + is_looseTkiso = rhs.is_looseTkiso; + return *this; + } + void setRegionIdx(int regIdx) { regionIdx = regIdx; } // Newly added ap_uint<12> clusterEnergy() const { return (data & 0xFFF); } @@ -1438,6 +1495,7 @@ namespace p2eg { l1tp2::CaloTower l1CaloTower; // Store total Et (HCAL+ECAL) in the ECAL Et member l1CaloTower.setEcalTowerEt(totalEtFloat()); + l1CaloTower.setHcalTowerEt(ecalEtFloat()); int global_tower_iEta = globalToweriEtaFromGCTcardiEta(gctCard_tower_iEta); int global_tower_iPhi = globalToweriPhiFromGCTcardiPhi(nGCTCard, gctCard_tower_iPhi); l1CaloTower.setTowerIEta(global_tower_iEta); diff --git a/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloJetEmulator.h b/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloJetEmulator.h index 4ccf93df4efec..01524d813b7d2 100644 --- a/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloJetEmulator.h +++ b/L1Trigger/L1CaloTrigger/interface/Phase2L1CaloJetEmulator.h @@ -38,18 +38,6 @@ namespace gctobj { phiCenter = 0; etaCenter = 0; } - - towerMax& operator=(const towerMax& rhs) { - energy = rhs.energy; - phi = rhs.phi; - eta = rhs.eta; - energyMax = rhs.energyMax; - phiMax = rhs.phiMax; - etaMax = rhs.etaMax; - phiCenter = rhs.phiCenter; - etaCenter = rhs.etaCenter; - return *this; - } }; class jetInfo { @@ -77,20 +65,6 @@ namespace gctobj { phiCenter = 0; etaCenter = 0; } - - jetInfo& operator=(const jetInfo& rhs) { - seedEnergy = rhs.seedEnergy; - energy = rhs.energy; - tauEt = rhs.tauEt; - phi = rhs.phi; - eta = rhs.eta; - energyMax = rhs.energyMax; - phiMax = rhs.phiMax; - etaMax = rhs.etaMax; - phiCenter = rhs.phiCenter; - etaCenter = rhs.etaCenter; - return *this; - } }; typedef struct { @@ -482,7 +456,7 @@ namespace gctobj { jet_tmp.tauEt = 0.; } jet_tmp.etaCenter = jet.etaCenter; // this is the ET weighted eta centre of the ST - jet_tmp.phiCenter = jet.phiCenter; // this is the ET weighted eta centre of the ST + jet_tmp.phiCenter = jet.phiCenter; // this is the ET weighted phi centre of the ST jet_tmp.etaMax = jet.etaMax; // this is the leading tower eta in the ST jet_tmp.phiMax = jet.phiMax; // this is the leading tower phi in the ST return jet_tmp; diff --git a/L1Trigger/L1CaloTrigger/interface/Phase2L1GCT.h b/L1Trigger/L1CaloTrigger/interface/Phase2L1GCT.h index 7751a9e3c0c81..2f28a4cf35566 100644 --- a/L1Trigger/L1CaloTrigger/interface/Phase2L1GCT.h +++ b/L1Trigger/L1CaloTrigger/interface/Phase2L1GCT.h @@ -240,7 +240,6 @@ inline p2eg::GCTinternal_t p2eg::getClustersTowers(const p2eg::GCTcard_t& GCTcar */ inline p2eg::GCTintTowers_t p2eg::getFullTowers(const p2eg::GCTinternal_t& GCTinternal) { p2eg::GCTintTowers_t GCTintTowers; - // Positive eta for (int i = 0; i < p2eg::N_GCTPOSITIVE_FIBERS; i = i + 4) { for (int i1 = 0; i1 < 4; i1++) { @@ -249,6 +248,8 @@ inline p2eg::GCTintTowers_t p2eg::getFullTowers(const p2eg::GCTinternal_t& GCTin ap_uint<15> eta = p2eg::N_GCTETA / 2 + k; GCTintTowers.GCTtower[eta][phi].et = GCTinternal.GCTCorrfiber[phi].GCTtowers[k].et; GCTintTowers.GCTtower[eta][phi].hoe = GCTinternal.GCTCorrfiber[phi].GCTtowers[k].hoe; + GCTintTowers.GCTtower[eta][phi].ecalEt = GCTinternal.GCTCorrfiber[phi].GCTtowers[k].ecalEt; + GCTintTowers.GCTtower[eta][phi].hcalEt = GCTinternal.GCTCorrfiber[phi].GCTtowers[k].hcalEt; for (int ic1 = 0; ic1 < 4; ic1++) { for (int jc = 0; jc < p2eg::N_GCTCLUSTERS_FIBER; jc++) { ap_uint<15> eta1 = p2eg::N_GCTETA / 2 + GCTinternal.GCTCorrfiber[i + ic1].GCTclusters[jc].towEta; @@ -271,6 +272,8 @@ inline p2eg::GCTintTowers_t p2eg::getFullTowers(const p2eg::GCTinternal_t& GCTin ap_uint<15> phi = i + i1 - p2eg::N_GCTPOSITIVE_FIBERS; GCTintTowers.GCTtower[eta][phi].et = GCTinternal.GCTCorrfiber[i + i1].GCTtowers[k].et; GCTintTowers.GCTtower[eta][phi].hoe = GCTinternal.GCTCorrfiber[i + i1].GCTtowers[k].hoe; + GCTintTowers.GCTtower[eta][phi].ecalEt = GCTinternal.GCTCorrfiber[i + i1].GCTtowers[k].ecalEt; + GCTintTowers.GCTtower[eta][phi].hcalEt = GCTinternal.GCTCorrfiber[i + i1].GCTtowers[k].hcalEt; for (int ic1 = 0; ic1 < 4; ic1++) { for (int jc = 0; jc < p2eg::N_GCTCLUSTERS_FIBER; jc++) { ap_uint<15> eta1 = p2eg::N_GCTETA / 2 - 1 - GCTinternal.GCTCorrfiber[i + ic1].GCTclusters[jc].towEta; diff --git a/L1Trigger/L1CaloTrigger/interface/Phase2L1RCT.h b/L1Trigger/L1CaloTrigger/interface/Phase2L1RCT.h index 43547af9d0bd8..02a3fb47e375f 100644 --- a/L1Trigger/L1CaloTrigger/interface/Phase2L1RCT.h +++ b/L1Trigger/L1CaloTrigger/interface/Phase2L1RCT.h @@ -1036,18 +1036,15 @@ inline void p2eg::getECALTowersEt(p2eg::crystal tempX[p2eg::CRYSTAL_IN_ETA][p2eg } } - towerEt[0] = towerEtN[0][0][0] + towerEtN[0][0][1] + towerEtN[0][0][2] + towerEtN[0][0][3] + towerEtN[0][0][4]; - towerEt[1] = towerEtN[0][1][0] + towerEtN[0][1][1] + towerEtN[0][1][2] + towerEtN[0][1][3] + towerEtN[0][1][4]; - towerEt[2] = towerEtN[0][2][0] + towerEtN[0][2][1] + towerEtN[0][2][2] + towerEtN[0][2][3] + towerEtN[0][2][4]; - towerEt[3] = towerEtN[0][3][0] + towerEtN[0][3][1] + towerEtN[0][3][2] + towerEtN[0][3][3] + towerEtN[0][3][4]; - towerEt[4] = towerEtN[1][0][0] + towerEtN[1][0][1] + towerEtN[1][0][2] + towerEtN[1][0][3] + towerEtN[1][0][4]; - towerEt[5] = towerEtN[1][1][0] + towerEtN[1][1][1] + towerEtN[1][1][2] + towerEtN[1][1][3] + towerEtN[1][1][4]; - towerEt[6] = towerEtN[1][2][0] + towerEtN[1][2][1] + towerEtN[1][2][2] + towerEtN[1][2][3] + towerEtN[1][2][4]; - towerEt[7] = towerEtN[1][3][0] + towerEtN[1][3][1] + towerEtN[1][3][2] + towerEtN[1][3][3] + towerEtN[1][3][4]; - towerEt[8] = towerEtN[2][0][0] + towerEtN[2][0][1] + towerEtN[2][0][2] + towerEtN[2][0][3] + towerEtN[2][0][4]; - towerEt[9] = towerEtN[2][1][0] + towerEtN[2][1][1] + towerEtN[2][1][2] + towerEtN[2][1][3] + towerEtN[2][1][4]; - towerEt[10] = towerEtN[2][2][0] + towerEtN[2][2][1] + towerEtN[2][2][2] + towerEtN[2][2][3] + towerEtN[2][2][4]; - towerEt[11] = towerEtN[2][3][0] + towerEtN[2][3][1] + towerEtN[2][3][2] + towerEtN[2][3][3] + towerEtN[2][3][4]; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 4; j++) { + int index = j + 4 * i; + towerEt[index] = 0; + for (int k = 0; k < 5; k++) { + towerEt[index] += (towerEtN[i][j][k] >> 2); + } + } + } ap_uint<12> totalEt; for (int i = 0; i < 12; i++) { @@ -1226,7 +1223,7 @@ inline p2eg::clusterInfo p2eg::getBremsValuesPos(p2eg::crystal tempX[p2eg::CRYST for (int i = 0; i < 3; i++) { eta_slice[i] = phi0eta[i] + phi1eta[i] + phi2eta[i] + phi3eta[i] + phi4eta[i]; } - cluster_tmp.energy = (eta_slice[0] + eta_slice[1] + eta_slice[2]); + cluster_tmp.energy = (eta_slice[0] + eta_slice[1] + eta_slice[2]) >> 2; return cluster_tmp; } @@ -1301,7 +1298,7 @@ inline p2eg::clusterInfo p2eg::getBremsValuesNeg(p2eg::crystal tempX[p2eg::CRYST for (int i = 0; i < 3; i++) { eta_slice[i] = phi0eta[i] + phi1eta[i] + phi2eta[i] + phi3eta[i] + phi4eta[i]; } - cluster_tmp.energy = (eta_slice[0] + eta_slice[1] + eta_slice[2]); + cluster_tmp.energy = (eta_slice[0] + eta_slice[1] + eta_slice[2]) >> 2; return cluster_tmp; } @@ -1392,7 +1389,7 @@ inline p2eg::clusterInfo p2eg::getClusterValues(p2eg::crystal tempX[p2eg::CRYSTA eta_slice[i] = phi0eta[i] + phi1eta[i] + phi2eta[i] + phi3eta[i] + phi4eta[i]; } - cluster_tmp.energy = (eta_slice[1] + eta_slice[2] + eta_slice[3]); + cluster_tmp.energy = (eta_slice[1] + eta_slice[2] + eta_slice[3]) >> 2; // Get the energy totals in the 5x5 and also in two 2x5 et5x5Tot = (eta_slice[0] + eta_slice[1] + eta_slice[2] + eta_slice[3] + eta_slice[4]); @@ -1404,8 +1401,8 @@ inline p2eg::clusterInfo p2eg::getClusterValues(p2eg::crystal tempX[p2eg::CRYSTA else etSum2x5 = et2x5_2Tot; - cluster_tmp.et5x5 = et5x5Tot; - cluster_tmp.et2x5 = etSum2x5; + cluster_tmp.et5x5 = et5x5Tot >> 2; + cluster_tmp.et2x5 = etSum2x5 >> 2; return cluster_tmp; } @@ -1427,7 +1424,7 @@ inline p2eg::Cluster p2eg::getClusterFromRegion3x4(p2eg::crystal temp[p2eg::CRYS cluster_tmp = p2eg::getClusterPosition(ecalRegion); - float seedEnergyFloat = cluster_tmp.seedEnergy / 8.0; + float seedEnergyFloat = cluster_tmp.seedEnergy * ECAL_LSB; // Do not make cluster if seed is less than 1.0 GeV if (seedEnergyFloat < 1.0) { diff --git a/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloEGammaEmulator.cc b/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloEGammaEmulator.cc index 209b285f3fb29..999b208da8cde 100644 --- a/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloEGammaEmulator.cc +++ b/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloEGammaEmulator.cc @@ -134,8 +134,8 @@ void Phase2L1CaloEGammaEmulator::produce(edm::Event& iEvent, const edm::EventSet for (const auto& hit : *pcalohits.product()) { if (hit.encodedEt() > 0) // hit.encodedEt() returns an int corresponding to 2x the crystal Et { - // Et is 10 bit, by keeping the ADC saturation Et at 120 GeV it means that you have to divide by 8 - float et = hit.encodedEt() * p2eg::ECAL_LSB; + // Et is 10 bit, by keeping the ADC saturation Et at 120 GeV it means that you have to multiply by 0.125 (input LSB) + float et = hit.encodedEt() * 0.125; if (et < p2eg::cut_500_MeV) { continue; // Reject hits with < 500 MeV ET } @@ -332,8 +332,9 @@ void Phase2L1CaloEGammaEmulator::produce(edm::Event& iEvent, const edm::EventSet // Iteratively find four clusters and remove them from 'temporary' as we go, and fill cluster_list for (int c = 0; c < p2eg::N_CLUSTERS_PER_REGION; c++) { - p2eg::Cluster newCluster = p2eg::getClusterFromRegion3x4(temporary); // remove cluster from 'temporary' - newCluster.setRegionIdx(idxRegion); // add the region number + p2eg::Cluster newCluster = p2eg::getClusterFromRegion3x4( + temporary); // remove cluster from 'temporary', adjust for LSB 0.5 at GCT in getClusterValues + newCluster.setRegionIdx(idxRegion); // add the region number if (newCluster.clusterEnergy() > 0) { // do not push back 0-energy clusters cluster_list[cc].push_back(newCluster); @@ -342,7 +343,7 @@ void Phase2L1CaloEGammaEmulator::produce(edm::Event& iEvent, const edm::EventSet // Create towers using remaining ECAL energy, and the HCAL towers were already calculated in towersEtHCAL[12] ap_uint<12> towerEtECAL[12]; - p2eg::getECALTowersEt(temporary, towerEtECAL); + p2eg::getECALTowersEt(temporary, towerEtECAL); // adjust for LSB 0.5 at GCT // Fill towerHCALCard and towerECALCard arrays for (int i = 0; i < 12; i++) { @@ -440,7 +441,7 @@ void Phase2L1CaloEGammaEmulator::produce(edm::Event& iEvent, const edm::EventSet for (int jj = 0; jj < p2eg::n_towers_cardPhi; ++jj) { // 4 towers per card in phi ap_uint<12> ecalEt = towerECALCard[ii][jj][cc].et(); ap_uint<12> hcalEt = towerHCALCard[ii][jj][cc].et(); - towerECALCard[ii][jj][cc].getHoverE(ecalEt, hcalEt); + towerECALCard[ii][jj][cc].addHoverEToTower(ecalEt, hcalEt); } } diff --git a/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloJetEmulator.cc b/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloJetEmulator.cc index 1da6563b31ebe..089d630fa6fc3 100644 --- a/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloJetEmulator.cc +++ b/L1Trigger/L1CaloTrigger/plugins/Phase2L1CaloJetEmulator.cc @@ -47,6 +47,7 @@ #include #include #include +#include "TF1.h" // // class declaration @@ -61,12 +62,46 @@ class Phase2L1CaloJetEmulator : public edm::stream::EDProducer<> { private: void produce(edm::Event&, const edm::EventSetup&) override; + float get_jet_pt_calibration(const float& jet_pt, const float& jet_eta) const; + float get_tau_pt_calibration(const float& tau_pt, const float& tau_eta) const; // ----------member data --------------------------- edm::EDGetTokenT caloTowerToken_; edm::EDGetTokenT hgcalTowerToken_; edm::EDGetTokenT hfToken_; edm::ESGetToken decoderTag_; + std::vector nHits_to_nvtx_params; + std::vector nvtx_to_PU_sub_params; + std::map nHits_to_nvtx_funcs; + std::map hgcalEM_nvtx_to_PU_sub_funcs; + std::map hgcalHad_nvtx_to_PU_sub_funcs; + std::map hf_nvtx_to_PU_sub_funcs; + std::map> all_nvtx_to_PU_sub_funcs; + + // For fetching jet pt calibrations + std::vector jetPtBins; + std::vector absEtaBinsBarrel; + std::vector jetCalibrationsBarrel; + std::vector absEtaBinsHGCal; + std::vector jetCalibrationsHGCal; + std::vector absEtaBinsHF; + std::vector jetCalibrationsHF; + + // For fetching tau pt calibrations + std::vector tauPtBins; + std::vector tauAbsEtaBinsBarrel; + std::vector tauCalibrationsBarrel; + std::vector tauAbsEtaBinsHGCal; + std::vector tauCalibrationsHGCal; + + // For storing jet calibrations + std::vector> calibrationsBarrel; + std::vector> calibrationsHGCal; + std::vector> calibrationsHF; + + // For storing tau calibrations + std::vector> tauPtCalibrationsBarrel; + std::vector> tauPtCalibrationsHGCal; }; // @@ -76,7 +111,106 @@ Phase2L1CaloJetEmulator::Phase2L1CaloJetEmulator(const edm::ParameterSet& iConfi : caloTowerToken_(consumes(iConfig.getParameter("gctFullTowers"))), hgcalTowerToken_(consumes(iConfig.getParameter("hgcalTowers"))), hfToken_(consumes(iConfig.getParameter("hcalDigis"))), - decoderTag_(esConsumes(edm::ESInputTag("", ""))) { + decoderTag_(esConsumes(edm::ESInputTag("", ""))), + nHits_to_nvtx_params(iConfig.getParameter>("nHits_to_nvtx_params")), + nvtx_to_PU_sub_params(iConfig.getParameter>("nvtx_to_PU_sub_params")), + jetPtBins(iConfig.getParameter>("jetPtBins")), + absEtaBinsBarrel(iConfig.getParameter>("absEtaBinsBarrel")), + jetCalibrationsBarrel(iConfig.getParameter>("jetCalibrationsBarrel")), + absEtaBinsHGCal(iConfig.getParameter>("absEtaBinsHGCal")), + jetCalibrationsHGCal(iConfig.getParameter>("jetCalibrationsHGCal")), + absEtaBinsHF(iConfig.getParameter>("absEtaBinsHF")), + jetCalibrationsHF(iConfig.getParameter>("jetCalibrationsHF")), + tauPtBins(iConfig.getParameter>("tauPtBins")), + tauAbsEtaBinsBarrel(iConfig.getParameter>("tauAbsEtaBinsBarrel")), + tauCalibrationsBarrel(iConfig.getParameter>("tauCalibrationsBarrel")), + tauAbsEtaBinsHGCal(iConfig.getParameter>("tauAbsEtaBinsHGCal")), + tauCalibrationsHGCal(iConfig.getParameter>("tauCalibrationsHGCal")) { + for (uint i = 0; i < nHits_to_nvtx_params.size(); i++) { + edm::ParameterSet* pset = &nHits_to_nvtx_params.at(i); + std::string calo = pset->getParameter("fit"); + nHits_to_nvtx_funcs[calo.c_str()] = TF1(calo.c_str(), "[0] + [1] * x"); + nHits_to_nvtx_funcs[calo.c_str()].SetParameter(0, pset->getParameter>("nHits_params").at(0)); + nHits_to_nvtx_funcs[calo.c_str()].SetParameter(1, pset->getParameter>("nHits_params").at(1)); + } + all_nvtx_to_PU_sub_funcs["hgcalEM"] = hgcalEM_nvtx_to_PU_sub_funcs; + all_nvtx_to_PU_sub_funcs["hgcalHad"] = hgcalHad_nvtx_to_PU_sub_funcs; + all_nvtx_to_PU_sub_funcs["hf"] = hf_nvtx_to_PU_sub_funcs; + for (uint i = 0; i < nvtx_to_PU_sub_params.size(); i++) { + edm::ParameterSet* pset = &nvtx_to_PU_sub_params.at(i); + std::string calo = pset->getParameter("calo"); + std::string iEta = pset->getParameter("iEta"); + double p1 = pset->getParameter>("nvtx_params").at(0); + double p2 = pset->getParameter>("nvtx_params").at(1); + + all_nvtx_to_PU_sub_funcs[calo.c_str()][iEta.c_str()] = TF1(calo.c_str(), "[0] + [1] * x"); + all_nvtx_to_PU_sub_funcs[calo.c_str()][iEta.c_str()].SetParameter(0, p1); + all_nvtx_to_PU_sub_funcs[calo.c_str()][iEta.c_str()].SetParameter(1, p2); + } + + // Fill the jet pt calibration 2D vector + // Dimension 1 is AbsEta bin + // Dimension 2 is jet pT bin which is filled with the actual callibration value + // size()-1 b/c the inputs have lower and upper bounds + // Do Barrel, then HGCal, then HF + int index = 0; + for (unsigned int abs_eta = 0; abs_eta < absEtaBinsBarrel.size() - 1; abs_eta++) { + std::vector pt_bin_calibs; + for (unsigned int pt = 0; pt < jetPtBins.size() - 1; pt++) { + pt_bin_calibs.push_back(jetCalibrationsBarrel.at(index)); + index++; + } + calibrationsBarrel.push_back(pt_bin_calibs); + } + + index = 0; + for (unsigned int abs_eta = 0; abs_eta < absEtaBinsHGCal.size() - 1; abs_eta++) { + std::vector pt_bin_calibs; + for (unsigned int pt = 0; pt < jetPtBins.size() - 1; pt++) { + pt_bin_calibs.push_back(jetCalibrationsHGCal.at(index)); + index++; + } + calibrationsHGCal.push_back(pt_bin_calibs); + } + + index = 0; + for (unsigned int abs_eta = 0; abs_eta < absEtaBinsHF.size() - 1; abs_eta++) { + std::vector pt_bin_calibs; + for (unsigned int pt = 0; pt < jetPtBins.size() - 1; pt++) { + pt_bin_calibs.push_back(jetCalibrationsHF.at(index)); + index++; + } + calibrationsHF.push_back(pt_bin_calibs); + } + + // Fill the tau pt calibration 2D vector + // Dimension 1 is AbsEta bin + // Dimension 2 is tau pT bin which is filled with the actual calibration value + // Do Barrel, then HGCal + // + // Note to future developers: be very concious of the order in which the calibrations are printed + // out in tool which makse the cfg files. You need to match that exactly when loading them and + // using the calibrations below. + index = 0; + for (unsigned int abs_eta = 0; abs_eta < tauAbsEtaBinsBarrel.size() - 1; abs_eta++) { + std::vector pt_bin_calibs; + for (unsigned int pt = 0; pt < tauPtBins.size() - 1; pt++) { + pt_bin_calibs.push_back(tauCalibrationsBarrel.at(index)); + index++; + } + tauPtCalibrationsBarrel.push_back(pt_bin_calibs); + } + + index = 0; + for (unsigned int abs_eta = 0; abs_eta < tauAbsEtaBinsHGCal.size() - 1; abs_eta++) { + std::vector pt_bin_calibs; + for (unsigned int pt = 0; pt < tauPtBins.size() - 1; pt++) { + pt_bin_calibs.push_back(tauCalibrationsHGCal.at(index)); + index++; + } + tauPtCalibrationsHGCal.push_back(pt_bin_calibs); + } + produces("GCTJet"); } @@ -113,13 +247,53 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& float temporary[nBarrelEta / 2][nBarrelPhi]; - // Assign ETs to each eta-half of the endcap region (18x72) + // HGCal and HF info used for nvtx estimation edm::Handle hgcalTowerCollection; if (!iEvent.getByToken(hgcalTowerToken_, hgcalTowerCollection)) edm::LogError("Phase2L1CaloJetEmulator") << "Failed to get towers from hgcalTowerCollection!"; l1t::HGCalTowerBxCollection hgcalTowerColl; iEvent.getByToken(hgcalTowerToken_, hgcalTowerCollection); hgcalTowerColl = (*hgcalTowerCollection.product()); + + edm::Handle hfHandle; + if (!iEvent.getByToken(hfToken_, hfHandle)) + edm::LogError("Phase2L1CaloJetEmulator") << "Failed to get HcalTrigPrimDigi for HF!"; + iEvent.getByToken(hfToken_, hfHandle); + + int i_hgcalEM_hits_leq_threshold = 0; + int i_hgcalHad_hits_leq_threshold = 0; + int i_hf_hits_leq_threshold = 0; + for (auto it = hgcalTowerColl.begin(0); it != hgcalTowerColl.end(0); it++) { + if (it->etEm() <= 1.75 && it->etEm() >= 1.25) { + i_hgcalEM_hits_leq_threshold++; + } + if (it->etHad() <= 1.25 && it->etHad() >= 0.75) { + i_hgcalHad_hits_leq_threshold++; + } + } + const auto& decoder = iSetup.getData(decoderTag_); + for (const auto& hit : *hfHandle.product()) { + double et = decoder.hcaletValue(hit.id(), hit.t0()); + if (abs(hit.id().ieta()) < l1t::CaloTools::kHFBegin) + continue; + if (abs(hit.id().ieta()) > l1t::CaloTools::kHFEnd) + continue; + if (et <= 15.0 && et >= 10.0) + i_hf_hits_leq_threshold++; + } + + double hgcalEM_nvtx = nHits_to_nvtx_funcs["hgcalEM"].Eval(i_hgcalEM_hits_leq_threshold); + if (hgcalEM_nvtx < 0) + hgcalEM_nvtx = 0; + double hgcalHad_nvtx = nHits_to_nvtx_funcs["hgcalHad"].Eval(i_hgcalHad_hits_leq_threshold); + if (hgcalHad_nvtx < 0) + hgcalHad_nvtx = 0; + double hf_nvtx = nHits_to_nvtx_funcs["hf"].Eval(i_hf_hits_leq_threshold); + if (hf_nvtx < 0) + hf_nvtx = 0; + double EstimatedNvtx = (hgcalEM_nvtx + hgcalHad_nvtx + hf_nvtx) / 3.; + + // Assign ETs to each eta-half of the endcap region (18x72) float hgcalTowers[nHgcalEta][nHgcalPhi]; float hgcalEta[nHgcalEta][nHgcalPhi]; float hgcalPhi[nHgcalEta][nHgcalPhi]; @@ -145,21 +319,39 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& if (eta > 1.479) ieta = ieta - 4; int iphi = it->id().iPhi(); + + float hgcal_etEm = it->etEm(); + float hgcal_etHad = it->etHad(); + std::string etaKey = ""; + if (abs(eta) <= 1.8) + etaKey = "er1p4to1p8"; + else if (abs(eta) <= 2.1 && abs(eta) > 1.8) + etaKey = "er1p8to2p1"; + else if (abs(eta) <= 2.4 && abs(eta) > 2.1) + etaKey = "er2p1to2p4"; + else if (abs(eta) <= 2.7 && abs(eta) > 2.4) + etaKey = "er2p4to2p7"; + else if (abs(eta) <= 3.1 && abs(eta) > 2.7) + etaKey = "er2p7to3p1"; + if (!etaKey.empty()) { + hgcal_etEm = it->etEm() - all_nvtx_to_PU_sub_funcs["hgcalEM"][etaKey].Eval(EstimatedNvtx); + hgcal_etHad = it->etHad() - all_nvtx_to_PU_sub_funcs["hgcalHad"][etaKey].Eval(EstimatedNvtx); + } + + if (hgcal_etEm < 0) + hgcal_etEm = 0; + if (hgcal_etHad < 0) + hgcal_etHad = 0; if ((it->etEm() + it->etHad() > 1.) && abs(eta) > 1.479) - hgcalTowers[ieta][iphi] = it->etEm() + it->etHad(); // suppress <= 1 GeV towers + hgcalTowers[ieta][iphi] = hgcal_etEm + hgcal_etHad; // suppress <= 1 GeV towers } float temporary_hgcal[nHgcalEta / 2][nHgcalPhi]; // Assign ETs to each eta-half of the forward region (12x72) - edm::Handle hfHandle; - if (!iEvent.getByToken(hfToken_, hfHandle)) - edm::LogError("Phase2L1CaloJetEmulator") << "Failed to get HcalTrigPrimDigi for HF!"; - iEvent.getByToken(hfToken_, hfHandle); float hfTowers[nHfEta][nHfPhi]; float hfEta[nHfEta][nHfPhi]; float hfPhi[nHfEta][nHfPhi]; - for (int iphi = 0; iphi < nHfPhi; iphi++) { for (int ieta = 0; ieta < nHfEta; ieta++) { hfTowers[ieta][iphi] = 0; @@ -173,7 +365,6 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& } } - const auto& decoder = iSetup.getData(decoderTag_); for (const auto& hit : *hfHandle.product()) { double et = decoder.hcaletValue(hit.id(), hit.t0()); int ieta = 0; @@ -191,6 +382,14 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& iphi = hit.id().iphi() + (nHfPhi / 2 - 1); else if (hit.id().iphi() > nHfPhi / 2) iphi = hit.id().iphi() - (nHfPhi / 2 + 1); + if (abs(hit.id().ieta()) <= 33 && abs(hit.id().ieta()) >= 29) + et = et - all_nvtx_to_PU_sub_funcs["hf"]["er29to33"].Eval(EstimatedNvtx); + if (abs(hit.id().ieta()) <= 37 && abs(hit.id().ieta()) >= 34) + et = et - all_nvtx_to_PU_sub_funcs["hf"]["er34to37"].Eval(EstimatedNvtx); + if (abs(hit.id().ieta()) <= 41 && abs(hit.id().ieta()) >= 38) + et = et - all_nvtx_to_PU_sub_funcs["hf"]["er38to41"].Eval(EstimatedNvtx); + if (et < 0) + et = 0; if (et > 1.) hfTowers[ieta][iphi] = et; // suppress <= 1 GeV towers } @@ -230,8 +429,6 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& for (int i = 0; i < nJets; i++) { jet[i] = gctobj::getRegion(tempST); l1tp2::Phase2L1CaloJet tempJet; - tempJet.setJetEt(jet[i].energy); - tempJet.setTauEt(jet[i].tauEt); int gctjeteta = jet[i].etaCenter; int gctjetphi = jet[i].phiCenter; tempJet.setJetIEta(gctjeteta + k * nBarrelEta / 2); @@ -240,6 +437,8 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& float jetphi = realPhi[gctjeteta + k * nBarrelEta / 2][gctjetphi]; tempJet.setJetEta(jeteta); tempJet.setJetPhi(jetphi); + tempJet.setJetEt(get_jet_pt_calibration(jet[i].energy, jeteta)); + tempJet.setTauEt(get_tau_pt_calibration(jet[i].tauEt, jeteta)); tempJet.setTowerEt(jet[i].energyMax); int gcttowereta = jet[i].etaMax; int gcttowerphi = jet[i].phiMax; @@ -275,8 +474,6 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& for (int i = nJets; i < 2 * nJets; i++) { jet[i] = gctobj::getRegion(tempST_hgcal); l1tp2::Phase2L1CaloJet tempJet; - tempJet.setJetEt(jet[i].energy); - tempJet.setTauEt(jet[i].tauEt); int hgcaljeteta = jet[i].etaCenter; int hgcaljetphi = jet[i].phiCenter; tempJet.setJetIEta(hgcaljeteta + k * nHgcalEta / 2); @@ -285,6 +482,8 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& float jetphi = hgcalPhi[hgcaljeteta + k * nHgcalEta / 2][hgcaljetphi]; tempJet.setJetEta(jeteta); tempJet.setJetPhi(jetphi); + tempJet.setJetEt(get_jet_pt_calibration(jet[i].energy, jeteta)); + tempJet.setTauEt(get_tau_pt_calibration(jet[i].tauEt, jeteta)); tempJet.setTowerEt(jet[i].energyMax); int hgcaltowereta = jet[i].etaMax; int hgcaltowerphi = jet[i].phiMax; @@ -320,8 +519,6 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& for (int i = 2 * nJets; i < 3 * nJets; i++) { jet[i] = gctobj::getRegion(tempST_hf); l1tp2::Phase2L1CaloJet tempJet; - tempJet.setJetEt(jet[i].energy); - tempJet.setTauEt(jet[i].tauEt); int hfjeteta = jet[i].etaCenter; int hfjetphi = jet[i].phiCenter; tempJet.setJetIEta(hfjeteta + k * nHfEta / 2); @@ -330,6 +527,8 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& float jetphi = hfPhi[hfjeteta + k * nHfEta / 2][hfjetphi]; tempJet.setJetEta(jeteta); tempJet.setJetPhi(jetphi); + tempJet.setJetEt(get_jet_pt_calibration(jet[i].energy, jeteta)); + tempJet.setTauEt(get_tau_pt_calibration(jet[i].tauEt, jeteta)); tempJet.setTowerEt(jet[i].energyMax); int hftowereta = jet[i].etaMax; int hftowerphi = jet[i].phiMax; @@ -453,12 +652,271 @@ void Phase2L1CaloJetEmulator::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.put(std::move(jetCands), "GCTJet"); } +// Apply calibrations to HCAL energy based on Jet Eta, Jet pT +float Phase2L1CaloJetEmulator::get_jet_pt_calibration(const float& jet_pt, const float& jet_eta) const { + float abs_eta = std::abs(jet_eta); + float tmp_jet_pt = jet_pt; + if (tmp_jet_pt > 499) + tmp_jet_pt = 499; + + // Different indices sizes in different calo regions. + // Barrel... + size_t eta_index = 0; + size_t pt_index = 0; + float calib = 1.0; + if (abs_eta <= 1.5) { + // Start loop checking 2nd value + for (unsigned int i = 1; i < absEtaBinsBarrel.size(); i++) { + if (abs_eta <= absEtaBinsBarrel.at(i)) + break; + eta_index++; + } + // Start loop checking 2nd value + for (unsigned int i = 1; i < jetPtBins.size(); i++) { + if (tmp_jet_pt <= jetPtBins.at(i)) + break; + pt_index++; + } + calib = calibrationsBarrel[eta_index][pt_index]; + } // end Barrel + else if (abs_eta <= 3.0) // HGCal + { + // Start loop checking 2nd value + for (unsigned int i = 1; i < absEtaBinsHGCal.size(); i++) { + if (abs_eta <= absEtaBinsHGCal.at(i)) + break; + eta_index++; + } + // Start loop checking 2nd value + for (unsigned int i = 1; i < jetPtBins.size(); i++) { + if (tmp_jet_pt <= jetPtBins.at(i)) + break; + pt_index++; + } + calib = calibrationsHGCal[eta_index][pt_index]; + } // end HGCal + else // HF + { + // Start loop checking 2nd value + for (unsigned int i = 1; i < absEtaBinsHF.size(); i++) { + if (abs_eta <= absEtaBinsHF.at(i)) + break; + eta_index++; + } + // Start loop checking 2nd value + for (unsigned int i = 1; i < jetPtBins.size(); i++) { + if (tmp_jet_pt <= jetPtBins.at(i)) + break; + pt_index++; + } + calib = calibrationsHF[eta_index][pt_index]; + } // end HF + + return jet_pt * calib; +} + +// Apply calibrations to tau pT based on L1EG info, EM Fraction, Tau Eta, Tau pT +float Phase2L1CaloJetEmulator::get_tau_pt_calibration(const float& tau_pt, const float& tau_eta) const { + float abs_eta = std::abs(tau_eta); + float tmp_tau_pt = tau_pt; + if (tmp_tau_pt > 199) + tmp_tau_pt = 199; + + // Different indices sizes in different calo regions. + // Barrel... + size_t eta_index = 0; + size_t pt_index = 0; + float calib = 1.0; + if (abs_eta <= 1.5) { + // Start loop checking 2nd value + for (unsigned int i = 1; i < tauAbsEtaBinsBarrel.size(); i++) { + if (abs_eta <= tauAbsEtaBinsBarrel.at(i)) + break; + eta_index++; + } + // Start loop checking 2nd value + for (unsigned int i = 1; i < tauPtBins.size(); i++) { + if (tmp_tau_pt <= tauPtBins.at(i)) + break; + pt_index++; + } + calib = tauPtCalibrationsBarrel[eta_index][pt_index]; + } // end Barrel + else if (abs_eta <= 3.0) // HGCal + { + // Start loop checking 2nd value + for (unsigned int i = 1; i < tauAbsEtaBinsHGCal.size(); i++) { + if (abs_eta <= tauAbsEtaBinsHGCal.at(i)) + break; + eta_index++; + } + // Start loop checking 2nd value + for (unsigned int i = 1; i < tauPtBins.size(); i++) { + if (tmp_tau_pt <= tauPtBins.at(i)) + break; + pt_index++; + } + calib = tauPtCalibrationsHGCal[eta_index][pt_index]; + } // end HGCal + else + return calib; + + return tau_pt * calib; +} + // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void Phase2L1CaloJetEmulator::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("gctFullTowers", edm::InputTag("l1tPhase2L1CaloEGammaEmulator", "GCTFullTowers")); desc.add("hgcalTowers", edm::InputTag("l1tHGCalTowerProducer", "HGCalTowerProcessor")); desc.add("hcalDigis", edm::InputTag("simHcalTriggerPrimitiveDigis")); + + edm::ParameterSetDescription nHits_params_validator; + nHits_params_validator.add("fit", "type"); + nHits_params_validator.add>("nHits_params", {1., 1.}); + std::vector nHits_params_default; + edm::ParameterSet nHits_params1; + nHits_params1.addParameter("fit", "hgcalEM"); + nHits_params1.addParameter>("nHits_params", {157.522, 0.090}); + nHits_params_default.push_back(nHits_params1); + edm::ParameterSet nHits_params2; + nHits_params2.addParameter("fit", "hgcalHad"); + nHits_params2.addParameter>("nHits_params", {159.295, 0.178}); + nHits_params_default.push_back(nHits_params2); + edm::ParameterSet nHits_params3; + nHits_params3.addParameter("fit", "hf"); + nHits_params3.addParameter>("nHits_params", {165.706, 0.153}); + nHits_params_default.push_back(nHits_params3); + desc.addVPSet("nHits_to_nvtx_params", nHits_params_validator, nHits_params_default); + + edm::ParameterSetDescription nvtx_params_validator; + nvtx_params_validator.add("calo", "type"); + nvtx_params_validator.add("iEta", "etaregion"); + nvtx_params_validator.add>("nvtx_params", {1., 1.}); + std::vector nvtx_params_default; + edm::ParameterSet nvtx_params1; + nvtx_params1.addParameter("calo", "hgcalEM"); + nvtx_params1.addParameter("iEta", "er1p4to1p8"); + nvtx_params1.addParameter>("nvtx_params", {-0.011772, 0.004142}); + nvtx_params_default.push_back(nvtx_params1); + edm::ParameterSet nvtx_params2; + nvtx_params2.addParameter("calo", "hgcalEM"); + nvtx_params2.addParameter("iEta", "er1p8to2p1"); + nvtx_params2.addParameter>("nvtx_params", {-0.015488, 0.005410}); + nvtx_params_default.push_back(nvtx_params2); + edm::ParameterSet nvtx_params3; + nvtx_params3.addParameter("calo", "hgcalEM"); + nvtx_params3.addParameter("iEta", "er2p1to2p4"); + nvtx_params3.addParameter>("nvtx_params", {-0.021150, 0.006078}); + nvtx_params_default.push_back(nvtx_params3); + edm::ParameterSet nvtx_params4; + nvtx_params4.addParameter("calo", "hgcalEM"); + nvtx_params4.addParameter("iEta", "er2p4to2p7"); + nvtx_params4.addParameter>("nvtx_params", {-0.015705, 0.005339}); + nvtx_params_default.push_back(nvtx_params4); + edm::ParameterSet nvtx_params5; + nvtx_params5.addParameter("calo", "hgcalEM"); + nvtx_params5.addParameter("iEta", "er2p7to3p1"); + nvtx_params5.addParameter>("nvtx_params", {-0.018492, 0.005620}); + nvtx_params_default.push_back(nvtx_params5); + edm::ParameterSet nvtx_params6; + nvtx_params6.addParameter("calo", "hgcalHad"); + nvtx_params6.addParameter("iEta", "er1p4to1p8"); + nvtx_params6.addParameter>("nvtx_params", {0.005675, 0.000615}); + nvtx_params_default.push_back(nvtx_params6); + edm::ParameterSet nvtx_params7; + nvtx_params7.addParameter("calo", "hgcalHad"); + nvtx_params7.addParameter("iEta", "er1p8to2p1"); + nvtx_params7.addParameter>("nvtx_params", {0.004560, 0.001099}); + nvtx_params_default.push_back(nvtx_params7); + edm::ParameterSet nvtx_params8; + nvtx_params8.addParameter("calo", "hgcalHad"); + nvtx_params8.addParameter("iEta", "er2p1to2p4"); + nvtx_params8.addParameter>("nvtx_params", {0.000036, 0.001608}); + nvtx_params_default.push_back(nvtx_params8); + edm::ParameterSet nvtx_params9; + nvtx_params9.addParameter("calo", "hgcalHad"); + nvtx_params9.addParameter("iEta", "er2p4to2p7"); + nvtx_params9.addParameter>("nvtx_params", {0.000869, 0.001754}); + nvtx_params_default.push_back(nvtx_params9); + edm::ParameterSet nvtx_params10; + nvtx_params10.addParameter("calo", "hgcalHad"); + nvtx_params10.addParameter("iEta", "er2p7to3p1"); + nvtx_params10.addParameter>("nvtx_params", {-0.006574, 0.003134}); + nvtx_params_default.push_back(nvtx_params10); + edm::ParameterSet nvtx_params11; + nvtx_params11.addParameter("calo", "hf"); + nvtx_params11.addParameter("iEta", "er29to33"); + nvtx_params11.addParameter>("nvtx_params", {-0.203291, 0.044096}); + nvtx_params_default.push_back(nvtx_params11); + edm::ParameterSet nvtx_params12; + nvtx_params12.addParameter("calo", "hf"); + nvtx_params12.addParameter("iEta", "er34to37"); + nvtx_params12.addParameter>("nvtx_params", {-0.210922, 0.045628}); + nvtx_params_default.push_back(nvtx_params12); + edm::ParameterSet nvtx_params13; + nvtx_params13.addParameter("calo", "hf"); + nvtx_params13.addParameter("iEta", "er38to41"); + nvtx_params13.addParameter>("nvtx_params", {-0.229562, 0.050560}); + nvtx_params_default.push_back(nvtx_params13); + desc.addVPSet("nvtx_to_PU_sub_params", nvtx_params_validator, nvtx_params_default); + + desc.add>("jetPtBins", {0.0, 5.0, 7.5, 10.0, 12.5, 15.0, 17.5, 20.0, 22.5, 25.0, 27.5, + 30.0, 35.0, 40.0, 45.0, 50.0, 55.0, 60.0, 65.0, 70.0, 75.0, 80.0, + 85.0, 90.0, 95.0, 100.0, 110.0, 120.0, 130.0, 140.0, 150.0, 160.0, 170.0, + 180.0, 190.0, 200.0, 225.0, 250.0, 275.0, 300.0, 325.0, 400.0, 500.0}); + desc.add>("absEtaBinsBarrel", {0.00, 0.30, 0.60, 1.00, 1.50}); + desc.add>( + "jetCalibrationsBarrel", + {2.459, 2.320, 2.239, 2.166, 2.100, 2.040, 1.986, 1.937, 1.892, 1.852, 1.816, 1.768, 1.714, 1.670, 1.633, 1.603, + 1.578, 1.557, 1.540, 1.525, 1.513, 1.502, 1.493, 1.486, 1.479, 1.470, 1.460, 1.452, 1.445, 1.439, 1.433, 1.427, + 1.422, 1.417, 1.411, 1.403, 1.390, 1.377, 1.365, 1.352, 1.327, 1.284, 4.695, 3.320, 2.751, 2.361, 2.093, 1.908, + 1.781, 1.694, 1.633, 1.591, 1.562, 1.533, 1.511, 1.499, 1.492, 1.486, 1.482, 1.478, 1.474, 1.470, 1.467, 1.463, + 1.459, 1.456, 1.452, 1.447, 1.440, 1.433, 1.425, 1.418, 1.411, 1.404, 1.397, 1.390, 1.382, 1.370, 1.352, 1.334, + 1.316, 1.298, 1.262, 1.200, 5.100, 3.538, 2.892, 2.448, 2.143, 1.933, 1.789, 1.689, 1.620, 1.572, 1.539, 1.506, + 1.482, 1.469, 1.460, 1.455, 1.450, 1.446, 1.442, 1.438, 1.434, 1.431, 1.427, 1.423, 1.420, 1.414, 1.407, 1.400, + 1.392, 1.385, 1.378, 1.370, 1.363, 1.356, 1.348, 1.336, 1.317, 1.299, 1.281, 1.263, 1.226, 1.162, 3.850, 3.438, + 3.211, 3.017, 2.851, 2.708, 2.585, 2.479, 2.388, 2.310, 2.243, 2.159, 2.072, 2.006, 1.956, 1.917, 1.887, 1.863, + 1.844, 1.828, 1.814, 1.802, 1.791, 1.782, 1.773, 1.760, 1.744, 1.729, 1.714, 1.699, 1.685, 1.670, 1.656, 1.641, + 1.627, 1.602, 1.566, 1.530, 1.494, 1.458, 1.386, 1.260}); + desc.add>("absEtaBinsHGCal", {1.50, 1.90, 2.40, 3.00}); + desc.add>( + "jetCalibrationsHGCal", + {5.604, 4.578, 4.061, 3.647, 3.314, 3.047, 2.832, 2.660, 2.521, 2.410, 2.320, 2.216, 2.120, 2.056, + 2.013, 1.983, 1.961, 1.945, 1.932, 1.922, 1.913, 1.905, 1.898, 1.891, 1.884, 1.874, 1.861, 1.848, + 1.835, 1.822, 1.810, 1.797, 1.784, 1.771, 1.759, 1.736, 1.704, 1.673, 1.641, 1.609, 1.545, 1.434, + 4.385, 3.584, 3.177, 2.849, 2.584, 2.370, 2.197, 2.057, 1.944, 1.853, 1.780, 1.695, 1.616, 1.564, + 1.530, 1.507, 1.491, 1.480, 1.472, 1.466, 1.462, 1.459, 1.456, 1.453, 1.451, 1.447, 1.443, 1.439, + 1.435, 1.431, 1.427, 1.423, 1.419, 1.416, 1.412, 1.405, 1.395, 1.385, 1.376, 1.366, 1.346, 1.312, + 562.891, 68.647, 17.648, 5.241, 2.223, 1.490, 1.312, 1.270, 1.260, 1.259, 1.259, 1.260, 1.263, 1.265, + 1.267, 1.269, 1.271, 1.273, 1.275, 1.277, 1.279, 1.281, 1.283, 1.285, 1.287, 1.290, 1.295, 1.299, + 1.303, 1.307, 1.311, 1.315, 1.319, 1.323, 1.328, 1.335, 1.345, 1.355, 1.366, 1.376, 1.397, 1.433}); + desc.add>("absEtaBinsHF", {3.00, 3.60, 6.00}); + desc.add>( + "jetCalibrationsHF", + {8.169, 6.873, 6.155, 5.535, 5.001, 4.539, 4.141, 3.798, 3.501, 3.245, 3.024, 2.748, 2.463, 2.249, + 2.090, 1.971, 1.881, 1.814, 1.763, 1.725, 1.695, 1.673, 1.655, 1.642, 1.631, 1.618, 1.605, 1.596, + 1.588, 1.581, 1.575, 1.569, 1.563, 1.557, 1.551, 1.541, 1.527, 1.513, 1.498, 1.484, 1.456, 1.406, + 2.788, 2.534, 2.388, 2.258, 2.141, 2.037, 1.945, 1.862, 1.788, 1.722, 1.664, 1.587, 1.503, 1.436, + 1.382, 1.339, 1.305, 1.277, 1.255, 1.237, 1.223, 1.211, 1.201, 1.193, 1.186, 1.178, 1.170, 1.164, + 1.159, 1.154, 1.151, 1.147, 1.144, 1.141, 1.138, 1.133, 1.126, 1.118, 1.111, 1.104, 1.090, 1.064}); + desc.add>("tauPtBins", {0.0, 5.0, 7.5, 10.0, 12.5, 15.0, 20.0, 25.0, 30.0, 35.0, + 40.0, 45.0, 50.0, 55.0, 60.0, 70.0, 80.0, 100.0, 150.0, 200.0}); + desc.add>("tauAbsEtaBinsBarrel", {0.00, 0.30, 0.60, 1.00, 1.50}); + desc.add>("tauCalibrationsBarrel", + {1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, + 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, + 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.102, + 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, + 1.102, 1.102, 1.102, 1.102, 1.102, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139}); + desc.add>("tauAbsEtaBinsHGCal", {1.50, 1.90, 2.40, 3.00}); + desc.add>( + "tauCalibrationsHGCal", + {1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, + 1.384, 1.384, 1.384, 1.384, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, + 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, + 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133}); + descriptions.addWithDefaultLabel(desc); } diff --git a/L1Trigger/L1CaloTrigger/python/l1tPhase2CaloJetEmulator_cfi.py b/L1Trigger/L1CaloTrigger/python/l1tPhase2CaloJetEmulator_cfi.py index 44cda2b527e55..fd0ba87e750ee 100644 --- a/L1Trigger/L1CaloTrigger/python/l1tPhase2CaloJetEmulator_cfi.py +++ b/L1Trigger/L1CaloTrigger/python/l1tPhase2CaloJetEmulator_cfi.py @@ -1,7 +1,123 @@ import FWCore.ParameterSet.Config as cms l1tPhase2CaloJetEmulator = cms.EDProducer("Phase2L1CaloJetEmulator", - gctFullTowers = cms.InputTag("l1tPhase2L1CaloEGammaEmulator","GCTFullTowers"), - hgcalTowers = cms.InputTag("l1tHGCalTowerProducer","HGCalTowerProcessor"), - hcalDigis = cms.InputTag("simHcalTriggerPrimitiveDigis"), + gctFullTowers = cms.InputTag("l1tPhase2L1CaloEGammaEmulator","GCTFullTowers"), + hgcalTowers = cms.InputTag("l1tHGCalTowerProducer","HGCalTowerProcessor"), + hcalDigis = cms.InputTag("simHcalTriggerPrimitiveDigis"), + nHits_to_nvtx_params = cms.VPSet( + cms.PSet( + fit = cms.string( "hgcalEM" ), + nHits_params = cms.vdouble( 157.522, 0.090 ) + ), + cms.PSet( + fit = cms.string( "hgcalHad" ), + nHits_params = cms.vdouble( 159.295, 0.178 ) + ), + cms.PSet( + fit = cms.string( "hf" ), + nHits_params = cms.vdouble( 165.706, 0.153 ) + ), + ), + nvtx_to_PU_sub_params = cms.VPSet( + cms.PSet( + calo = cms.string( "hgcalEM" ), + iEta = cms.string( "er1p4to1p8" ), + nvtx_params = cms.vdouble( -0.011772, 0.004142 ) + ), + cms.PSet( + calo = cms.string( "hgcalEM" ), + iEta = cms.string( "er1p8to2p1" ), + nvtx_params = cms.vdouble( -0.015488, 0.005410 ) + ), + cms.PSet( + calo = cms.string( "hgcalEM" ), + iEta = cms.string( "er2p1to2p4" ), + nvtx_params = cms.vdouble( -0.021150, 0.006078 ) + ), + cms.PSet( + calo = cms.string( "hgcalEM" ), + iEta = cms.string( "er2p4to2p7" ), + nvtx_params = cms.vdouble( -0.015705, 0.005339 ) + ), + cms.PSet( + calo = cms.string( "hgcalEM" ), + iEta = cms.string( "er2p7to3p1" ), + nvtx_params = cms.vdouble( -0.018492, 0.005620 ) + ), + cms.PSet( + calo = cms.string( "hgcalHad" ), + iEta = cms.string( "er1p4to1p8" ), + nvtx_params = cms.vdouble( 0.005675, 0.000615 ) + ), + cms.PSet( + calo = cms.string( "hgcalHad" ), + iEta = cms.string( "er1p8to2p1" ), + nvtx_params = cms.vdouble( 0.004560, 0.001099 ) + ), + cms.PSet( + calo = cms.string( "hgcalHad" ), + iEta = cms.string( "er2p1to2p4" ), + nvtx_params = cms.vdouble( 0.000036, 0.001608 ) + ), + cms.PSet( + calo = cms.string( "hgcalHad" ), + iEta = cms.string( "er2p4to2p7" ), + nvtx_params = cms.vdouble( 0.000869, 0.001754 ) + ), + cms.PSet( + calo = cms.string( "hgcalHad" ), + iEta = cms.string( "er2p7to3p1" ), + nvtx_params = cms.vdouble( -0.006574, 0.003134 ) + ), + cms.PSet( + calo = cms.string( "hf" ), + iEta = cms.string( "er29to33" ), + nvtx_params = cms.vdouble( -0.203291, 0.044096 ) + ), + cms.PSet( + calo = cms.string( "hf" ), + iEta = cms.string( "er34to37" ), + nvtx_params = cms.vdouble( -0.210922, 0.045628 ) + ), + cms.PSet( + calo = cms.string( "hf" ), + iEta = cms.string( "er38to41" ), + nvtx_params = cms.vdouble( -0.229562, 0.050560 ) + ), + ), + # Calibrations derived 7 December 2023 on 13_2_0 Phase2Fall22DRMiniAOD QCD sample + jetPtBins = cms.vdouble([ 0.0,5.0,7.5,10.0,12.5,15.0,17.5,20.0,22.5,25.0,27.5,30.0,35.0,40.0,45.0,50.0,55.0,60.0,65.0,70.0,75.0,80.0,85.0,90.0,95.0,100.0,110.0,120.0,130.0,140.0,150.0,160.0,170.0,180.0,190.0,200.0,225.0,250.0,275.0,300.0,325.0,400.0,500.0]), + absEtaBinsBarrel = cms.vdouble([ 0.00,0.30,0.60,1.00,1.50]), + jetCalibrationsBarrel = cms.vdouble([ + 2.459, 2.320, 2.239, 2.166, 2.100, 2.040, 1.986, 1.937, 1.892, 1.852, 1.816, 1.768, 1.714, 1.670, 1.633, 1.603, 1.578, 1.557, 1.540, 1.525, 1.513, 1.502, 1.493, 1.486, 1.479, 1.470, 1.460, 1.452, 1.445, 1.439, 1.433, 1.427, 1.422, 1.417, 1.411, 1.403, 1.390, 1.377, 1.365, 1.352, 1.327, 1.284, + 4.695, 3.320, 2.751, 2.361, 2.093, 1.908, 1.781, 1.694, 1.633, 1.591, 1.562, 1.533, 1.511, 1.499, 1.492, 1.486, 1.482, 1.478, 1.474, 1.470, 1.467, 1.463, 1.459, 1.456, 1.452, 1.447, 1.440, 1.433, 1.425, 1.418, 1.411, 1.404, 1.397, 1.390, 1.382, 1.370, 1.352, 1.334, 1.316, 1.298, 1.262, 1.200, + 5.100, 3.538, 2.892, 2.448, 2.143, 1.933, 1.789, 1.689, 1.620, 1.572, 1.539, 1.506, 1.482, 1.469, 1.460, 1.455, 1.450, 1.446, 1.442, 1.438, 1.434, 1.431, 1.427, 1.423, 1.420, 1.414, 1.407, 1.400, 1.392, 1.385, 1.378, 1.370, 1.363, 1.356, 1.348, 1.336, 1.317, 1.299, 1.281, 1.263, 1.226, 1.162, + 3.850, 3.438, 3.211, 3.017, 2.851, 2.708, 2.585, 2.479, 2.388, 2.310, 2.243, 2.159, 2.072, 2.006, 1.956, 1.917, 1.887, 1.863, 1.844, 1.828, 1.814, 1.802, 1.791, 1.782, 1.773, 1.760, 1.744, 1.729, 1.714, 1.699, 1.685, 1.670, 1.656, 1.641, 1.627, 1.602, 1.566, 1.530, 1.494, 1.458, 1.386, 1.260, + ]), + absEtaBinsHGCal = cms.vdouble([ 1.50,1.90,2.40,3.00]), + jetCalibrationsHGCal = cms.vdouble([ + 5.604, 4.578, 4.061, 3.647, 3.314, 3.047, 2.832, 2.660, 2.521, 2.410, 2.320, 2.216, 2.120, 2.056, 2.013, 1.983, 1.961, 1.945, 1.932, 1.922, 1.913, 1.905, 1.898, 1.891, 1.884, 1.874, 1.861, 1.848, 1.835, 1.822, 1.810, 1.797, 1.784, 1.771, 1.759, 1.736, 1.704, 1.673, 1.641, 1.609, 1.545, 1.434, + 4.385, 3.584, 3.177, 2.849, 2.584, 2.370, 2.197, 2.057, 1.944, 1.853, 1.780, 1.695, 1.616, 1.564, 1.530, 1.507, 1.491, 1.480, 1.472, 1.466, 1.462, 1.459, 1.456, 1.453, 1.451, 1.447, 1.443, 1.439, 1.435, 1.431, 1.427, 1.423, 1.419, 1.416, 1.412, 1.405, 1.395, 1.385, 1.376, 1.366, 1.346, 1.312, + 562.891, 68.647, 17.648, 5.241, 2.223, 1.490, 1.312, 1.270, 1.260, 1.259, 1.259, 1.260, 1.263, 1.265, 1.267, 1.269, 1.271, 1.273, 1.275, 1.277, 1.279, 1.281, 1.283, 1.285, 1.287, 1.290, 1.295, 1.299, 1.303, 1.307, 1.311, 1.315, 1.319, 1.323, 1.328, 1.335, 1.345, 1.355, 1.366, 1.376, 1.397, 1.433, + ]), + absEtaBinsHF = cms.vdouble([ 3.00,3.60,6.00]), + jetCalibrationsHF = cms.vdouble([ + 8.169, 6.873, 6.155, 5.535, 5.001, 4.539, 4.141, 3.798, 3.501, 3.245, 3.024, 2.748, 2.463, 2.249, 2.090, 1.971, 1.881, 1.814, 1.763, 1.725, 1.695, 1.673, 1.655, 1.642, 1.631, 1.618, 1.605, 1.596, 1.588, 1.581, 1.575, 1.569, 1.563, 1.557, 1.551, 1.541, 1.527, 1.513, 1.498, 1.484, 1.456, 1.406, + 2.788, 2.534, 2.388, 2.258, 2.141, 2.037, 1.945, 1.862, 1.788, 1.722, 1.664, 1.587, 1.503, 1.436, 1.382, 1.339, 1.305, 1.277, 1.255, 1.237, 1.223, 1.211, 1.201, 1.193, 1.186, 1.178, 1.170, 1.164, 1.159, 1.154, 1.151, 1.147, 1.144, 1.141, 1.138, 1.133, 1.126, 1.118, 1.111, 1.104, 1.090, 1.064, + ]), + # Calibrations derived 7 December 2023 on 13_2_0 Phase2Fall22DRMiniAOD VBFHiggsTauTau sample + tauPtBins = cms.vdouble([ 0.0,5.0,7.5,10.0,12.5,15.0,20.0,25.0,30.0,35.0,40.0,45.0,50.0,55.0,60.0,70.0,80.0,100.0,150.0,200.0]), + tauAbsEtaBinsBarrel = cms.vdouble([ 0.00,0.30,0.60,1.00,1.50]), + tauCalibrationsBarrel = cms.vdouble([ + 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, 1.067, + 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, 1.106, + 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, 1.102, + 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, 1.139, + ]), + tauAbsEtaBinsHGCal = cms.vdouble([ 1.50,1.90,2.40,3.00]), + tauCalibrationsHGCal = cms.vdouble([ + 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, 1.384, + 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, 1.473, + 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, 1.133, + ]), ) diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc index 036ea962594e5..f04ab8afd3e13 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1.cc @@ -66,10 +66,6 @@ class L1TCaloLayer1 : public edm::stream::EDProducer<> { void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- edm::EDGetTokenT ecalTPSource; @@ -348,30 +344,6 @@ void L1TCaloLayer1::beginRun(const edm::Run& iRun, const edm::EventSetup& iSetup } } -// ------------ method called when ending the processing of a run ------------ -/* - void - L1TCaloLayer1::endRun(edm::Run const&, edm::EventSetup const&) - { - } -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* - void - L1TCaloLayer1::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) - { - } -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* - void - L1TCaloLayer1::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) - { - } -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TCaloLayer1::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //Description set to reflect default present in simCaloStage2Layer1Digis_cfi.py diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1Validator.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1Validator.cc index 03f68391d3a59..542ba7a39d1f5 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1Validator.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloLayer1Validator.cc @@ -46,20 +46,13 @@ using namespace l1t; class L1TCaloLayer1Validator : public edm::one::EDAnalyzer<> { public: explicit L1TCaloLayer1Validator(const edm::ParameterSet&); - ~L1TCaloLayer1Validator() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginJob() override; void analyze(const edm::Event&, const edm::EventSetup&) override; void endJob() override; - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- edm::EDGetTokenT testTowerToken; @@ -144,8 +137,6 @@ L1TCaloLayer1Validator::L1TCaloLayer1Validator(const edm::ParameterSet& iConfig) ngCard[c] = nbCard[c] = zgCard[c] = zbCard[c] = 0; } -L1TCaloLayer1Validator::~L1TCaloLayer1Validator() {} - // // member functions // @@ -390,9 +381,6 @@ void L1TCaloLayer1Validator::analyze(const edm::Event& iEvent, const edm::EventS eventCount++; } -// ------------ method called once each job just before starting event loop ------------ -void L1TCaloLayer1Validator::beginJob() {} - // ------------ method called once each job just after ending the event loop ------------ void L1TCaloLayer1Validator::endJob() { if (validateTowers) @@ -420,38 +408,6 @@ void L1TCaloLayer1Validator::endJob() { } } -// ------------ method called when starting to processes a run ------------ -/* -void -L1TCaloLayer1Validator::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -L1TCaloLayer1Validator::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -L1TCaloLayer1Validator::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -L1TCaloLayer1Validator::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TCaloLayer1Validator::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloSummary.cc b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloSummary.cc index 4b93638dbce5a..d8ec5cbffa7c7 100644 --- a/L1Trigger/L1TCaloLayer1/plugins/L1TCaloSummary.cc +++ b/L1Trigger/L1TCaloLayer1/plugins/L1TCaloSummary.cc @@ -57,6 +57,9 @@ #include "L1Trigger/L1TCaloLayer1/src/UCTLogging.hh" #include +#include +#include + //Anomaly detection includes #include "ap_fixed.h" #include "hls4ml/emulator.h" @@ -82,8 +85,6 @@ class L1TCaloSummary : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; //void endJob() override; - void beginRun(edm::Run const&, edm::EventSetup const&) override{}; - void print(); // ----------member data --------------------------- @@ -110,6 +111,9 @@ class L1TCaloSummary : public edm::stream::EDProducer<> { hls4mlEmulator::ModelLoader loader; std::shared_ptr model; + + bool overwriteWithTestPatterns; + std::vector testPatterns; }; // @@ -137,7 +141,9 @@ L1TCaloSummary::L1TCaloSummary(const edm::ParameterSet& iConfig) verbose(iConfig.getParameter("verbose")), fwVersion(iConfig.getParameter("firmwareVersion")), regionToken(consumes(edm::InputTag("simCaloStage2Layer1Digis"))), - loader(hls4mlEmulator::ModelLoader(iConfig.getParameter("CICADAModelVersion"))) { + loader(hls4mlEmulator::ModelLoader(iConfig.getParameter("CICADAModelVersion"))), + overwriteWithTestPatterns(iConfig.getParameter("useTestPatterns")), + testPatterns(iConfig.getParameter>("testPatterns")) { std::vector pumLUTData; char pumLUTString[10]; for (uint32_t pumBin = 0; pumBin < nPumBins; pumBin++) { @@ -215,6 +221,32 @@ void L1TCaloSummary::produce(edm::Event& iEvent, const edm::Event //CICADA reads this as a flat vector modelInput[14 * i.gctPhi() + (i.gctEta() - 4)] = i.et(); } + // Check if we're using test patterns. If so, we overwrite the inputs with a test pattern + if (overwriteWithTestPatterns) { + unsigned int evt = iEvent.id().event(); + unsigned int totalTestPatterns = testPatterns.size(); + unsigned int patternElement = evt % totalTestPatterns; + const edm::ParameterSet& element = testPatterns.at(patternElement); + std::stringstream inputStream; + std::string PhiRowString; + + edm::LogWarning("L1TCaloSummary") << "Overwriting existing CICADA input with test pattern!\n"; + + for (unsigned short int iPhi = 1; iPhi <= 18; ++iPhi) { + PhiRowString = ""; + std::stringstream PhiRowStringStream; + PhiRowStringStream << "iPhi_" << iPhi; + PhiRowString = PhiRowStringStream.str(); + std::vector phiRow = element.getParameter>(PhiRowString); + for (unsigned short int iEta = 1; iEta <= 14; ++iEta) { + modelInput[14 * (iPhi - 1) + (iEta - 1)] = phiRow.at(iEta - 1); + inputStream << phiRow.at(iEta - 1) << " "; + } + inputStream << "\n"; + } + edm::LogInfo("L1TCaloSummary") << "Input Stream:\n" << inputStream.str(); + } + //Extract model output OUTPUT modelResult[1] = { OUTPUT("0.0", 10)}; //the 10 here refers to the fact that we read in "0.0" as a decimal number @@ -224,6 +256,9 @@ void L1TCaloSummary::produce(edm::Event& iEvent, const edm::Event *CICADAScore = modelResult[0].to_float(); + if (overwriteWithTestPatterns) + edm::LogInfo("L1TCaloSummary") << "Test Pattern Output: " << *CICADAScore; + summaryCard.setRegionData(inputRegions); if (!summaryCard.process()) { @@ -305,4 +340,4 @@ typedef L1TCaloSummary, ap_fixed<11, 5>> L1TCaloSummaryCICADAv typedef L1TCaloSummary, ap_ufixed<16, 8>> L1TCaloSummaryCICADAv2; //define type version plugins DEFINE_FWK_MODULE(L1TCaloSummaryCICADAv1); -DEFINE_FWK_MODULE(L1TCaloSummaryCICADAv2); \ No newline at end of file +DEFINE_FWK_MODULE(L1TCaloSummaryCICADAv2); diff --git a/L1Trigger/L1TCaloLayer1/python/CICADATestPatterns.py b/L1Trigger/L1TCaloLayer1/python/CICADATestPatterns.py new file mode 100644 index 0000000000000..a209dc998c34f --- /dev/null +++ b/L1Trigger/L1TCaloLayer1/python/CICADATestPatterns.py @@ -0,0 +1,64 @@ +import FWCore.ParameterSet.Config as cms + +standardCICADATestPatterns = cms.VPSet( + cms.PSet( + iPhi_1 = cms.vuint32(0, 0, 1, 0, 1, 0, 2, 3, 0, 0, 0, 3, 6, 0, ), + iPhi_2 = cms.vuint32(2, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 2, ), + iPhi_3 = cms.vuint32(0, 0, 0, 0, 0, 1, 0, 0, 5, 0, 0, 0, 0, 1, ), + iPhi_4 = cms.vuint32(0, 1, 0, 0, 0, 1, 0, 0, 31, 1, 8, 7, 2, 8, ), + iPhi_5 = cms.vuint32(1, 0, 1, 0, 0, 1, 0, 1, 2, 4, 0, 0, 0, 0, ), + iPhi_6 = cms.vuint32(0, 0, 0, 0, 4, 0, 0, 1, 0, 0, 0, 0, 0, 6, ), + iPhi_7 = cms.vuint32(0, 3, 1, 2, 1, 5, 1, 0, 0, 0, 0, 0, 1, 1, ), + iPhi_8 = cms.vuint32(0, 0, 3, 2, 0, 2, 3, 3, 8, 10, 1, 2, 0, 27, ), + iPhi_9 = cms.vuint32(6, 0, 0, 2, 0, 0, 2, 0, 0, 0, 1, 0, 0, 1, ), + iPhi_10 = cms.vuint32(0, 0, 1, 0, 12, 2, 0, 0, 0, 1, 0, 1, 0, 2, ), + iPhi_11 = cms.vuint32(5, 0, 0, 1, 0, 0, 1, 4, 2, 0, 15, 0, 0, 212, ), + iPhi_12 = cms.vuint32(4, 0, 2, 0, 2, 1, 1, 4, 1, 0, 2, 3, 0, 0, ), + iPhi_13 = cms.vuint32(0, 4, 1, 2, 182, 0, 2, 2, 0, 0, 0, 1, 1, 0, ), + iPhi_14 = cms.vuint32(0, 10, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 2, ), + iPhi_15 = cms.vuint32(6, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 12, ), + iPhi_16 = cms.vuint32(0, 0, 0, 1, 0, 1, 0, 0, 3, 1, 0, 0, 0, 1, ), + iPhi_17 = cms.vuint32(0, 0, 0, 0, 0, 2, 0, 4, 2, 0, 3, 0, 0, 2, ), + iPhi_18 = cms.vuint32(2, 0, 0, 0, 0, 1, 0, 4, 0, 2, 4, 5, 0, 0, ), + ), + cms.PSet( + iPhi_1 = cms.vuint32(3, 5, 6, 2, 1, 0, 9, 0, 1, 1, 2, 1, 1, 5, ), + iPhi_2 = cms.vuint32(4, 2, 1, 0, 5, 0, 0, 2, 4, 11, 10, 1, 1, 12, ), + iPhi_3 = cms.vuint32(5, 0, 0, 2, 1, 2, 1, 1, 19, 20, 237, 0, 2, 2, ), + iPhi_4 = cms.vuint32(5, 1, 0, 3, 2, 1, 2, 3, 3, 1, 2, 1, 1, 7, ), + iPhi_5 = cms.vuint32(1, 1, 1, 2, 0, 0, 0, 3, 5, 2, 1, 1, 3, 14, ), + iPhi_6 = cms.vuint32(4, 0, 2, 2, 0, 0, 0, 2, 1, 3, 3, 1, 0, 3, ), + iPhi_7 = cms.vuint32(1, 4, 62, 6, 0, 1, 10, 2, 2, 5, 1, 1, 0, 7, ), + iPhi_8 = cms.vuint32(13, 1, 0, 2, 1, 5, 1, 3, 1, 0, 1, 0, 4, 2, ), + iPhi_9 = cms.vuint32(4, 1, 2, 1, 6, 2, 6, 0, 2, 2, 1, 0, 0, 6, ), + iPhi_10 = cms.vuint32(10, 0, 2, 0, 3, 0, 1, 2, 12, 0, 20, 4, 0, 7, ), + iPhi_11 = cms.vuint32(16, 2, 4, 1, 0, 2, 3, 15, 4, 1, 0, 6, 5, 5, ), + iPhi_12 = cms.vuint32(3, 0, 1, 0, 1, 1, 4, 2, 9, 115, 38, 2, 3, 1, ), + iPhi_13 = cms.vuint32(10, 3, 10, 15, 2, 0, 8, 8, 0, 2, 2, 0, 1, 8, ), + iPhi_14 = cms.vuint32(4, 0, 0, 0, 1, 4, 0, 1, 1, 1, 1, 1, 0, 2, ), + iPhi_15 = cms.vuint32(11, 1, 1, 2, 1, 3, 5, 4, 4, 2, 0, 1, 0, 13, ), + iPhi_16 = cms.vuint32(6, 1, 1, 1, 0, 1, 3, 2, 1, 10, 3, 0, 0, 15, ), + iPhi_17 = cms.vuint32(4, 0, 0, 1, 2, 1, 1, 2, 0, 1, 0, 1, 0, 3, ), + iPhi_18 = cms.vuint32(5, 0, 0, 0, 4, 1, 0, 2, 5, 31, 0, 1, 1, 5, ), + ), + cms.PSet( + iPhi_1 = cms.vuint32(4, 2, 2, 0, 0, 0, 4, 6, 1, 0, 0, 2, 2, 7, ), + iPhi_2 = cms.vuint32(2, 2, 0, 1, 1, 1, 0, 0, 1, 2, 2, 1, 0, 0, ), + iPhi_3 = cms.vuint32(0, 0, 0, 1, 52, 0, 3, 2, 7, 2, 0, 0, 1, 4, ), + iPhi_4 = cms.vuint32(4, 0, 0, 0, 51, 6, 53, 4, 1, 0, 0, 0, 0, 0, ), + iPhi_5 = cms.vuint32(10, 0, 0, 0, 1, 1, 4, 1, 0, 0, 0, 0, 0, 8, ), + iPhi_6 = cms.vuint32(2, 0, 2, 0, 1, 5, 1, 3, 4, 0, 1, 0, 1, 14, ), + iPhi_7 = cms.vuint32(1, 0, 1, 1, 0, 0, 8, 9, 2, 3, 0, 1, 0, 3, ), + iPhi_8 = cms.vuint32(4, 0, 23, 62, 31, 0, 5, 3, 3, 1, 0, 0, 0, 4, ), + iPhi_9 = cms.vuint32(100, 3, 10, 5, 0, 2, 0, 2, 1, 2, 0, 0, 0, 0, ), + iPhi_10 = cms.vuint32(27, 2, 0, 0, 0, 2, 3, 1, 3, 0, 0, 2, 0, 0, ), + iPhi_11 = cms.vuint32(8, 2, 3, 5, 5, 1, 1, 0, 4, 2, 2, 0, 0, 5, ), + iPhi_12 = cms.vuint32(6, 6, 1, 0, 0, 2, 0, 3, 1, 3, 2, 1, 0, 2, ), + iPhi_13 = cms.vuint32(0, 2, 2, 1, 0, 0, 7, 6, 0, 0, 0, 0, 1, 352, ), + iPhi_14 = cms.vuint32(8, 0, 0, 1, 1, 1, 2, 2, 1, 4, 0, 0, 0, 2, ), + iPhi_15 = cms.vuint32(3, 0, 0, 0, 1, 3, 3, 3, 0, 1, 0, 0, 0, 2, ), + iPhi_16 = cms.vuint32(3, 166, 0, 4, 0, 2, 3, 1, 1, 1, 0, 0, 0, 6, ), + iPhi_17 = cms.vuint32(2, 2, 1, 0, 0, 0, 0, 2, 5, 0, 0, 0, 0, 2, ), + iPhi_18 = cms.vuint32(6, 3, 0, 2, 0, 4, 7, 1, 4, 4, 0, 0, 1, 2, ), + ), +) \ No newline at end of file diff --git a/L1Trigger/L1TCaloLayer1/python/simCaloStage2Layer1Summary_cfi.py b/L1Trigger/L1TCaloLayer1/python/simCaloStage2Layer1Summary_cfi.py index 0d26e0b5ad79c..91fd111a33b27 100644 --- a/L1Trigger/L1TCaloLayer1/python/simCaloStage2Layer1Summary_cfi.py +++ b/L1Trigger/L1TCaloLayer1/python/simCaloStage2Layer1Summary_cfi.py @@ -1,5 +1,7 @@ import FWCore.ParameterSet.Config as cms +from L1Trigger.L1TCaloLayer1.CICADATestPatterns import standardCICADATestPatterns + simCaloStage2Layer1Summary = cms.EDProducer('L1TCaloSummaryCICADAv2', nPumBins = cms.uint32(18), pumLUT00n= cms.vdouble(0.43, 0.32, 0.29, 0.36, 0.33, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25), @@ -48,5 +50,7 @@ verbose = cms.bool(False), # See UCTLayer1.hh for firmware version firmwareVersion = cms.int32(1), - CICADAModelVersion = cms.string("CICADAModel_v2p1") + CICADAModelVersion = cms.string("CICADAModel_v2p1"), + useTestPatterns = cms.bool(False), + testPatterns = standardCICADATestPatterns ) diff --git a/L1Trigger/L1TCalorimeter/plugins/L1TCaloStage2ParamsESProducer.cc b/L1Trigger/L1TCalorimeter/plugins/L1TCaloStage2ParamsESProducer.cc index 7ba7ca4e9b388..77d4a54f47306 100644 --- a/L1Trigger/L1TCalorimeter/plugins/L1TCaloStage2ParamsESProducer.cc +++ b/L1Trigger/L1TCalorimeter/plugins/L1TCaloStage2ParamsESProducer.cc @@ -344,12 +344,6 @@ L1TCaloStage2ParamsESProducer::L1TCaloStage2ParamsESProducer(const edm::Paramete std::shared_ptr q2LUT(new LUT(q2LUTStream)); m_params_helper.setQ2LUT(*q2LUT); - // HI ZDC calibration LUT for trigger - edm::FileInPath zdcLUTFile = conf.getParameter("zdcLUTFile"); - std::ifstream zdcLUTStream(zdcLUTFile.fullPath()); - std::shared_ptr zdcLUT(new LUT(zdcLUTStream)); - m_params_helper.setZDCLUT(*zdcLUT); - // Layer 1 LUT specification m_params_helper.setLayer1ECalScaleFactors(conf.getParameter>("layer1ECalScaleFactors")); m_params_helper.setLayer1HCalScaleFactors(conf.getParameter>("layer1HCalScaleFactors")); diff --git a/L1Trigger/L1TCalorimeter/plugins/L1TStage2CaloAnalyzer.cc b/L1Trigger/L1TCalorimeter/plugins/L1TStage2CaloAnalyzer.cc index 9c3d6d7558f23..4b592920b1688 100644 --- a/L1Trigger/L1TCalorimeter/plugins/L1TStage2CaloAnalyzer.cc +++ b/L1Trigger/L1TCalorimeter/plugins/L1TStage2CaloAnalyzer.cc @@ -29,19 +29,12 @@ namespace l1t { class L1TStage2CaloAnalyzer : public edm::one::EDAnalyzer { public: explicit L1TStage2CaloAnalyzer(const edm::ParameterSet&); - ~L1TStage2CaloAnalyzer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void beginJob() override; void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetToken m_towerToken; @@ -296,11 +289,6 @@ namespace l1t { typeStr_.push_back("sumasymhthf"); } - L1TStage2CaloAnalyzer::~L1TStage2CaloAnalyzer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - } - // // member functions // @@ -815,41 +803,6 @@ namespace l1t { hsortMP_ = fs->make("sortMP", "", 201, -100.5, 100.5); } - // ------------ method called once each job just after ending the event loop ------------ - void L1TStage2CaloAnalyzer::endJob() {} - - // ------------ method called when starting to processes a run ------------ - /* - void - L1TStage2CaloAnalyzer::beginRun(edm::Run const&, edm::EventSetup const&) - { - } - */ - - // ------------ method called when ending the processing of a run ------------ - /* - void - L1TStage2CaloAnalyzer::endRun(edm::Run const&, edm::EventSetup const&) - { - } - */ - - // ------------ method called when starting to processes a luminosity block ------------ - /* - void - L1TStage2CaloAnalyzer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) - { - } - */ - - // ------------ method called when ending the processing of a luminosity block ------------ - /* - void - L1TStage2CaloAnalyzer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) - { - } - */ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TStage2CaloAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TCalorimeter/plugins/L1TStage2InputPatternWriter.cc b/L1Trigger/L1TCalorimeter/plugins/L1TStage2InputPatternWriter.cc index eeb26ca7a64aa..940cc5154e2b9 100644 --- a/L1Trigger/L1TCalorimeter/plugins/L1TStage2InputPatternWriter.cc +++ b/L1Trigger/L1TCalorimeter/plugins/L1TStage2InputPatternWriter.cc @@ -44,20 +44,13 @@ class L1TStage2InputPatternWriter : public edm::one::EDAnalyzer<> { public: explicit L1TStage2InputPatternWriter(const edm::ParameterSet&); - ~L1TStage2InputPatternWriter() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginJob() override; void analyze(const edm::Event&, const edm::EventSetup&) override; void endJob() override; - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- edm::EDGetToken m_towerToken; @@ -118,11 +111,6 @@ L1TStage2InputPatternWriter::L1TStage2InputPatternWriter(const edm::ParameterSet LogDebug("L1TDebug") << "Preparing for " << nLink_ << " links" << std::endl; } -L1TStage2InputPatternWriter::~L1TStage2InputPatternWriter() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -221,9 +209,6 @@ void L1TStage2InputPatternWriter::analyze(const edm::Event& iEvent, const edm::E } } -// ------------ method called once each job just before starting event loop ------------ -void L1TStage2InputPatternWriter::beginJob() {} - // ------------ method called once each job just after ending the event loop ------------ void L1TStage2InputPatternWriter::endJob() { //frames per event @@ -299,38 +284,6 @@ void L1TStage2InputPatternWriter::endJob() { } } -// ------------ method called when starting to processes a run ------------ -/* -void -L1TStage2InputPatternWriter::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -L1TStage2InputPatternWriter::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -L1TStage2InputPatternWriter::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -L1TStage2InputPatternWriter::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TStage2InputPatternWriter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer1Producer.cc b/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer1Producer.cc index 1428e77c55e09..ddeed6650b81f 100644 --- a/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer1Producer.cc +++ b/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer1Producer.cc @@ -71,9 +71,6 @@ class L1TStage2Layer1Producer : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; void beginRun(edm::Run const&, edm::EventSetup const&) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- @@ -355,27 +352,6 @@ void L1TStage2Layer1Producer::beginRun(edm::Run const& iRun, edm::EventSetup con } } -// ------------ method called when ending the processing of a run ------------ -void L1TStage2Layer1Producer::endRun(edm::Run const&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -L1TStage2Layer1Producer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup cons -t&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -L1TStage2Layer1Producer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const& -) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TStage2Layer1Producer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer2Producer.cc b/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer2Producer.cc index 2d49330b96462..b13c93ef24889 100644 --- a/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer2Producer.cc +++ b/L1Trigger/L1TCalorimeter/plugins/L1TStage2Layer2Producer.cc @@ -65,9 +65,6 @@ class L1TStage2Layer2Producer : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; void beginRun(edm::Run const&, edm::EventSetup const&) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- @@ -314,27 +311,6 @@ void L1TStage2Layer2Producer::beginRun(edm::Run const& iRun, edm::EventSetup con } } -// ------------ method called when ending the processing of a run ------------ -void L1TStage2Layer2Producer::endRun(edm::Run const&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -L1TStage2Layer2Producer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup cons -t&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -L1TStage2Layer2Producer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const& -) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TStage2Layer2Producer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TCalorimeter/python/caloParamsHI_2023_v0_4_2_cfi.py b/L1Trigger/L1TCalorimeter/python/caloParamsHI_2023_v0_4_2_cfi.py new file mode 100644 index 0000000000000..f769df6d05dbd --- /dev/null +++ b/L1Trigger/L1TCalorimeter/python/caloParamsHI_2023_v0_4_2_cfi.py @@ -0,0 +1,128 @@ +import FWCore.ParameterSet.Config as cms + +from L1Trigger.L1TCalorimeter.caloParams_cfi import caloParamsSource +import L1Trigger.L1TCalorimeter.caloParams_cfi +caloStage2Params = L1Trigger.L1TCalorimeter.caloParams_cfi.caloParams.clone( + + # EG + egEtaCut = 24, + egHcalThreshold = 0., + egTrimmingLUTFile = "L1Trigger/L1TCalorimeter/data/egTrimmingLUT_10_v16.01.19.txt", + egHOverEcutBarrel = 1, + egHOverEcutEndcap = 1, + egBypassExtHOverE = 1, + egBypassShape = 1, + egBypassECALFG = 1, + + egMaxHOverELUTFile = "L1Trigger/L1TCalorimeter/data/HoverEIdentification_0.995_v15.12.23.txt", + egCompressShapesLUTFile = "L1Trigger/L1TCalorimeter/data/egCompressLUT_v4.txt", + egShapeIdType = "compressed", + egShapeIdLUTFile = "L1Trigger/L1TCalorimeter/data/shapeIdentification_adapt0.99_compressedieta_compressedE_compressedshape_v15.12.08.txt", #Not used any more in the current emulator version, merged with calibration LUT + + egIsolationType = "compressed", + egIsoLUTFile = "L1Trigger/L1TCalorimeter/data/EG_Iso_LUT_Flat_WP_v2_Tight1358_20p0_0p7_40p0_v1_APR23.txt", + egIsoLUTFile2 = "L1Trigger/L1TCalorimeter/data/EG_Iso_LUT_Flat_WP_v2_Loose610_10p0_0p7_40p0_v1_APR23.txt", + + egIsoVetoNrTowersPhi = 2, + egPUSParams = cms.vdouble(1,4,32), #Isolation window in firmware goes up to abs(ieta)=32 for now + egCalibrationType = "compressed", + egCalibrationVersion = 0, + egCalibrationLUTFile = "L1Trigger/L1TCalorimeter/data/EG_Calibration_LUT_correctedEtCalibLUT_v1_APR2023.txt", + + # Tau + isoTauEtaMax = 25, + tauSeedThreshold = 0., + tauIsoLUTFile = "L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_2023_calibThr1p7_V2gs_effMin0p9_eMin16_eMax60.txt", + tauIsoLUTFile2 = "L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_2023_calibThr1p7_V2gs_effMin0p9_eMin16_eMax60.txt", + tauCalibrationLUTFile = "L1Trigger/L1TCalorimeter/data/Tau_Cal_LUT_2023_calibThr1p7_V2.txt", + tauCompressLUTFile = "L1Trigger/L1TCalorimeter/data/tauCompressAllLUT_12bit_v3.txt", + tauPUSParams = [1,4,32], + + # jets + jetSeedThreshold = 2.5, + jetPUSType = "PhiRing1", + jetPUSUsePhiRing = 1, + + # Calibration options + jetCalibrationType = "LUT", + jetCompressPtLUTFile = "L1Trigger/L1TCalorimeter/data/lut_pt_compress_2017v1.txt", + jetCompressEtaLUTFile = "L1Trigger/L1TCalorimeter/data/lut_eta_compress_2017v1.txt", + jetCalibrationLUTFile = "L1Trigger/L1TCalorimeter/data/lut_calib_2023v0_ECALZS_PhiRing.txt", + + + # sums: 0=ET, 1=HT, 2=MET, 3=MHT + etSumEtaMin = [1, 1, 1, 1, 1], + etSumEtaMax = [28, 26, 28, 26, 28], + etSumEtThreshold = [0., 30., 0., 30., 0.], # only 2nd (HT) and 4th (MHT) values applied + etSumMetPUSType = "LUT", # et threshold from this LUT supercedes et threshold in line above + etSumBypassEttPUS = 1, + etSumBypassEcalSumPUS = 1, + + etSumMetPUSLUTFile = "L1Trigger/L1TCalorimeter/data/metPumLUT_2023v0_puppiMet_fit.txt", + + etSumCentralityUpper = [5.5, 37.0, 182.5, 502.5, 1244.0, 6000.0, 6000.0, 65535.0], + etSumCentralityLower = [0.0, 5.0, 28.5, 148.0, 427.0, 4662.5, 4810.5, 65535.0], + + # Layer 1 SF + layer1ECalScaleETBins = cms.vint32([3, 6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]), + layer1ECalScaleFactors = cms.vdouble([ + 1.12, 1.13, 1.13, 1.12, 1.12, 1.12, 1.13, 1.12, 1.13, 1.12, 1.13, 1.13, 1.14, 1.13, 1.13, 1.13, 1.14, 1.26, 1.11, 1.20, 1.21, 1.22, 1.19, 1.20, 1.19, 0.00, 0.00, 0.00, + 1.12, 1.13, 1.13, 1.12, 1.12, 1.12, 1.13, 1.12, 1.13, 1.12, 1.13, 1.13, 1.14, 1.13, 1.13, 1.13, 1.14, 1.26, 1.11, 1.20, 1.21, 1.22, 1.19, 1.20, 1.19, 1.22, 0.00, 0.00, + 1.08, 1.09, 1.08, 1.08, 1.11, 1.08, 1.09, 1.09, 1.09, 1.09, 1.15, 1.09, 1.10, 1.10, 1.10, 1.10, 1.10, 1.23, 1.07, 1.15, 1.14, 1.16, 1.14, 1.14, 1.15, 1.14, 1.14, 0.00, + 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.07, 1.07, 1.07, 1.07, 1.07, 1.08, 1.07, 1.09, 1.08, 1.17, 1.06, 1.11, 1.10, 1.13, 1.10, 1.10, 1.11, 1.11, 1.11, 1.09, + 1.04, 1.05, 1.04, 1.05, 1.04, 1.05, 1.06, 1.06, 1.05, 1.05, 1.05, 1.06, 1.06, 1.06, 1.06, 1.06, 1.07, 1.15, 1.04, 1.09, 1.09, 1.10, 1.09, 1.09, 1.10, 1.10, 1.10, 1.08, + 1.04, 1.03, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.05, 1.06, 1.04, 1.05, 1.05, 1.13, 1.03, 1.07, 1.08, 1.08, 1.08, 1.07, 1.07, 1.09, 1.08, 1.07, + 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.04, 1.04, 1.05, 1.05, 1.05, 1.05, 1.05, 1.12, 1.03, 1.06, 1.06, 1.08, 1.07, 1.07, 1.06, 1.08, 1.07, 1.06, + 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.04, 1.04, 1.04, 1.04, 1.04, 1.03, 1.10, 1.02, 1.05, 1.06, 1.06, 1.06, 1.06, 1.05, 1.06, 1.06, 1.06, + 1.02, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.04, 1.03, 1.03, 1.02, 1.07, 1.02, 1.04, 1.04, 1.05, 1.06, 1.05, 1.05, 1.06, 1.06, 1.05, + 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.09, 1.02, 1.04, 1.05, 1.05, 1.05, 1.05, 1.04, 1.05, 1.06, 1.05, + 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.08, 1.01, 1.04, 1.04, 1.05, 1.05, 1.04, 1.04, 1.05, 1.06, 1.05, + 1.01, 1.01, 1.01, 1.01, 1.01, 1.01, 1.02, 1.01, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.06, 1.01, 1.04, 1.04, 1.05, 1.04, 1.03, 1.03, 1.04, 1.05, 1.04, + 1.01, 1.00, 1.01, 1.01, 1.01, 1.01, 1.01, 1.00, 1.01, 1.02, 1.01, 1.01, 1.02, 1.02, 1.02, 1.02, 1.03, 1.04, 1.01, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.00, 1.01, + 1.02, 1.00, 1.00, 1.02, 1.00, 1.01, 1.01, 1.00, 1.00, 1.02, 1.01, 1.01, 1.02, 1.02, 1.02, 1.02, 1.02, 1.04, 1.01, 1.03, 1.03, 1.03, 1.03, 1.02, 1.02, 1.02, 1.00, 1.01 + ]), + + layer1HCalScaleETBins = cms.vint32([1, 6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]), + layer1HCalScaleFactors = cms.vdouble([ + 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, # ZERO-SUPPRESS <1GeV (i.e. 0.5GeV) IN THE BARREL ONLY (ieta<=15 == eta<=1.305) + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 + ]), + + layer1HFScaleETBins = cms.vint32([6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]), + layer1HFScaleFactors = cms.vdouble([ + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 + ]), + + # HCal FB LUT + layer1HCalFBLUTUpper = cms.vuint32([ + 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, + ]), + + layer1HCalFBLUTLower = cms.vuint32([ + 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, + ]) +) diff --git a/L1Trigger/L1TCalorimeter/python/caloParamsHI_2023_v0_4_3_cfi.py b/L1Trigger/L1TCalorimeter/python/caloParamsHI_2023_v0_4_3_cfi.py new file mode 100644 index 0000000000000..b229997cb4d82 --- /dev/null +++ b/L1Trigger/L1TCalorimeter/python/caloParamsHI_2023_v0_4_3_cfi.py @@ -0,0 +1,128 @@ +import FWCore.ParameterSet.Config as cms + +from L1Trigger.L1TCalorimeter.caloParams_cfi import caloParamsSource +import L1Trigger.L1TCalorimeter.caloParams_cfi +caloStage2Params = L1Trigger.L1TCalorimeter.caloParams_cfi.caloParams.clone( + + # EG + egEtaCut = 24, + egHcalThreshold = 0., + egTrimmingLUTFile = "L1Trigger/L1TCalorimeter/data/egTrimmingLUT_10_v16.01.19.txt", + egHOverEcutBarrel = 1, + egHOverEcutEndcap = 1, + egBypassExtHOverE = 1, + egBypassShape = 1, + egBypassECALFG = 1, + + egMaxHOverELUTFile = "L1Trigger/L1TCalorimeter/data/HoverEIdentification_0.995_v15.12.23.txt", + egCompressShapesLUTFile = "L1Trigger/L1TCalorimeter/data/egCompressLUT_v4.txt", + egShapeIdType = "compressed", + egShapeIdLUTFile = "L1Trigger/L1TCalorimeter/data/shapeIdentification_adapt0.99_compressedieta_compressedE_compressedshape_v15.12.08.txt", #Not used any more in the current emulator version, merged with calibration LUT + + egIsolationType = "compressed", + egIsoLUTFile = "L1Trigger/L1TCalorimeter/data/EG_Iso_LUT_Flat_WP_v2_Tight1358_20p0_0p7_40p0_v1_APR23.txt", + egIsoLUTFile2 = "L1Trigger/L1TCalorimeter/data/EG_Iso_LUT_Flat_WP_v2_Loose610_10p0_0p7_40p0_v1_APR23.txt", + + egIsoVetoNrTowersPhi = 2, + egPUSParams = cms.vdouble(1,4,32), #Isolation window in firmware goes up to abs(ieta)=32 for now + egCalibrationType = "compressed", + egCalibrationVersion = 0, + egCalibrationLUTFile = "L1Trigger/L1TCalorimeter/data/EG_Calibration_LUT_correctedEtCalibLUT_v1_APR2023.txt", + + # Tau + isoTauEtaMax = 25, + tauSeedThreshold = 0., + tauIsoLUTFile = "L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_2023_calibThr1p7_V2gs_effMin0p9_eMin16_eMax60.txt", + tauIsoLUTFile2 = "L1Trigger/L1TCalorimeter/data/Tau_Iso_LUT_2023_calibThr1p7_V2gs_effMin0p9_eMin16_eMax60.txt", + tauCalibrationLUTFile = "L1Trigger/L1TCalorimeter/data/Tau_Cal_LUT_2023_calibThr1p7_V2.txt", + tauCompressLUTFile = "L1Trigger/L1TCalorimeter/data/tauCompressAllLUT_12bit_v3.txt", + tauPUSParams = [1,4,32], + + # jets + jetSeedThreshold = 2.5, + jetPUSType = "PhiRing1", + jetPUSUsePhiRing = 1, + + # Calibration options + jetCalibrationType = "LUT", + jetCompressPtLUTFile = "L1Trigger/L1TCalorimeter/data/lut_pt_compress_2017v1.txt", + jetCompressEtaLUTFile = "L1Trigger/L1TCalorimeter/data/lut_eta_compress_2017v1.txt", + jetCalibrationLUTFile = "L1Trigger/L1TCalorimeter/data/lut_calib_2023v0_ECALZS_PhiRing.txt", + + + # sums: 0=ET, 1=HT, 2=MET, 3=MHT + etSumEtaMin = [1, 1, 1, 1, 1], + etSumEtaMax = [28, 26, 28, 26, 28], + etSumEtThreshold = [0., 30., 0., 30., 0.], # only 2nd (HT) and 4th (MHT) values applied + etSumMetPUSType = "LUT", # et threshold from this LUT supercedes et threshold in line above + etSumBypassEttPUS = 1, + etSumBypassEcalSumPUS = 1, + + etSumMetPUSLUTFile = "L1Trigger/L1TCalorimeter/data/metPumLUT_2023v0_puppiMet_fit.txt", + + etSumCentralityUpper = [5.5, 37.0, 182.5, 502.5, 1244.0, 6000.0, 6000.0, 65535.0], + etSumCentralityLower = [0.0, 5.0, 28.5, 148.0, 427.0, 4547.0, 4736.0, 65535.0], + + # Layer 1 SF + layer1ECalScaleETBins = cms.vint32([3, 6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]), + layer1ECalScaleFactors = cms.vdouble([ + 1.12, 1.13, 1.13, 1.12, 1.12, 1.12, 1.13, 1.12, 1.13, 1.12, 1.13, 1.13, 1.14, 1.13, 1.13, 1.13, 1.14, 1.26, 1.11, 1.20, 1.21, 1.22, 1.19, 1.20, 1.19, 0.00, 0.00, 0.00, + 1.12, 1.13, 1.13, 1.12, 1.12, 1.12, 1.13, 1.12, 1.13, 1.12, 1.13, 1.13, 1.14, 1.13, 1.13, 1.13, 1.14, 1.26, 1.11, 1.20, 1.21, 1.22, 1.19, 1.20, 1.19, 1.22, 0.00, 0.00, + 1.08, 1.09, 1.08, 1.08, 1.11, 1.08, 1.09, 1.09, 1.09, 1.09, 1.15, 1.09, 1.10, 1.10, 1.10, 1.10, 1.10, 1.23, 1.07, 1.15, 1.14, 1.16, 1.14, 1.14, 1.15, 1.14, 1.14, 0.00, + 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.06, 1.07, 1.07, 1.07, 1.07, 1.07, 1.08, 1.07, 1.09, 1.08, 1.17, 1.06, 1.11, 1.10, 1.13, 1.10, 1.10, 1.11, 1.11, 1.11, 1.09, + 1.04, 1.05, 1.04, 1.05, 1.04, 1.05, 1.06, 1.06, 1.05, 1.05, 1.05, 1.06, 1.06, 1.06, 1.06, 1.06, 1.07, 1.15, 1.04, 1.09, 1.09, 1.10, 1.09, 1.09, 1.10, 1.10, 1.10, 1.08, + 1.04, 1.03, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.04, 1.05, 1.06, 1.04, 1.05, 1.05, 1.13, 1.03, 1.07, 1.08, 1.08, 1.08, 1.07, 1.07, 1.09, 1.08, 1.07, + 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.04, 1.04, 1.05, 1.05, 1.05, 1.05, 1.05, 1.12, 1.03, 1.06, 1.06, 1.08, 1.07, 1.07, 1.06, 1.08, 1.07, 1.06, + 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.04, 1.04, 1.04, 1.04, 1.04, 1.03, 1.10, 1.02, 1.05, 1.06, 1.06, 1.06, 1.06, 1.05, 1.06, 1.06, 1.06, + 1.02, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.04, 1.03, 1.03, 1.02, 1.07, 1.02, 1.04, 1.04, 1.05, 1.06, 1.05, 1.05, 1.06, 1.06, 1.05, + 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.09, 1.02, 1.04, 1.05, 1.05, 1.05, 1.05, 1.04, 1.05, 1.06, 1.05, + 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.08, 1.01, 1.04, 1.04, 1.05, 1.05, 1.04, 1.04, 1.05, 1.06, 1.05, + 1.01, 1.01, 1.01, 1.01, 1.01, 1.01, 1.02, 1.01, 1.02, 1.02, 1.02, 1.02, 1.03, 1.03, 1.03, 1.03, 1.03, 1.06, 1.01, 1.04, 1.04, 1.05, 1.04, 1.03, 1.03, 1.04, 1.05, 1.04, + 1.01, 1.00, 1.01, 1.01, 1.01, 1.01, 1.01, 1.00, 1.01, 1.02, 1.01, 1.01, 1.02, 1.02, 1.02, 1.02, 1.03, 1.04, 1.01, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.03, 1.00, 1.01, + 1.02, 1.00, 1.00, 1.02, 1.00, 1.01, 1.01, 1.00, 1.00, 1.02, 1.01, 1.01, 1.02, 1.02, 1.02, 1.02, 1.02, 1.04, 1.01, 1.03, 1.03, 1.03, 1.03, 1.02, 1.02, 1.02, 1.00, 1.01 + ]), + + layer1HCalScaleETBins = cms.vint32([1, 6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]), + layer1HCalScaleFactors = cms.vdouble([ + 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, # ZERO-SUPPRESS <1GeV (i.e. 0.5GeV) IN THE BARREL ONLY (ieta<=15 == eta<=1.305) + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 + ]), + + layer1HFScaleETBins = cms.vint32([6, 9, 12, 15, 20, 25, 30, 35, 40, 45, 55, 70, 256]), + layer1HFScaleFactors = cms.vdouble([ + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, + 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 + ]), + + # HCal FB LUT + layer1HCalFBLUTUpper = cms.vuint32([ + 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, + ]), + + layer1HCalFBLUTLower = cms.vuint32([ + 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, 0xBBBABBBA, + ]) +) diff --git a/L1Trigger/L1TCalorimeter/python/caloParams_cfi.py b/L1Trigger/L1TCalorimeter/python/caloParams_cfi.py index abbab772c6e9b..29bfc87f44d35 100644 --- a/L1Trigger/L1TCalorimeter/python/caloParams_cfi.py +++ b/L1Trigger/L1TCalorimeter/python/caloParams_cfi.py @@ -142,7 +142,6 @@ minimumBiasThresholds = cms.vint32(0, 0, 0, 0), centralityLUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/centralityLUT_stage1.txt"), q2LUTFile = cms.FileInPath("L1Trigger/L1TCalorimeter/data/q2LUT_stage1.txt"), - zdcLUTFile = cms.FileInPath("L1Trigger/L1TZDC/data/zdcLUT_HI_v0_1.txt"), # HCal FB LUT layer1HCalFBLUTUpper = cms.vuint32([ diff --git a/L1Trigger/L1TGEM/plugins/GEMPadDigiClusterProducer.cc b/L1Trigger/L1TGEM/plugins/GEMPadDigiClusterProducer.cc index 0c355bc86afaa..ce609404b0116 100644 --- a/L1Trigger/L1TGEM/plugins/GEMPadDigiClusterProducer.cc +++ b/L1Trigger/L1TGEM/plugins/GEMPadDigiClusterProducer.cc @@ -33,7 +33,7 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/PluginManager/interface/ModuleDef.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" @@ -57,7 +57,7 @@ #include #include -class GEMPadDigiClusterProducer : public edm::stream::EDProducer<> { +class GEMPadDigiClusterProducer : public edm::global::EDProducer<> { public: typedef std::vector GEMPadDigiClusters; typedef std::map GEMPadDigiClusterContainer; @@ -66,20 +66,19 @@ class GEMPadDigiClusterProducer : public edm::stream::EDProducer<> { ~GEMPadDigiClusterProducer() override; - void beginRun(const edm::Run&, const edm::EventSetup&) override; - - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void buildClusters(const GEMPadDigiCollection& pads, GEMPadDigiClusterContainer& out_clusters) const; - void selectClusters(const GEMPadDigiClusterContainer& in_clusters, GEMPadDigiClusterCollection& out) const; + GEMPadDigiClusterContainer buildClusters(const GEMPadDigiCollection& pads, const GEMGeometry&) const; + GEMPadDigiClusterCollection selectClusters(const GEMPadDigiClusterContainer& in_clusters, const GEMGeometry&) const; template void checkValid(const T& cluster, const GEMDetId& id) const; /// Name of input digi Collection edm::EDGetTokenT pad_token_; + edm::EDPutTokenT put_token_; edm::ESGetToken geom_token_; edm::InputTag pads_; @@ -93,11 +92,9 @@ class GEMPadDigiClusterProducer : public edm::stream::EDProducer<> { unsigned int maxClustersOHGE21_; unsigned int maxClusterSize_; bool sendOverflowClusters_; - - const GEMGeometry* geometry_; }; -GEMPadDigiClusterProducer::GEMPadDigiClusterProducer(const edm::ParameterSet& ps) : geometry_(nullptr) { +GEMPadDigiClusterProducer::GEMPadDigiClusterProducer(const edm::ParameterSet& ps) { pads_ = ps.getParameter("InputCollection"); nPartitionsGE11_ = ps.getParameter("nPartitionsGE11"); nPartitionsGE21_ = ps.getParameter("nPartitionsGE21"); @@ -116,10 +113,9 @@ GEMPadDigiClusterProducer::GEMPadDigiClusterProducer(const edm::ParameterSet& ps } pad_token_ = consumes(pads_); - geom_token_ = esConsumes(); + geom_token_ = esConsumes(); - produces(); - consumes(pads_); + put_token_ = produces(); } GEMPadDigiClusterProducer::~GEMPadDigiClusterProducer() {} @@ -141,36 +137,24 @@ void GEMPadDigiClusterProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions.add("simMuonGEMPadDigiClustersDef", desc); } -void GEMPadDigiClusterProducer::beginRun(const edm::Run& run, const edm::EventSetup& eventSetup) { - edm::ESHandle hGeom = eventSetup.getHandle(geom_token_); - geometry_ = &*hGeom; -} - -void GEMPadDigiClusterProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) { - edm::Handle hpads; - e.getByToken(pad_token_, hpads); +void GEMPadDigiClusterProducer::produce(edm::StreamID, edm::Event& e, const edm::EventSetup& eventSetup) const { + auto const& geometry = eventSetup.getData(geom_token_); - // Create empty output - std::unique_ptr pClusters(new GEMPadDigiClusterCollection()); + auto const& pads = e.get(pad_token_); // build the proto clusters (per partition) - GEMPadDigiClusterContainer proto_clusters; - buildClusters(*(hpads.product()), proto_clusters); + GEMPadDigiClusterContainer proto_clusters = buildClusters(pads, geometry); // sort and select clusters per chamber, per OH, per partition number and per pad number - selectClusters(proto_clusters, *pClusters); - - // store them in the event - e.put(std::move(pClusters)); + e.emplace(put_token_, selectClusters(proto_clusters, geometry)); } -void GEMPadDigiClusterProducer::buildClusters(const GEMPadDigiCollection& det_pads, - GEMPadDigiClusterContainer& proto_clusters) const { - // clear the container - proto_clusters.clear(); +GEMPadDigiClusterProducer::GEMPadDigiClusterContainer GEMPadDigiClusterProducer::buildClusters( + const GEMPadDigiCollection& det_pads, const GEMGeometry& geometry) const { + GEMPadDigiClusterContainer proto_clusters; // construct clusters - for (const auto& part : geometry_->etaPartitions()) { + for (const auto& part : geometry.etaPartitions()) { // clusters are not build for ME0 // -> ignore hits from station 0 if (part->isME0()) @@ -228,11 +212,13 @@ void GEMPadDigiClusterProducer::buildClusters(const GEMPadDigiCollection& det_pa proto_clusters.emplace(part->id(), all_pad_clusters); } // end of partition loop + return proto_clusters; } -void GEMPadDigiClusterProducer::selectClusters(const GEMPadDigiClusterContainer& proto_clusters, - GEMPadDigiClusterCollection& out_clusters) const { - for (const auto& ch : geometry_->chambers()) { +GEMPadDigiClusterCollection GEMPadDigiClusterProducer::selectClusters(const GEMPadDigiClusterContainer& proto_clusters, + const GEMGeometry& geometry) const { + GEMPadDigiClusterCollection out_clusters; + for (const auto& ch : geometry.chambers()) { const unsigned nOH = ch->id().isGE11() ? nOHGE11_ : nOHGE21_; const unsigned nPartitions = ch->id().isGE11() ? nPartitionsGE11_ : nPartitionsGE21_; const unsigned nEtaPerPartition = ch->nEtaPartitions() / (nPartitions * nOH); @@ -264,6 +250,7 @@ void GEMPadDigiClusterProducer::selectClusters(const GEMPadDigiClusterContainer& } // end of clusterizer partition loop } // end of OH loop } // end of chamber loop + return out_clusters; } template diff --git a/L1Trigger/L1TGEM/plugins/ME0PadDigiProducer.cc b/L1Trigger/L1TGEM/plugins/ME0PadDigiProducer.cc index 7202358762e24..33e5346cfdc87 100644 --- a/L1Trigger/L1TGEM/plugins/ME0PadDigiProducer.cc +++ b/L1Trigger/L1TGEM/plugins/ME0PadDigiProducer.cc @@ -1,4 +1,4 @@ -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/MakerMacros.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ConsumesCollector.h" @@ -21,59 +21,45 @@ /// \class ME0PadDigiProducer -class ME0PadDigiProducer : public edm::stream::EDProducer<> { +class ME0PadDigiProducer : public edm::global::EDProducer<> { public: explicit ME0PadDigiProducer(const edm::ParameterSet& ps); - ~ME0PadDigiProducer() override; - - void beginRun(const edm::Run&, const edm::EventSetup&) override; - - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: - void buildPads(const ME0DigiCollection& digis, ME0PadDigiCollection& out_pads) const; + ME0PadDigiCollection buildPads(const ME0DigiCollection& digis, const ME0Geometry& geometry) const; /// Name of input digi Collection edm::EDGetTokenT digi_token_; edm::InputTag digis_; edm::ESGetToken geom_token_; - - const ME0Geometry* geometry_; + edm::EDPutTokenT put_token_; }; -ME0PadDigiProducer::ME0PadDigiProducer(const edm::ParameterSet& ps) : geometry_(nullptr) { +ME0PadDigiProducer::ME0PadDigiProducer(const edm::ParameterSet& ps) { digis_ = ps.getParameter("InputCollection"); digi_token_ = consumes(digis_); - geom_token_ = esConsumes(); + geom_token_ = esConsumes(); - produces(); + put_token_ = produces(); } -ME0PadDigiProducer::~ME0PadDigiProducer() {} +void ME0PadDigiProducer::produce(edm::StreamID, edm::Event& e, const edm::EventSetup& eventSetup) const { + auto const& geometry = eventSetup.getData(geom_token_); -void ME0PadDigiProducer::beginRun(const edm::Run& run, const edm::EventSetup& eventSetup) { - edm::ESHandle hGeom = eventSetup.getHandle(geom_token_); - geometry_ = &*hGeom; -} - -void ME0PadDigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) { edm::Handle hdigis; e.getByToken(digi_token_, hdigis); - // Create empty output - std::unique_ptr pPads(new ME0PadDigiCollection()); - - // build the pads - buildPads(*(hdigis.product()), *pPads); - - // store them in the event - e.put(std::move(pPads)); + // build the pads and store them in the event + e.emplace(put_token_, buildPads(*(hdigis.product()), geometry)); } -void ME0PadDigiProducer::buildPads(const ME0DigiCollection& det_digis, ME0PadDigiCollection& out_pads) const { - for (const auto& p : geometry_->etaPartitions()) { +ME0PadDigiCollection ME0PadDigiProducer::buildPads(const ME0DigiCollection& det_digis, + const ME0Geometry& geometry) const { + ME0PadDigiCollection out_pads; + for (const auto& p : geometry.etaPartitions()) { // set of pairs, sorted first by pad then by bx std::set > proto_pads; @@ -91,6 +77,7 @@ void ME0PadDigiProducer::buildPads(const ME0DigiCollection& det_digis, ME0PadDig out_pads.insertDigi(p->id(), pad_digi); } } + return out_pads; } DEFINE_FWK_MODULE(ME0PadDigiProducer); diff --git a/L1Trigger/L1TGlobal/plugins/L1TGlobalAnalyzer.cc b/L1Trigger/L1TGlobal/plugins/L1TGlobalAnalyzer.cc index d396a6fbb358b..d4d8429528dec 100644 --- a/L1Trigger/L1TGlobal/plugins/L1TGlobalAnalyzer.cc +++ b/L1Trigger/L1TGlobal/plugins/L1TGlobalAnalyzer.cc @@ -53,19 +53,12 @@ namespace l1t { class L1TGlobalAnalyzer : public edm::one::EDAnalyzer<> { public: explicit L1TGlobalAnalyzer(const edm::ParameterSet&); - ~L1TGlobalAnalyzer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void beginJob() override; void analyze(const edm::Event&, const edm::EventSetup&) override; - void endJob() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetToken m_gmuToken; @@ -255,11 +248,6 @@ namespace l1t { typeStr_.push_back("sum"); } - L1TGlobalAnalyzer::~L1TGlobalAnalyzer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) - } - // // member functions // @@ -986,41 +974,6 @@ namespace l1t { dmxVGtDir_.make("hDmxVsGTSumEt_HFM1", "Dmx versus GT HFM1", 16, -0.5, 15.5, 16, -0.5, 15.5); } - // ------------ method called once each job just after ending the event loop ------------ - void L1TGlobalAnalyzer::endJob() {} - - // ------------ method called when starting to processes a run ------------ - /* -void -L1TGlobalAnalyzer::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - - // ------------ method called when ending the processing of a run ------------ - /* -void -L1TGlobalAnalyzer::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - - // ------------ method called when starting to processes a luminosity block ------------ - /* -void -L1TGlobalAnalyzer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - - // ------------ method called when ending the processing of a luminosity block ------------ - /* -void -L1TGlobalAnalyzer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TGlobalAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TGlobal/plugins/L1TUtmTriggerMenuDumper.cc b/L1Trigger/L1TGlobal/plugins/L1TUtmTriggerMenuDumper.cc index 54bb2e78a87f4..1dbf391d7e7b0 100644 --- a/L1Trigger/L1TGlobal/plugins/L1TUtmTriggerMenuDumper.cc +++ b/L1Trigger/L1TGlobal/plugins/L1TUtmTriggerMenuDumper.cc @@ -34,10 +34,9 @@ using namespace edm; using namespace std; using namespace tmeventsetup; -class L1TUtmTriggerMenuDumper : public one::EDAnalyzer { +class L1TUtmTriggerMenuDumper : public one::EDAnalyzer { public: explicit L1TUtmTriggerMenuDumper(const ParameterSet&); - ~L1TUtmTriggerMenuDumper() override; static void fillDescriptions(ConfigurationDescriptions& descriptions); @@ -48,16 +47,12 @@ class L1TUtmTriggerMenuDumper : public one::EDAnalyzer m_l1TriggerMenuToken; }; L1TUtmTriggerMenuDumper::L1TUtmTriggerMenuDumper(const ParameterSet& iConfig) : m_l1TriggerMenuToken(esConsumes()) {} -L1TUtmTriggerMenuDumper::~L1TUtmTriggerMenuDumper() {} - void L1TUtmTriggerMenuDumper::analyze(Event const& iEvent, EventSetup const& iSetup) {} void L1TUtmTriggerMenuDumper::beginJob() { cout << "INFO: L1TUtmTriggerMenuDumper module beginJob called.\n"; } @@ -187,10 +182,6 @@ void L1TUtmTriggerMenuDumper::beginRun(Run const& run, EventSetup const& iSetup) void L1TUtmTriggerMenuDumper::endRun(Run const&, EventSetup const&) {} -void L1TUtmTriggerMenuDumper::beginLuminosityBlock(LuminosityBlock const&, EventSetup const&) {} - -void L1TUtmTriggerMenuDumper::endLuminosityBlock(LuminosityBlock const&, EventSetup const&) {} - void L1TUtmTriggerMenuDumper::fillDescriptions(ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation // Please change this to state exactly what you do use, even if it is no parameters diff --git a/L1Trigger/L1THGCal/test/HGCalTriggerGeomTesterV9Imp3.cc b/L1Trigger/L1THGCal/test/HGCalTriggerGeomTesterV9Imp3.cc index 93309557c6133..1265197703e1a 100644 --- a/L1Trigger/L1THGCal/test/HGCalTriggerGeomTesterV9Imp3.cc +++ b/L1Trigger/L1THGCal/test/HGCalTriggerGeomTesterV9Imp3.cc @@ -122,6 +122,8 @@ class HGCalTriggerGeomTesterV9Imp3 : public edm::stream::EDAnalyzer<> { int triggerCellLayer_ = 0; int triggerCellWaferU_ = 0; int triggerCellWaferV_ = 0; + int triggerCellWaferPart_ = -1; + int triggerCellWaferOrient_ = -1; int triggerCellU_ = 0; int triggerCellV_ = 0; int triggerCellIEta_ = 0; @@ -300,6 +302,8 @@ HGCalTriggerGeomTesterV9Imp3::HGCalTriggerGeomTesterV9Imp3(const edm::ParameterS treeTriggerCells_->Branch("layer", &triggerCellLayer_, "layer/I"); treeTriggerCells_->Branch("waferu", &triggerCellWaferU_, "waferu/I"); treeTriggerCells_->Branch("waferv", &triggerCellWaferV_, "waferv/I"); + treeTriggerCells_->Branch("waferpart", &triggerCellWaferPart_, "waferpart/I"); + treeTriggerCells_->Branch("waferorient", &triggerCellWaferOrient_, "waferorient/I"); treeTriggerCells_->Branch("triggercellu", &triggerCellU_, "triggercellu/I"); treeTriggerCells_->Branch("triggercellv", &triggerCellV_, "triggercellv/I"); treeTriggerCells_->Branch("triggercellieta", &triggerCellIEta_, "triggercellieta/I"); @@ -977,7 +981,12 @@ void HGCalTriggerGeomTesterV9Imp3::fillTriggerGeometry() // Loop over trigger cells edm::LogPrint("TreeFilling") << "Filling trigger cells tree"; for (const auto& triggercell_cells : trigger_cells) { + if (!triggercell_cells.second.size()) { + throw cms::Exception("BadGeometry") << "HGCalTriggerGeometry: No cells in trigger cell!"; + } + DetId id(triggercell_cells.first); + std::tuple wafertype; GlobalPoint position = triggerGeometry_->getTriggerCellPosition(triggercell_cells.first); triggerCellId_ = id.rawId(); if (id.det() == DetId::HGCalHSc) { @@ -989,6 +998,8 @@ void HGCalTriggerGeomTesterV9Imp3::fillTriggerGeometry() triggerCellIPhi_ = id_sc.iphi(); triggerCellWaferU_ = 0; triggerCellWaferV_ = 0; + triggerCellWaferPart_ = -1; + triggerCellWaferOrient_ = -1; triggerCellU_ = 0; triggerCellV_ = 0; } else if (HFNoseTriggerDetId(triggercell_cells.first).det() == DetId::HGCalTrigger && @@ -1001,6 +1012,8 @@ void HGCalTriggerGeomTesterV9Imp3::fillTriggerGeometry() triggerCellIPhi_ = 0; triggerCellWaferU_ = id_nose_trig.waferU(); triggerCellWaferV_ = id_nose_trig.waferV(); + triggerCellWaferPart_ = -1; + triggerCellWaferOrient_ = -1; triggerCellU_ = id_nose_trig.triggerCellU(); triggerCellV_ = id_nose_trig.triggerCellV(); } else { @@ -1014,6 +1027,18 @@ void HGCalTriggerGeomTesterV9Imp3::fillTriggerGeometry() triggerCellWaferV_ = id_si_trig.waferV(); triggerCellU_ = id_si_trig.triggerCellU(); triggerCellV_ = id_si_trig.triggerCellV(); + + const HGCSiliconDetId& firstCellId(*triggercell_cells.second.begin()); + if (firstCellId.det() == DetId::HGCalEE) { + wafertype = triggerGeometry_->eeTopology().dddConstants().waferType(firstCellId, false); + } else if (firstCellId.det() == DetId::HGCalHSi) { + wafertype = triggerGeometry_->hsiTopology().dddConstants().waferType(firstCellId, false); + } else { + throw cms::Exception("BadGeometry") + << "HGCalTriggerGeometry: Found inconsistency in cell <-> trigger cell type mapping"; + } + triggerCellWaferPart_ = std::get<1>(wafertype); + triggerCellWaferOrient_ = std::get<2>(wafertype); } triggerCellX_ = position.x(); triggerCellY_ = position.y(); diff --git a/L1Trigger/L1THGCalUtilities/plugins/CaloTruthCellsProducer.cc b/L1Trigger/L1THGCalUtilities/plugins/CaloTruthCellsProducer.cc index d3200dfed83f7..c21f3e2e298f5 100644 --- a/L1Trigger/L1THGCalUtilities/plugins/CaloTruthCellsProducer.cc +++ b/L1Trigger/L1THGCalUtilities/plugins/CaloTruthCellsProducer.cc @@ -31,7 +31,6 @@ class CaloTruthCellsProducer : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginRun(const edm::Run&, const edm::EventSetup&) override; void produce(edm::Event&, edm::EventSetup const&) override; std::unordered_map makeHitMap(edm::Event const&, @@ -47,7 +46,6 @@ class CaloTruthCellsProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT> simHitsTokenHEfront_; edm::EDGetTokenT> simHitsTokenHEback_; edm::ESGetToken triggerGeomToken_; - edm::ESHandle triggerGeomHandle_; HGCalClusteringDummyImpl dummyClustering_; HGCalShowerShape showerShape_; @@ -74,24 +72,19 @@ CaloTruthCellsProducer::CaloTruthCellsProducer(edm::ParameterSet const& config) CaloTruthCellsProducer::~CaloTruthCellsProducer() {} -void CaloTruthCellsProducer::beginRun(const edm::Run& /*run*/, const edm::EventSetup& es) { - triggerGeomHandle_ = es.getHandle(triggerGeomToken_); -} - void CaloTruthCellsProducer::produce(edm::Event& event, edm::EventSetup const& setup) { - edm::Handle caloParticlesHandle; - event.getByToken(caloParticlesToken_, caloParticlesHandle); - auto const& caloParticles(*caloParticlesHandle); + auto caloParticlesHandle = event.getHandle(caloParticlesToken_); + auto const& caloParticles = *caloParticlesHandle; - edm::Handle triggerCellsHandle; - event.getByToken(triggerCellsToken_, triggerCellsHandle); - auto const& triggerCells(*triggerCellsHandle); + auto const& triggerCellsHandle = event.getHandle(triggerCellsToken_); + auto const& triggerCells = *triggerCellsHandle; - auto const& geometry(*triggerGeomHandle_); + auto const& geometry = setup.getData(triggerGeomToken_); + ; - dummyClustering_.setGeometry(triggerGeomHandle_.product()); - showerShape_.setGeometry(triggerGeomHandle_.product()); - triggerTools_.setGeometry(triggerGeomHandle_.product()); + dummyClustering_.setGeometry(&geometry); + showerShape_.setGeometry(&geometry); + triggerTools_.setGeometry(&geometry); std::unordered_map tcToCalo; diff --git a/L1Trigger/L1TMuon/plugins/L1TBMTFConverter.cc b/L1Trigger/L1TMuon/plugins/L1TBMTFConverter.cc index b7c82cacd7700..038f9b5978adc 100644 --- a/L1Trigger/L1TMuon/plugins/L1TBMTFConverter.cc +++ b/L1Trigger/L1TMuon/plugins/L1TBMTFConverter.cc @@ -44,17 +44,12 @@ using namespace l1t; class L1TBMTFConverter : public edm::stream::EDProducer<> { public: explicit L1TBMTFConverter(const edm::ParameterSet&); - ~L1TBMTFConverter() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(const edm::Run&, edm::EventSetup const&) override; - void endRun(const edm::Run&, edm::EventSetup const&) override; - void beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - void endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetTokenT m_barrelTfInputToken; edm::InputTag m_barrelTfInputTag; @@ -111,11 +106,6 @@ L1TBMTFConverter::L1TBMTFConverter(const edm::ParameterSet& iConfig) { ptMap_[31] = 280; } -L1TBMTFConverter::~L1TBMTFConverter() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -144,18 +134,6 @@ void L1TBMTFConverter::produce(edm::Event& iEvent, const edm::EventSetup& iSetup iEvent.put(std::move(convMuons), "ConvBMTFMuons"); } -// ------------ method called when starting to processes a run ------------ -void L1TBMTFConverter::beginRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a run ------------ -void L1TBMTFConverter::endRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void L1TBMTFConverter::beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void L1TBMTFConverter::endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TBMTFConverter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducer.cc b/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducer.cc index a8fde2a16727d..6711efe5d69e1 100644 --- a/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducer.cc +++ b/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducer.cc @@ -53,11 +53,6 @@ class L1TMicroGMTInputProducer : public edm::stream::EDProducer<> { private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(const edm::Run&, edm::EventSetup const&) override; - void endRun(const edm::Run&, edm::EventSetup const&) override; - void beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - void endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - void openFile(); void skipHeader(); int convertToInt(std::string& bitstr) const; @@ -297,18 +292,6 @@ void L1TMicroGMTInputProducer::produce(edm::Event& iEvent, const edm::EventSetup m_currEvt++; } -// ------------ method called when starting to processes a run ------------ -void L1TMicroGMTInputProducer::beginRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a run ------------ -void L1TMicroGMTInputProducer::endRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void L1TMicroGMTInputProducer::beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void L1TMicroGMTInputProducer::endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TMicroGMTInputProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducerFromGen.cc b/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducerFromGen.cc index 0262221af860b..966c34df1e783 100644 --- a/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducerFromGen.cc +++ b/L1Trigger/L1TMuon/plugins/L1TMicroGMTInputProducerFromGen.cc @@ -50,18 +50,12 @@ using namespace l1t; class L1TMicroGMTInputProducerFromGen : public edm::stream::EDProducer<> { public: explicit L1TMicroGMTInputProducerFromGen(const edm::ParameterSet&); - ~L1TMicroGMTInputProducerFromGen() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(const edm::Run&, edm::EventSetup const&) override; - void endRun(const edm::Run&, edm::EventSetup const&) override; - void beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - void endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - static bool compareMuons(const RegionalMuonCand&, const RegionalMuonCand&); // ----------member data --------------------------- @@ -93,11 +87,6 @@ L1TMicroGMTInputProducerFromGen::L1TMicroGMTInputProducerFromGen(const edm::Para produces("TriggerTowerSums"); } -L1TMicroGMTInputProducerFromGen::~L1TMicroGMTInputProducerFromGen() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -242,18 +231,6 @@ void L1TMicroGMTInputProducerFromGen::produce(edm::Event& iEvent, const edm::Eve m_currEvt++; } -// ------------ method called when starting to processes a run ------------ -void L1TMicroGMTInputProducerFromGen::beginRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a run ------------ -void L1TMicroGMTInputProducerFromGen::endRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void L1TMicroGMTInputProducerFromGen::beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void L1TMicroGMTInputProducerFromGen::endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TMicroGMTInputProducerFromGen::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TMuon/plugins/L1TMuonCaloSumProducer.cc b/L1Trigger/L1TMuon/plugins/L1TMuonCaloSumProducer.cc index 2147901201956..85c063aef847a 100644 --- a/L1Trigger/L1TMuon/plugins/L1TMuonCaloSumProducer.cc +++ b/L1Trigger/L1TMuon/plugins/L1TMuonCaloSumProducer.cc @@ -47,18 +47,12 @@ using namespace l1t; class L1TMuonCaloSumProducer : public edm::stream::EDProducer<> { public: explicit L1TMuonCaloSumProducer(const edm::ParameterSet&); - ~L1TMuonCaloSumProducer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(const edm::Run&, edm::EventSetup const&) override; - void endRun(const edm::Run&, edm::EventSetup const&) override; - void beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - void endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - edm::EDGetTokenT m_caloTowerToken; edm::InputTag m_caloLabel; }; @@ -83,11 +77,6 @@ L1TMuonCaloSumProducer::L1TMuonCaloSumProducer(const edm::ParameterSet& iConfig) produces("TriggerTower2x2s"); } -L1TMuonCaloSumProducer::~L1TMuonCaloSumProducer() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -191,18 +180,6 @@ void L1TMuonCaloSumProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.put(std::move(tower2x2s), "TriggerTower2x2s"); } -// ------------ method called when starting to processes a run ------------ -void L1TMuonCaloSumProducer::beginRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a run ------------ -void L1TMuonCaloSumProducer::endRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void L1TMuonCaloSumProducer::beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void L1TMuonCaloSumProducer::endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TMuonCaloSumProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc b/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc index 94378e8c43249..4353d7ec3aff7 100644 --- a/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc +++ b/L1Trigger/L1TMuon/plugins/L1TMuonProducer.cc @@ -67,9 +67,6 @@ class L1TMuonProducer : public edm::stream::EDProducer<> { void produce(edm::Event&, const edm::EventSetup&) override; void beginRun(edm::Run const&, edm::EventSetup const&) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; - void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; static bool compareMuons(const std::shared_ptr& mu1, const std::shared_ptr& mu2); @@ -617,15 +614,6 @@ void L1TMuonProducer::beginRun(edm::Run const& run, edm::EventSetup const& iSetu } } -// ------------ method called when ending the processing of a run ------------ -void L1TMuonProducer::endRun(edm::Run const&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void L1TMuonProducer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void L1TMuonProducer::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TMuonProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TMuon/plugins/L1TMuonQualityAdjuster.cc b/L1Trigger/L1TMuon/plugins/L1TMuonQualityAdjuster.cc index 0215f67eb1ea4..95cf3bb6a52ff 100644 --- a/L1Trigger/L1TMuon/plugins/L1TMuonQualityAdjuster.cc +++ b/L1Trigger/L1TMuon/plugins/L1TMuonQualityAdjuster.cc @@ -34,16 +34,11 @@ using namespace l1t; class L1TMuonQualityAdjuster : public edm::stream::EDProducer<> { public: explicit L1TMuonQualityAdjuster(const edm::ParameterSet&); - ~L1TMuonQualityAdjuster() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(const edm::Run&, edm::EventSetup const&) override; - void endRun(const edm::Run&, edm::EventSetup const&) override; - void beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; - void endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetTokenT m_barrelTfInputToken; edm::EDGetTokenT m_overlapTfInputToken; @@ -80,11 +75,6 @@ L1TMuonQualityAdjuster::L1TMuonQualityAdjuster(const edm::ParameterSet& iConfig) produces("EMTF"); } -L1TMuonQualityAdjuster::~L1TMuonQualityAdjuster() { - // do anything here that needs to be done at desctruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -161,18 +151,6 @@ void L1TMuonQualityAdjuster::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.put(std::move(filteredEMTFMuons), "EMTF"); } -// ------------ method called when starting to processes a run ------------ -void L1TMuonQualityAdjuster::beginRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a run ------------ -void L1TMuonQualityAdjuster::endRun(const edm::Run&, edm::EventSetup const&) {} - -// ------------ method called when starting to processes a luminosity block ------------ -void L1TMuonQualityAdjuster::beginLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - -// ------------ method called when ending the processing of a luminosity block ------------ -void L1TMuonQualityAdjuster::endLuminosityBlock(const edm::LuminosityBlock&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TMuonQualityAdjuster::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.cc b/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.cc index e4d14200a6b24..20adbc0ab9e2f 100644 --- a/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.cc +++ b/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.cc @@ -8,8 +8,6 @@ L1TMuonEndCapTrackProducer::L1TMuonEndCapTrackProducer(const edm::ParameterSet& produces("EMTF"); // EMTF tracks output to uGMT } -L1TMuonEndCapTrackProducer::~L1TMuonEndCapTrackProducer() {} - void L1TMuonEndCapTrackProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { // Create pointers to output products auto out_hits_tmp = std::make_unique(); // before zero suppression diff --git a/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.h b/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.h index e63db89313cce..30aaba2ea5e2b 100644 --- a/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.h +++ b/L1Trigger/L1TMuonEndCap/plugins/L1TMuonEndCapTrackProducer.h @@ -19,20 +19,12 @@ class L1TMuonEndCapTrackProducer : public edm::stream::EDProducer<> { public: explicit L1TMuonEndCapTrackProducer(const edm::ParameterSet&); - ~L1TMuonEndCapTrackProducer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: void produce(edm::Event&, const edm::EventSetup&) override; - //void beginJob() override; - //void endJob() override; - //void beginRun(edm::Run const&, edm::EventSetup const&) override; - //void endRun(edm::Run const&, edm::EventSetup const&) override; - //void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - private: std::unique_ptr track_finder_; std::unique_ptr uGMT_converter_; diff --git a/L1Trigger/L1TMuonEndCap/src/helper.h b/L1Trigger/L1TMuonEndCap/src/helper.h index 9dc44b3248691..3888e3e1c8e24 100644 --- a/L1Trigger/L1TMuonEndCap/src/helper.h +++ b/L1Trigger/L1TMuonEndCap/src/helper.h @@ -148,9 +148,9 @@ namespace { const std::ptrdiff_t len = std::distance(first, last); typedef typename std::iterator_traits::value_type value_type; typedef typename std::iterator_traits::pointer pointer; - std::pair p = std::get_temporary_buffer(len); - pointer buf = p.first; - pointer buf_end = std::next(p.first, p.second); + std::unique_ptr p{new value_type[len]}; + pointer buf = p.get(); + pointer buf_end = buf + len; RandomAccessIterator first1 = first; RandomAccessIterator last1 = middle; @@ -171,9 +171,8 @@ namespace { *buf++ = *first2++; } - buf = p.first; + buf = p.get(); std::copy(buf, buf_end, first); - std::return_temporary_buffer(p.first); } // See above @@ -201,9 +200,9 @@ namespace { const std::ptrdiff_t len = std::distance(first, last); typedef typename std::iterator_traits::value_type value_type; typedef typename std::iterator_traits::pointer pointer; - std::pair p = std::get_temporary_buffer(len); - pointer buf = p.first; - pointer buf_end = std::next(p.first, p.second); + std::unique_ptr p{new value_type[len]}; + pointer buf = p.get(); + const pointer buf_end = buf + len; RandomAccessIterator first1 = first; RandomAccessIterator last1 = one_third; @@ -249,9 +248,8 @@ namespace { *buf++ = *first2++; } - buf = p.first; + buf = p.get(); std::copy(buf, buf_end, first); - std::return_temporary_buffer(p.first); } // See above diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackFastJetProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackFastJetProducer.cc index b2c0cb4fa2eb5..4aaf2602fdd8b 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackFastJetProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackFastJetProducer.cc @@ -1,14 +1,17 @@ /////////////////////////////////////////////////////////////////////////// // // -// Producer of TkJet, // +// Producer of TrackFastJet, // // Cluster L1 tracks using fastjet // // // +// Updates: Claire Savard (claire.savard@colorado.edu), Nov. 2023 // +// // /////////////////////////////////////////////////////////////////////////// // system include files #include // user include files +#include "DataFormats/Common/interface/RefVector.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/stream/EDProducer.h" #include "FWCore/Framework/interface/Event.h" @@ -52,6 +55,7 @@ class L1TrackFastJetProducer : public edm::stream::EDProducer<> { public: typedef TTTrack L1TTTrackType; typedef std::vector L1TTTrackCollectionType; + typedef edm::RefVector L1TTTrackRefCollectionType; explicit L1TrackFastJetProducer(const edm::ParameterSet&); ~L1TrackFastJetProducer() override; @@ -59,49 +63,20 @@ class L1TrackFastJetProducer : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - //virtual void beginJob(); void produce(edm::Event&, const edm::EventSetup&) override; - //virtual void endJob(); - - // track selection criteria - const float trkZMax_; // in [cm] - const float trkChi2dofMax_; // maximum track chi2dof - const double trkBendChi2Max_; // maximum track bendchi2 - const float trkPtMin_; // in [GeV] - const float trkEtaMax_; // in [rad] - const int trkNStubMin_; // minimum number of stubs - const int trkNPSStubMin_; // minimum number of PS stubs - const double deltaZ0Cut_; // save with |L1z-z0| < maxZ0 - const double coneSize_; // Use anti-kt with this cone size - const bool doTightChi2_; - const float trkPtTightChi2_; - const float trkChi2dofTightChi2_; - const bool displaced_; //use prompt/displaced tracks - - const edm::EDGetTokenT > > trackToken_; - edm::EDGetTokenT pvToken_; - edm::ESGetToken tTopoToken_; + + // jet configurations + const double coneSize_; // Use anti-kt with this cone size + const bool displaced_; //use prompt/displaced tracks + + const EDGetTokenT trackToken_; }; // constructor L1TrackFastJetProducer::L1TrackFastJetProducer(const edm::ParameterSet& iConfig) - : trkZMax_((float)iConfig.getParameter("trk_zMax")), - trkChi2dofMax_((float)iConfig.getParameter("trk_chi2dofMax")), - trkBendChi2Max_(iConfig.getParameter("trk_bendChi2Max")), - trkPtMin_((float)iConfig.getParameter("trk_ptMin")), - trkEtaMax_((float)iConfig.getParameter("trk_etaMax")), - trkNStubMin_((int)iConfig.getParameter("trk_nStubMin")), - trkNPSStubMin_((int)iConfig.getParameter("trk_nPSStubMin")), - deltaZ0Cut_((float)iConfig.getParameter("deltaZ0Cut")), - coneSize_((float)iConfig.getParameter("coneSize")), - doTightChi2_(iConfig.getParameter("doTightChi2")), - trkPtTightChi2_((float)iConfig.getParameter("trk_ptTightChi2")), - trkChi2dofTightChi2_((float)iConfig.getParameter("trk_chi2dofTightChi2")), + : coneSize_((float)iConfig.getParameter("coneSize")), displaced_(iConfig.getParameter("displaced")), - trackToken_(consumes > >( - iConfig.getParameter("L1TrackInputTag"))), - pvToken_(consumes(iConfig.getParameter("L1PrimaryVertexTag"))), - tTopoToken_(esConsumes(edm::ESInputTag("", ""))) { + trackToken_(consumes(iConfig.getParameter("L1TrackInputTag"))) { if (displaced_) produces("L1TrackFastJetsExtended"); else @@ -116,71 +91,22 @@ void L1TrackFastJetProducer::produce(edm::Event& iEvent, const edm::EventSetup& std::unique_ptr L1TrackFastJets(new TkJetCollection); // L1 tracks - edm::Handle > > TTTrackHandle; + edm::Handle TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); - std::vector >::const_iterator iterL1Track; - - // Tracker Topology - const TrackerTopology& tTopo = iSetup.getData(tTopoToken_); - - edm::Handle L1PrimaryVertexHandle; - iEvent.getByToken(pvToken_, L1PrimaryVertexHandle); fastjet::JetDefinition jet_def(fastjet::antikt_algorithm, coneSize_); std::vector JetInputs; - float recoVtx = L1PrimaryVertexHandle->begin()->z0(); - unsigned int this_l1track = 0; - for (iterL1Track = TTTrackHandle->begin(); iterL1Track != TTTrackHandle->end(); iterL1Track++) { - this_l1track++; - float trk_pt = iterL1Track->momentum().perp(); - float trk_z0 = iterL1Track->z0(); - float trk_chi2dof = iterL1Track->chi2Red(); - float trk_bendchi2 = iterL1Track->stubPtConsistency(); - std::vector >, TTStub > > - theStubs = iterL1Track->getStubRefs(); - int trk_nstub = (int)theStubs.size(); - - if (std::abs(trk_z0) > trkZMax_) - continue; - if (std::abs(iterL1Track->momentum().eta()) > trkEtaMax_) - continue; - if (trk_pt < trkPtMin_) - continue; - if (trk_nstub < trkNStubMin_) - continue; - if (trk_chi2dof > trkChi2dofMax_) - continue; - if (trk_bendchi2 > trkBendChi2Max_) - continue; - if (doTightChi2_ && (trk_pt > trkPtTightChi2_ && trk_chi2dof > trkChi2dofTightChi2_)) - continue; - - int trk_nPS = 0; - for (int istub = 0; istub < trk_nstub; istub++) { - DetId detId(theStubs.at(istub)->getDetId()); - bool tmp_isPS = false; - if (detId.det() == DetId::Detector::Tracker) { - if (detId.subdetId() == StripSubdetector::TOB && tTopo.tobLayer(detId) <= 3) - tmp_isPS = true; - else if (detId.subdetId() == StripSubdetector::TID && tTopo.tidRing(detId) <= 9) - tmp_isPS = true; - } - if (tmp_isPS) - trk_nPS++; - } - if (trk_nPS < trkNPSStubMin_) - continue; - if (std::abs(recoVtx - trk_z0) > deltaZ0Cut_) - continue; + for (unsigned int this_l1track = 0; this_l1track < TTTrackHandle->size(); this_l1track++) { + edm::Ptr iterL1Track(TTTrackHandle, this_l1track); fastjet::PseudoJet psuedoJet(iterL1Track->momentum().x(), iterL1Track->momentum().y(), iterL1Track->momentum().z(), iterL1Track->momentum().mag()); - JetInputs.push_back(psuedoJet); // input tracks for clustering - JetInputs.back().set_user_index(this_l1track - 1); // save track index in the collection - } // end loop over tracks + JetInputs.push_back(psuedoJet); // input tracks for clustering + JetInputs.back().set_user_index(this_l1track); // save track index in the collection + } // end loop over tracks fastjet::ClusterSequence cs(JetInputs, jet_def); // define the output jet collection std::vector JetOutputs = @@ -213,16 +139,14 @@ void L1TrackFastJetProducer::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.put(std::move(L1TrackFastJets), "L1TrackFastJets"); } -//void L1TrackFastJetProducer::beginJob() {} - -//void L1TrackFastJetProducer::endJob() {} - void L1TrackFastJetProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; - desc.setUnknown(); - descriptions.addDefault(desc); + desc.add( + "L1PVertexInputTag", + edm::InputTag("l1tTrackVertexAssociationProducerForJets", "Level1TTTracksSelectedAssociated")); + desc.add("coneSize", 0.5); + desc.add("displaced", false); } //define this as a plug-in diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackJetEmulatorProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackJetEmulatorProducer.cc index 02bd026bb97a0..63f052d264fc3 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackJetEmulatorProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackJetEmulatorProducer.cc @@ -3,9 +3,10 @@ // // Rewritting/Improvements: George Karathanasis, // georgios.karathanasis@cern.ch, CU Boulder +// Claire Savard (claire.savard@colorado.edu) // // Created: Wed, 01 Aug 2018 14:01:41 GMT -// Latest update: Nov 2022 (by GK) +// Latest update: Nov 2023 (by CS) // // Track jets are clustered in a two-layer process, first by clustering in phi, // then by clustering in eta. The code proceeds as following: putting all tracks// in a grid of eta vs phi space, and then cluster them. Finally we merge the cl @@ -63,16 +64,9 @@ class L1TrackJetEmulatorProducer : public stream::EDProducer<> { // ----------member data --------------------------- std::vector> L1TrkPtrs_; - vector tdtrk_; const float trkZMax_; const float trkPtMax_; - const float trkPtMin_; const float trkEtaMax_; - const float nStubs4PromptChi2_; - const float nStubs5PromptChi2_; - const float nStubs4PromptBend_; - const float nStubs5PromptBend_; - const int trkNPSStubMin_; const int lowpTJetMinTrackMultiplicity_; const float lowpTJetThreshold_; const int highpTJetMinTrackMultiplicity_; @@ -84,36 +78,22 @@ class L1TrackJetEmulatorProducer : public stream::EDProducer<> { const bool displaced_; const float d0CutNStubs4_; const float d0CutNStubs5_; - const float nStubs4DisplacedChi2_; - const float nStubs5DisplacedChi2_; - const float nStubs4DisplacedBend_; - const float nStubs5DisplacedBend_; const int nDisplacedTracks_; - const float dzPVTrk_; - float PVz; float zStep_; glbeta_intern etaStep_; glbphi_intern phiStep_; TTTrack_TrackWord trackword; - edm::ESGetToken tTopoToken_; const EDGetTokenT trackToken_; - const EDGetTokenT PVtxToken_; }; //constructor L1TrackJetEmulatorProducer::L1TrackJetEmulatorProducer(const ParameterSet &iConfig) : trkZMax_(iConfig.getParameter("trk_zMax")), trkPtMax_(iConfig.getParameter("trk_ptMax")), - trkPtMin_(iConfig.getParameter("trk_ptMin")), trkEtaMax_(iConfig.getParameter("trk_etaMax")), - nStubs4PromptChi2_(iConfig.getParameter("nStubs4PromptChi2")), - nStubs5PromptChi2_(iConfig.getParameter("nStubs5PromptChi2")), - nStubs4PromptBend_(iConfig.getParameter("nStubs4PromptBend")), - nStubs5PromptBend_(iConfig.getParameter("nStubs5PromptBend")), - trkNPSStubMin_(iConfig.getParameter("trk_nPSStubMin")), lowpTJetMinTrackMultiplicity_(iConfig.getParameter("lowpTJetMinTrackMultiplicity")), lowpTJetThreshold_(iConfig.getParameter("lowpTJetThreshold")), highpTJetMinTrackMultiplicity_(iConfig.getParameter("highpTJetMinTrackMultiplicity")), @@ -125,15 +105,8 @@ L1TrackJetEmulatorProducer::L1TrackJetEmulatorProducer(const ParameterSet &iConf displaced_(iConfig.getParameter("displaced")), d0CutNStubs4_(iConfig.getParameter("d0_cutNStubs4")), d0CutNStubs5_(iConfig.getParameter("d0_cutNStubs5")), - nStubs4DisplacedChi2_(iConfig.getParameter("nStubs4DisplacedChi2")), - nStubs5DisplacedChi2_(iConfig.getParameter("nStubs5DisplacedChi2")), - nStubs4DisplacedBend_(iConfig.getParameter("nStubs4DisplacedBend")), - nStubs5DisplacedBend_(iConfig.getParameter("nStubs5DisplacedBend")), nDisplacedTracks_(iConfig.getParameter("nDisplacedTracks")), - dzPVTrk_(iConfig.getParameter("MaxDzTrackPV")), - tTopoToken_(esConsumes(edm::ESInputTag("", ""))), - trackToken_(consumes(iConfig.getParameter("L1TrackInputTag"))), - PVtxToken_(consumes(iConfig.getParameter("L1PVertexInputTag"))) { + trackToken_(consumes(iConfig.getParameter("L1TrackInputTag"))) { zStep_ = 2.0 * trkZMax_ / (zBins_ + 1); // added +1 in denom etaStep_ = glbeta_intern(2.0 * trkEtaMax_ / etaBins_); //etaStep is the width of an etabin phiStep_ = DoubleToBit(2.0 * (M_PI) / phiBins_, @@ -148,58 +121,15 @@ L1TrackJetEmulatorProducer::L1TrackJetEmulatorProducer(const ParameterSet &iConf void L1TrackJetEmulatorProducer::produce(Event &iEvent, const EventSetup &iSetup) { unique_ptr L1TrackJetContainer(new l1t::TkJetWordCollection); - // Read inputs - const TrackerTopology &tTopo = iSetup.getData(tTopoToken_); + // L1 tracks edm::Handle TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); - edm::Handle PVtx; - iEvent.getByToken(PVtxToken_, PVtx); - float PVz = (PVtx->at(0)).z0(); - L1TrkPtrs_.clear(); - tdtrk_.clear(); // track selection for (unsigned int this_l1track = 0; this_l1track < TTTrackHandle->size(); this_l1track++) { edm::Ptr trkPtr(TTTrackHandle, this_l1track); - float trk_pt = trkPtr->momentum().perp(); - int trk_nstubs = (int)trkPtr->getStubRefs().size(); - float trk_chi2dof = trkPtr->chi2Red(); - float trk_bendchi2 = trkPtr->stubPtConsistency(); - int trk_nPS = 0; - for (int istub = 0; istub < trk_nstubs; istub++) { - DetId detId(trkPtr->getStubRefs().at(istub)->getDetId()); - if (detId.det() == DetId::Detector::Tracker) { - if ((detId.subdetId() == StripSubdetector::TOB && tTopo.tobLayer(detId) <= 3) || - (detId.subdetId() == StripSubdetector::TID && tTopo.tidRing(detId) <= 9)) - trk_nPS++; - } - } - // selection tracks - supposed to happen on seperate module (kept for legacy/debug reasons) - if (trk_nPS < trkNPSStubMin_) - continue; - if (!TrackQualitySelection(trk_nstubs, - trk_chi2dof, - trk_bendchi2, - nStubs4PromptBend_, - nStubs5PromptBend_, - nStubs4PromptChi2_, - nStubs5PromptChi2_, - nStubs4DisplacedBend_, - nStubs5DisplacedBend_, - nStubs4DisplacedChi2_, - nStubs5DisplacedChi2_, - displaced_)) - continue; - if (std::abs(PVz - trkPtr->z0()) > dzPVTrk_ && dzPVTrk_ > 0) - continue; - if (std::abs(trkPtr->z0()) > trkZMax_) - continue; - if (std::abs(trkPtr->momentum().eta()) > trkEtaMax_) - continue; - if (trk_pt < trkPtMin_) - continue; L1TrkPtrs_.push_back(trkPtr); } @@ -348,9 +278,6 @@ void L1TrackJetEmulatorProducer::produce(Event &iEvent, const EventSetup &iSetup vector> L1TrackAssocJet; for (unsigned int j = 0; j < mzb.clusters.size(); ++j) { - if (mzb.clusters[j].pTtot < pt_intern(trkPtMin_)) - continue; - l1t::TkJetWord::glbeta_t jetEta = DoubleToBit(double(mzb.clusters[j].eta), TkJetWord::TkJetBitWidths::kGlbEtaSize, TkJetWord::MAX_ETA / (1 << TkJetWord::TkJetBitWidths::kGlbEtaSize)); @@ -365,7 +292,7 @@ void L1TrackJetEmulatorProducer::produce(Event &iEvent, const EventSetup &iSetup l1t::TkJetWord::dispflag_t dispflag = 0; l1t::TkJetWord::tkjetunassigned_t unassigned = 0; - if (total_disptracks > nDisplacedTracks_ || total_disptracks == nDisplacedTracks_) + if (total_disptracks >= nDisplacedTracks_) dispflag = 1; L1TrackAssocJet.clear(); for (unsigned int itrk = 0; itrk < mzb.clusters[j].trackidx.size(); itrk++) @@ -388,17 +315,9 @@ void L1TrackJetEmulatorProducer::fillDescriptions(ConfigurationDescriptions &des // Please change this to state exactly what you do use, even if it is no parameters ParameterSetDescription desc; desc.add("L1TrackInputTag", edm::InputTag("l1tTTTracksFromTrackletEmulation", "Level1TTTracks")); - desc.add("L1PVertexInputTag", edm::InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation")); - desc.add("MaxDzTrackPV", 1.0); desc.add("trk_zMax", 15.0); desc.add("trk_ptMax", 200.0); - desc.add("trk_ptMin", 3.0); desc.add("trk_etaMax", 2.4); - desc.add("nStubs4PromptChi2", 5.0); - desc.add("nStubs4PromptBend", 1.7); - desc.add("nStubs5PromptChi2", 2.75); - desc.add("nStubs5PromptBend", 3.5); - desc.add("trk_nPSStubMin", -1); desc.add("minTrkJetpT", -1.0); desc.add("etaBins", 24); desc.add("phiBins", 27); @@ -410,10 +329,6 @@ void L1TrackJetEmulatorProducer::fillDescriptions(ConfigurationDescriptions &des desc.add("highpTJetMinTrackMultiplicity", 3); desc.add("highpTJetThreshold", 100.0); desc.add("displaced", false); - desc.add("nStubs4DisplacedChi2", 5.0); - desc.add("nStubs4DisplacedBend", 1.7); - desc.add("nStubs5DisplacedChi2", 2.75); - desc.add("nStubs5DisplacedBend", 3.5); desc.add("nDisplacedTracks", 2); descriptions.add("l1tTrackJetsEmulator", desc); } diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackJetProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackJetProducer.cc index 80da20559d827..9b329eed1f6f6 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackJetProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackJetProducer.cc @@ -2,9 +2,10 @@ // // Rewritting/improvements: George Karathanasis, // georgios.karathanasis@cern.ch, CU Boulder +// Claire Savard (claire.savard@colorado.edu) // // Created: Wed, 01 Aug 2018 14:01:41 GMT -// Latest update: Nov 2022 (by GK) +// Latest update: Nov 2023 (by CS) // // Track jets are clustered in a two-layer process, first by clustering in phi, // then by clustering in eta. The code proceeds as following: putting all tracks @@ -57,16 +58,9 @@ class L1TrackJetProducer : public stream::EDProducer<> { // ----------member data --------------------------- vector> L1TrkPtrs_; - vector tdtrk_; const float trkZMax_; const float trkPtMax_; - const float trkPtMin_; const float trkEtaMax_; - const float nStubs4PromptChi2_; - const float nStubs5PromptChi2_; - const float nStubs4PromptBend_; - const float nStubs5PromptBend_; - const int trkNPSStubMin_; const int lowpTJetMinTrackMultiplicity_; const float lowpTJetThreshold_; const int highpTJetMinTrackMultiplicity_; @@ -81,28 +75,15 @@ class L1TrackJetProducer : public stream::EDProducer<> { const bool displaced_; const float d0CutNStubs4_; const float d0CutNStubs5_; - const float nStubs4DisplacedChi2_; - const float nStubs5DisplacedChi2_; - const float nStubs4DisplacedBend_; - const float nStubs5DisplacedBend_; const int nDisplacedTracks_; - const float dzPVTrk_; - edm::ESGetToken tTopoToken_; const EDGetTokenT trackToken_; - const EDGetTokenT PVtxToken_; }; L1TrackJetProducer::L1TrackJetProducer(const ParameterSet &iConfig) : trkZMax_(iConfig.getParameter("trk_zMax")), trkPtMax_(iConfig.getParameter("trk_ptMax")), - trkPtMin_(iConfig.getParameter("trk_ptMin")), trkEtaMax_(iConfig.getParameter("trk_etaMax")), - nStubs4PromptChi2_(iConfig.getParameter("nStubs4PromptChi2")), - nStubs5PromptChi2_(iConfig.getParameter("nStubs5PromptChi2")), - nStubs4PromptBend_(iConfig.getParameter("nStubs4PromptBend")), - nStubs5PromptBend_(iConfig.getParameter("nStubs5PromptBend")), - trkNPSStubMin_(iConfig.getParameter("trk_nPSStubMin")), lowpTJetMinTrackMultiplicity_(iConfig.getParameter("lowpTJetMinTrackMultiplicity")), lowpTJetThreshold_(iConfig.getParameter("lowpTJetThreshold")), highpTJetMinTrackMultiplicity_(iConfig.getParameter("highpTJetMinTrackMultiplicity")), @@ -114,15 +95,8 @@ L1TrackJetProducer::L1TrackJetProducer(const ParameterSet &iConfig) displaced_(iConfig.getParameter("displaced")), d0CutNStubs4_(iConfig.getParameter("d0_cutNStubs4")), d0CutNStubs5_(iConfig.getParameter("d0_cutNStubs5")), - nStubs4DisplacedChi2_(iConfig.getParameter("nStubs4DisplacedChi2")), - nStubs5DisplacedChi2_(iConfig.getParameter("nStubs5DisplacedChi2")), - nStubs4DisplacedBend_(iConfig.getParameter("nStubs4DisplacedBend")), - nStubs5DisplacedBend_(iConfig.getParameter("nStubs5DisplacedBend")), nDisplacedTracks_(iConfig.getParameter("nDisplacedTracks")), - dzPVTrk_(iConfig.getParameter("MaxDzTrackPV")), - tTopoToken_(esConsumes(edm::ESInputTag("", ""))), - trackToken_(consumes(iConfig.getParameter("L1TrackInputTag"))), - PVtxToken_(consumes(iConfig.getParameter("L1PVertexInputTag"))) { + trackToken_(consumes(iConfig.getParameter("L1TrackInputTag"))) { zStep_ = 2.0 * trkZMax_ / (zBins_ + 1); // added +1 in denom etaStep_ = 2.0 * trkEtaMax_ / etaBins_; //etaStep is the width of an etabin phiStep_ = 2 * M_PI / phiBins_; ////phiStep is the width of a phibin @@ -134,78 +108,26 @@ L1TrackJetProducer::L1TrackJetProducer(const ParameterSet &iConfig) } void L1TrackJetProducer::produce(Event &iEvent, const EventSetup &iSetup) { - unique_ptr L1L1TrackJetProducer(new TkJetCollection); - - // Read inputs - const TrackerTopology &tTopo = iSetup.getData(tTopoToken_); + unique_ptr L1TrackJetProducer(new TkJetCollection); + // L1 tracks edm::Handle TTTrackHandle; iEvent.getByToken(trackToken_, TTTrackHandle); - edm::Handle PVtx; - iEvent.getByToken(PVtxToken_, PVtx); - float PVz = (PVtx->at(0)).z0(); - L1TrkPtrs_.clear(); - tdtrk_.clear(); // track selection for (unsigned int this_l1track = 0; this_l1track < TTTrackHandle->size(); this_l1track++) { edm::Ptr trkPtr(TTTrackHandle, this_l1track); - float trk_pt = trkPtr->momentum().perp(); - int trk_nstubs = (int)trkPtr->getStubRefs().size(); - float trk_chi2dof = trkPtr->chi2Red(); - float trk_d0 = trkPtr->d0(); - float trk_bendchi2 = trkPtr->stubPtConsistency(); - - int trk_nPS = 0; - for (int istub = 0; istub < trk_nstubs; istub++) { // loop over the stubs - DetId detId(trkPtr->getStubRefs().at(istub)->getDetId()); - if (detId.det() == DetId::Detector::Tracker) { - if ((detId.subdetId() == StripSubdetector::TOB && tTopo.tobLayer(detId) <= 3) || - (detId.subdetId() == StripSubdetector::TID && tTopo.tidRing(detId) <= 9)) - trk_nPS++; - } - } - // select tracks - if (trk_nPS < trkNPSStubMin_) - continue; - if (!TrackQualitySelection(trk_nstubs, - trk_chi2dof, - trk_bendchi2, - nStubs4PromptBend_, - nStubs5PromptBend_, - nStubs4PromptChi2_, - nStubs5PromptChi2_, - nStubs4DisplacedBend_, - nStubs5DisplacedBend_, - nStubs4DisplacedChi2_, - nStubs5DisplacedChi2_, - displaced_)) - continue; - if (std::abs(PVz - trkPtr->z0()) > dzPVTrk_ && dzPVTrk_ > 0) - continue; - if (std::abs(trkPtr->z0()) > trkZMax_) - continue; - if (std::abs(trkPtr->momentum().eta()) > trkEtaMax_) - continue; - if (trk_pt < trkPtMin_) - continue; L1TrkPtrs_.push_back(trkPtr); - - if ((std::abs(trk_d0) > d0CutNStubs5_ && trk_nstubs >= 5 && d0CutNStubs5_ >= 0) || - (trk_nstubs == 4 && std::abs(trk_d0) > d0CutNStubs4_ && d0CutNStubs4_ >= 0)) - tdtrk_.push_back(1); //displaced track - else - tdtrk_.push_back(0); // not displaced track } // if no tracks pass selection return empty containers if (L1TrkPtrs_.empty()) { if (displaced_) - iEvent.put(std::move(L1L1TrackJetProducer), "L1TrackJetsExtended"); + iEvent.put(std::move(L1TrackJetProducer), "L1TrackJetsExtended"); else - iEvent.put(std::move(L1L1TrackJetProducer), "L1TrackJets"); + iEvent.put(std::move(L1TrackJetProducer), "L1TrackJets"); return; } @@ -273,6 +195,8 @@ void L1TrackJetProducer::produce(Event &iEvent, const EventSetup &iSetup) { float trkpt = L1TrkPtrs_[k]->momentum().perp(); float trketa = L1TrkPtrs_[k]->momentum().eta(); float trkphi = L1TrkPtrs_[k]->momentum().phi(); + float trkd0 = L1TrkPtrs_[k]->d0(); + int trknstubs = (int)L1TrkPtrs_[k]->getStubRefs().size(); for (int i = 0; i < phiBins_; ++i) { for (int j = 0; j < etaBins_; ++j) { float eta_min = epbins[i][j].eta - etaStep_ / 2.0; //eta min @@ -287,7 +211,9 @@ void L1TrackJetProducer::produce(Event &iEvent, const EventSetup &iSetup) { epbins[i][j].pTtot += trkpt; else epbins[i][j].pTtot += trkPtMax_; - epbins[i][j].nxtracks += tdtrk_[k]; + if ((std::abs(trkd0) > d0CutNStubs5_ && trknstubs >= 5 && d0CutNStubs5_ >= 0) || + (trknstubs == 4 && std::abs(trkd0) > d0CutNStubs4_ && d0CutNStubs4_ >= 0)) + epbins[i][j].nxtracks += 1; epbins[i][j].trackidx.push_back(k); ++epbins[i][j].ntracks; } // for each etabin @@ -335,7 +261,7 @@ void L1TrackJetProducer::produce(Event &iEvent, const EventSetup &iSetup) { float jetPz = jetPt * sinh(jetEta); float jetP = jetPt * cosh(jetEta); int totalDisptrk = mzb.clusters[j].nxtracks; - bool isDispJet = (totalDisptrk > nDisplacedTracks_ || totalDisptrk == nDisplacedTracks_); + bool isDispJet = (totalDisptrk >= nDisplacedTracks_); math::XYZTLorentzVector jetP4(jetPx, jetPy, jetPz, jetP); L1TrackAssocJet.clear(); @@ -344,31 +270,23 @@ void L1TrackJetProducer::produce(Event &iEvent, const EventSetup &iSetup) { TkJet trkJet(jetP4, L1TrackAssocJet, mzb.zbincenter, mzb.clusters[j].ntracks, 0, totalDisptrk, 0, isDispJet); - L1L1TrackJetProducer->push_back(trkJet); + L1TrackJetProducer->push_back(trkJet); } - std::sort( - L1L1TrackJetProducer->begin(), L1L1TrackJetProducer->end(), [](auto &a, auto &b) { return a.pt() > b.pt(); }); + std::sort(L1TrackJetProducer->begin(), L1TrackJetProducer->end(), [](auto &a, auto &b) { return a.pt() > b.pt(); }); if (displaced_) - iEvent.put(std::move(L1L1TrackJetProducer), "L1TrackJetsExtended"); + iEvent.put(std::move(L1TrackJetProducer), "L1TrackJetsExtended"); else - iEvent.put(std::move(L1L1TrackJetProducer), "L1TrackJets"); + iEvent.put(std::move(L1TrackJetProducer), "L1TrackJets"); } void L1TrackJetProducer::fillDescriptions(ConfigurationDescriptions &descriptions) { ParameterSetDescription desc; - desc.add("L1TrackInputTag", edm::InputTag("l1tTTTracksFromTrackletEmulation", "Level1TTTracks")); - desc.add("L1PVertexInputTag", edm::InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation")); - desc.add("MaxDzTrackPV", 1.0); + desc.add( + "L1TrackInputTag", edm::InputTag("l1tTrackVertexAssociationProducerForJets", "Level1TTTracksSelectedAssociated")); desc.add("trk_zMax", 15.0); desc.add("trk_ptMax", 200.0); - desc.add("trk_ptMin", 3.0); desc.add("trk_etaMax", 2.4); - desc.add("nStubs4PromptChi2", 5.0); - desc.add("nStubs4PromptBend", 1.7); - desc.add("nStubs5PromptChi2", 2.75); - desc.add("nStubs5PromptBend", 3.5); - desc.add("trk_nPSStubMin", -1); desc.add("minTrkJetpT", -1.0); desc.add("etaBins", 24); desc.add("phiBins", 27); @@ -380,10 +298,6 @@ void L1TrackJetProducer::fillDescriptions(ConfigurationDescriptions &description desc.add("highpTJetMinTrackMultiplicity", 3); desc.add("highpTJetThreshold", 100.0); desc.add("displaced", false); - desc.add("nStubs4DisplacedChi2", 5.0); - desc.add("nStubs4DisplacedBend", 1.7); - desc.add("nStubs5DisplacedChi2", 2.75); - desc.add("nStubs5DisplacedBend", 3.5); desc.add("nDisplacedTracks", 2); descriptions.add("l1tTrackJets", desc); } diff --git a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc index 837b7d92b13f4..3c71f53073875 100644 --- a/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc +++ b/L1Trigger/L1TTrackMatch/plugins/L1TrackSelectionProducer.cc @@ -19,6 +19,7 @@ // Original Author: Alexx Perloff // Created: Thu, 16 Dec 2021 19:02:50 GMT // +// Updates: Claire Savard (claire.savard@colorado.edu), Nov. 2023 // // system include files @@ -201,6 +202,26 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { double nPSStubsMin_; const TrackerTopology& tTopo_; }; + struct TTTrackPromptMVAMinSelector { + TTTrackPromptMVAMinSelector(double promptMVAMin) : promptMVAMin_(promptMVAMin) {} + TTTrackPromptMVAMinSelector(const edm::ParameterSet& cfg) + : promptMVAMin_(cfg.template getParameter("promptMVAMin")) {} + bool operator()(const L1Track& t) const { return t.trkMVA1() >= promptMVAMin_; } + + private: + double promptMVAMin_; + }; + struct TTTrackWordPromptMVAMinSelector { + TTTrackWordPromptMVAMinSelector(double promptMVAMin) : promptMVAMin_(promptMVAMin) {} + TTTrackWordPromptMVAMinSelector(const edm::ParameterSet& cfg) + : promptMVAMin_(cfg.template getParameter("promptMVAMin")) {} + bool operator()(const L1Track& t) const { + return t.trkMVA1() >= promptMVAMin_; + } //change when mva bins in word are set + + private: + double promptMVAMin_; + }; struct TTTrackBendChi2MaxSelector { TTTrackBendChi2MaxSelector(double bendChi2Max) : bendChi2Max_(bendChi2Max) {} TTTrackBendChi2MaxSelector(const edm::ParameterSet& cfg) @@ -369,7 +390,7 @@ class L1TrackSelectionProducer : public edm::global::EDProducer<> { edm::ESGetToken tTopoToken_; const std::string outputCollectionName_; const edm::ParameterSet cutSet_; - const double ptMin_, absEtaMax_, absZ0Max_, bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_; + const double ptMin_, absEtaMax_, absZ0Max_, promptMVAMin_, bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_; const double reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_, reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_, reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_; const int nStubsMin_, nPSStubsMin_; @@ -389,6 +410,7 @@ L1TrackSelectionProducer::L1TrackSelectionProducer(const edm::ParameterSet& iCon ptMin_(cutSet_.getParameter("ptMin")), absEtaMax_(cutSet_.getParameter("absEtaMax")), absZ0Max_(cutSet_.getParameter("absZ0Max")), + promptMVAMin_(cutSet_.getParameter("promptMVAMin")), bendChi2Max_(cutSet_.getParameter("reducedBendChi2Max")), reducedChi2RZMax_(cutSet_.getParameter("reducedChi2RZMax")), reducedChi2RPhiMax_(cutSet_.getParameter("reducedChi2RPhiMax")), @@ -521,6 +543,8 @@ void L1TrackSelectionProducer::produce(edm::StreamID, edm::Event& iEvent, const TTTrackBendChi2Chi2RZChi2RPhiMaxSelector chi2Sel(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackWordBendChi2Chi2RZChi2RPhiMaxSelector chi2SelEmu(bendChi2Max_, reducedChi2RZMax_, reducedChi2RPhiMax_); TTTrackNPSStubsMinSelector nPSStubsSel(nPSStubsMin_, tTopo); + TTTrackPromptMVAMinSelector mvaSel(promptMVAMin_); + TTTrackWordPromptMVAMinSelector mvaSelEmu(promptMVAMin_); TTTrackChi2MaxNstubSelector chi2NstubSel({reducedChi2RZMaxNstub4_, reducedChi2RZMaxNstub5_}, {reducedChi2RPhiMaxNstub4_, reducedChi2RPhiMaxNstub5_}, {reducedBendChi2MaxNstub4_, reducedBendChi2MaxNstub5_}); @@ -532,12 +556,13 @@ void L1TrackSelectionProducer::produce(edm::StreamID, edm::Event& iEvent, const const auto& track = l1TracksHandle->at(i); // Select tracks based on the floating point TTTrack - if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track)) { + if (processSimulatedTracks_ && kinSel(track) && nPSStubsSel(track) && chi2Sel(track) && mvaSel(track) && + chi2NstubSel(track)) { vTTTrackOutput->push_back(TTTrackRef(l1TracksHandle, i)); } // Select tracks based on the bitwise accurate TTTrack_TrackWord - if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track)) { + if (processEmulatedTracks_ && kinSelEmu(track) && chi2SelEmu(track) && mvaSelEmu(track) && chi2NstubSelEmu(track)) { vTTTrackEmulationOutput->push_back(TTTrackRef(l1TracksHandle, i)); } } @@ -570,6 +595,7 @@ void L1TrackSelectionProducer::fillDescriptions(edm::ConfigurationDescriptions& descCutSet.add("nPSStubsMin", 0) ->setComment("number of stubs in the PS Modules must be greater than or equal to this value"); + descCutSet.add("promptMVAMin", -1.0)->setComment("MVA must be greater than this value"); descCutSet.add("reducedBendChi2Max", 2.25)->setComment("bend chi2 must be less than this value"); descCutSet.add("reducedChi2RZMax", 5.0)->setComment("chi2rz/dof must be less than this value"); descCutSet.add("reducedChi2RPhiMax", 20.0)->setComment("chi2rphi/dof must be less than this value"); diff --git a/L1Trigger/L1TTrackMatch/python/l1tTrackFastJets_cfi.py b/L1Trigger/L1TTrackMatch/python/l1tTrackFastJets_cfi.py index 183244e7d0ad1..91cb409c84959 100644 --- a/L1Trigger/L1TTrackMatch/python/l1tTrackFastJets_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/l1tTrackFastJets_cfi.py @@ -1,37 +1,13 @@ import FWCore.ParameterSet.Config as cms l1tTrackFastJets = cms.EDProducer("L1TrackFastJetProducer", - L1TrackInputTag = cms.InputTag("l1tTTTracksFromTrackletEmulation", "Level1TTTracks"), - L1PrimaryVertexTag=cms.InputTag("l1tVertexFinder", "L1Vertices"), - trk_zMax = cms.double(15.), # max track z0 [cm] - trk_chi2dofMax = cms.double(10.), # max track chi2/dof - trk_bendChi2Max = cms.double(2.2),# max bendChi2 cut - trk_ptMin = cms.double(2.0), # minimum track pt [GeV] - trk_etaMax = cms.double(2.5), # maximum track eta - trk_nStubMin = cms.int32(4), # minimum number of stubs in track - trk_nPSStubMin = cms.int32(-1), # minimum number of PS stubs in track - deltaZ0Cut=cms.double(0.5), # cluster tracks within |dz| 20 - trk_ptTightChi2 = cms.double(20.0), - trk_chi2dofTightChi2 = cms.double(5.0), + L1TrackInputTag = cms.InputTag("l1tTrackVertexAssociationProducerForJets", "Level1TTTracksSelectedAssociated"), coneSize=cms.double(0.4), #cone size for anti-kt fast jet displaced = cms.bool(False) # use prompt/displaced tracks ) l1tTrackFastJetsExtended = cms.EDProducer("L1TrackFastJetProducer", - L1TrackInputTag = cms.InputTag("l1tTTTracksFromExtendedTrackletEmulation", "Level1TTTracks"), - L1PrimaryVertexTag=cms.InputTag("l1tVertexFinder", "L1Vertices"), - trk_zMax = cms.double(15.), # max track z0 [cm] - trk_chi2dofMax = cms.double(40.), # max track chi2 for extended tracks - trk_bendChi2Max = cms.double(2.4),#Bendchi2 cut for extended tracks - trk_ptMin = cms.double(3.0), # minimum track pt [GeV] - trk_etaMax = cms.double(2.5), # maximum track eta - trk_nStubMin = cms.int32(4), # minimum number of stubs on track - trk_nPSStubMin = cms.int32(-1), # minimum number of stubs in PS modules on track - deltaZ0Cut=cms.double(3.0), #cluster tracks within |dz| 20 - trk_ptTightChi2 = cms.double(20.0), - trk_chi2dofTightChi2 = cms.double(5.0), + L1TrackInputTag = cms.InputTag("l1tTrackVertexAssociationProducerExtendedForJets", "Level1TTTracksExtendedSelectedAssociated"), coneSize=cms.double(0.4), #cone size for anti-kt fast jet displaced = cms.bool(True) # use prompt/displaced tracks ) diff --git a/L1Trigger/L1TTrackMatch/python/l1tTrackJetsEmulation_cfi.py b/L1Trigger/L1TTrackMatch/python/l1tTrackJetsEmulation_cfi.py index 9a227295a7257..f48ff4faaa28a 100644 --- a/L1Trigger/L1TTrackMatch/python/l1tTrackJetsEmulation_cfi.py +++ b/L1Trigger/L1TTrackMatch/python/l1tTrackJetsEmulation_cfi.py @@ -2,17 +2,9 @@ l1tTrackJetsEmulation = cms.EDProducer('L1TrackJetEmulatorProducer', L1TrackInputTag= cms.InputTag("l1tTrackVertexAssociationProducerForJets", "Level1TTTracksSelectedAssociatedEmulation"), - L1PVertexInputTag=cms.InputTag("l1tVertexFinderEmulator","L1VerticesEmulation"), - MaxDzTrackPV = cms.double(1.0), trk_zMax = cms.double (15.) , # maximum track z trk_ptMax = cms.double(200.), # maximumum track pT before saturation [GeV] - trk_ptMin = cms.double(2.0), # minimum track pt [GeV] trk_etaMax = cms.double(2.4), # maximum track eta - nStubs4PromptChi2=cms.double(10.0), #Prompt track quality flags for loose/tight - nStubs4PromptBend=cms.double(2.2), - nStubs5PromptChi2=cms.double(10.0), - nStubs5PromptBend=cms.double(2.2), - trk_nPSStubMin=cms.int32(-1), # minimum PS stubs, -1 means no cut minTrkJetpT=cms.double(-1.), # minimum track pt to be considered for track jet etaBins=cms.int32(24), phiBins=cms.int32(27), @@ -24,24 +16,14 @@ highpTJetMinTrackMultiplicity=cms.int32(3), highpTJetThreshold=cms.double(100.), displaced=cms.bool(False), #Flag for displaced tracks - nStubs4DisplacedChi2=cms.double(5.0), #Displaced track quality flags for loose/tight - nStubs4DisplacedBend=cms.double(1.7), - nStubs5DisplacedChi2=cms.double(2.75), - nStubs5DisplacedBend=cms.double(3.5), nDisplacedTracks=cms.int32(2) #Number of displaced tracks required per jet ) l1tTrackJetsExtendedEmulation = l1tTrackJetsEmulation.clone( L1TrackInputTag= cms.InputTag("l1tTrackVertexAssociationProducerExtendedForJets", "Level1TTTracksExtendedSelectedAssociatedEmulation"), - L1PVertexInputTag=cms.InputTag("l1tVertexFinderEmulator", "L1VerticesEmulation"), minTrkJetpT= 5.0, # minimum track pt to be considered for track jet - MaxDzTrackPV = 5.0, d0_cutNStubs4= -1, # -1 excludes nstub=4 from disp tag d0_cutNStubs5= 0.22, displaced= True, #Flag for displaced tracks - nStubs4DisplacedChi2= 3.3, #Disp tracks selection [trkcut excluded minTrkJetpT = 5., # min track jet pt to be considered for most energetic zbin finding d0_cutNStubs5 = 0.22, # -1 excludes nstub>4 from disp tag process displaced = True, #Flag for displaced tracks - nStubs4DisplacedChi2 = 3.3, #Disp tracks selection [trk { private: void produce(edm::Event&, const edm::EventSetup&) override; - void beginRun(edm::Run const&, edm::EventSetup const&) override; - // ----------member data --------------------------- // input tokens @@ -157,9 +155,6 @@ void L1TZDCProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) iEvent.emplace(etToken_, std::move(etsumsReduced)); } -// ------------ method called when starting to processes a run ------------ -void L1TZDCProducer::beginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1TZDCProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; diff --git a/L1Trigger/Phase2L1GT/python/l1tGTProducer_cff.py b/L1Trigger/Phase2L1GT/python/l1tGTProducer_cff.py index 141fe62b8f5e5..26242b1495839 100644 --- a/L1Trigger/Phase2L1GT/python/l1tGTProducer_cff.py +++ b/L1Trigger/Phase2L1GT/python/l1tGTProducer_cff.py @@ -10,10 +10,10 @@ GMTSaPromptMuons = cms.InputTag("l1tSAMuonsGmt", "promptSAMuons"), GMTSaDisplacedMuons = cms.InputTag("l1tSAMuonsGmt", "displacedSAMuons"), GMTTkMuons = cms.InputTag("l1tTkMuonsGmtLowPtFix", "l1tTkMuonsGmtLowPtFix"), - CL2Jets = cms.InputTag("l1tSCPFL1PuppiCorrectedEmulator"), + CL2Jets = cms.InputTag("l1tSC4PFL1PuppiCorrectedEmulator"), CL2Electrons = cms.InputTag("l1tLayer2EG", "L1CtTkElectron"), CL2Photons = cms.InputTag("l1tLayer2EG", "L1CtTkEm"), CL2Taus = cms.InputTag("l1tNNTauProducerPuppi", "L1PFTausNN"), CL2EtSum = cms.InputTag("l1tMETPFProducer"), - CL2HtSum = cms.InputTag("l1tSCPFL1PuppiCorrectedEmulatorMHT") + CL2HtSum = cms.InputTag("l1tSC4PFL1PuppiCorrectedEmulatorMHT") ) diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/buffered_folded_multififo_regionizer_ref.h b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/buffered_folded_multififo_regionizer_ref.h index 9e171a75cfd6a..8e446691aa2fe 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/buffered_folded_multififo_regionizer_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/buffered_folded_multififo_regionizer_ref.h @@ -6,38 +6,6 @@ #include #include -namespace l1ct { - namespace multififo_regionizer { - template - inline bool local_eta_window(const T& t, const l1ct::glbeta_t& etaMin, const l1ct::glbeta_t& etaMax); - template <> - inline bool local_eta_window(const l1ct::TkObjEmu& t, - const l1ct::glbeta_t& etaMin, - const l1ct::glbeta_t& etaMax); - - template - class EtaBuffer { - public: - EtaBuffer() {} - EtaBuffer(unsigned int maxitems, const l1ct::glbeta_t& etaMin = 0, const l1ct::glbeta_t& etaMax = 0) - : size_(maxitems), iwrite_(0), iread_(0), etaMin_(etaMin), etaMax_(etaMax) {} - void maybe_push(const T& t); - void writeNewEvent() { - iwrite_ = 1 - iwrite_; - items_[iwrite_].clear(); - } - void readNewEvent() { iread_ = 1 - iread_; } - T pop(); - unsigned int writeSize() const { return items_[iwrite_].size(); } - unsigned int readSize() const { return items_[iread_].size(); } - - private: - unsigned int size_, iwrite_, iread_; - l1ct::glbeta_t etaMin_, etaMax_; - std::deque items_[2]; - }; - } // namespace multififo_regionizer -} // namespace l1ct namespace l1ct { class BufferedFoldedMultififoRegionizerEmulator : public FoldedMultififoRegionizerEmulator { public: @@ -88,9 +56,9 @@ namespace l1ct { } protected: - std::vector> tkBuffers_; - std::vector> caloBuffers_; - std::vector> muBuffers_; + std::vector> tkBuffers_; + std::vector> caloBuffers_; + std::vector> muBuffers_; void findEtaBounds_(const l1ct::PFRegionEmu& sec, const std::vector& reg, @@ -106,41 +74,4 @@ namespace l1ct { }; } // namespace l1ct -template -inline bool l1ct::multififo_regionizer::local_eta_window(const T& t, - const l1ct::glbeta_t& etaMin, - const l1ct::glbeta_t& etaMax) { - return (etaMin == etaMax) || (etaMin <= t.hwEta && t.hwEta <= etaMax); -} -template <> -inline bool l1ct::multififo_regionizer::local_eta_window(const l1ct::TkObjEmu& t, - const l1ct::glbeta_t& etaMin, - const l1ct::glbeta_t& etaMax) { - return (etaMin == etaMax) || (etaMin <= t.hwEta && t.hwEta <= etaMax) || - (etaMin <= t.hwVtxEta() && t.hwVtxEta() <= etaMax); -} -template -void l1ct::multififo_regionizer::EtaBuffer::maybe_push(const T& t) { - if ((t.hwPt != 0) && local_eta_window(t, etaMin_, etaMax_)) { - if (items_[iwrite_].size() < size_) { - items_[iwrite_].push_back(t); - } else { - // uncommenting the message below may be useful for debugging - //dbgCout() << "WARNING: sector buffer is full for " << typeid(T).name() << ", pt = " << t.intPt() - // << ", eta = " << t.intEta() << ", phi = " << t.intPhi() << "\n"; - } - } -} - -template -T l1ct::multififo_regionizer::EtaBuffer::pop() { - T ret; - ret.clear(); - if (!items_[iread_].empty()) { - ret = items_[iread_].front(); - items_[iread_].pop_front(); - } - return ret; -} - #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/middle_buffer_multififo_regionizer_ref.h b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/middle_buffer_multififo_regionizer_ref.h new file mode 100644 index 0000000000000..b53d34f05a6f3 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/middle_buffer_multififo_regionizer_ref.h @@ -0,0 +1,125 @@ +#ifndef middle_buffer_multififo_regionizer_ref_h +#define middle_buffer_multififo_regionizer_ref_h + +#include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_ref.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/dbgPrintf.h" +#include +#include + +namespace l1ct { + class MiddleBufferMultififoRegionizerEmulator : public RegionizerEmulator { + public: + MiddleBufferMultififoRegionizerEmulator(unsigned int nclocks, + unsigned int nbuffers, + unsigned int etabufferDepth, + unsigned int ntklinks, + unsigned int nHCalLinks, + unsigned int nECalLinks, + unsigned int ntk, + unsigned int ncalo, + unsigned int nem, + unsigned int nmu, + bool streaming, + unsigned int outii, + unsigned int pauseii, + bool useAlsoVtxCoords); + // note: this one will work only in CMSSW + MiddleBufferMultififoRegionizerEmulator(const edm::ParameterSet& iConfig); + + ~MiddleBufferMultififoRegionizerEmulator() override; + + static edm::ParameterSetDescription getParameterSetDescription(); + + void initSectorsAndRegions(const RegionizerDecodedInputs& in, const std::vector& out) override; + + void run(const RegionizerDecodedInputs& in, std::vector& out) override; + + // link emulation from decoded inputs (for simulation) + void fillLinks(unsigned int iclock, + const RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid); + void fillLinks(unsigned int iclock, + const RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid); + void fillLinks(unsigned int iclock, + const RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid); + void fillLinks(unsigned int iclock, + const RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid); + template + void fillLinks(unsigned int iclock, const RegionizerDecodedInputs& in, std::vector& links) { + std::vector unused; + fillLinks(iclock, in, links, unused); + } + + void destream(int iclock, + const std::vector& tk_out, + const std::vector& em_out, + const std::vector& calo_out, + const std::vector& mu_out, + PFInputRegion& out); + + // clock-cycle emulation + bool step(bool newEvent, + const std::vector& links_tk, + const std::vector& links_hadCalo, + const std::vector& links_emCalo, + const std::vector& links_mu, + std::vector& out_tk, + std::vector& out_hadCalo, + std::vector& out_emCalo, + std::vector& out_mu, + bool /*unused*/); + + template + void toFirmware(const std::vector& emu, TFw fw[]) { + for (unsigned int i = 0, n = emu.size(); i < n; ++i) { + fw[i] = emu[i]; + } + } + + void reset(); + + protected: + const unsigned int NTK_SECTORS, NCALO_SECTORS; + const unsigned int NTK_LINKS, HCAL_LINKS, ECAL_LINKS, NMU_LINKS; + unsigned int nclocks_, nbuffers_, etabuffer_depth_, ntk_, ncalo_, nem_, nmu_, outii_, pauseii_, nregions_pre_, + nregions_post_; + bool streaming_; + bool init_; + unsigned int iclock_; + std::vector mergedRegions_, outputRegions_; + multififo_regionizer::Regionizer tkRegionizerPre_, tkRegionizerPost_; + multififo_regionizer::Regionizer hadCaloRegionizerPre_, hadCaloRegionizerPost_; + multififo_regionizer::Regionizer emCaloRegionizerPre_, emCaloRegionizerPost_; + multififo_regionizer::Regionizer muRegionizerPre_, muRegionizerPost_; + std::vector tkRoutes_, caloRoutes_, emCaloRoutes_, muRoutes_; + std::vector> tkBuffers_; + std::vector> hadCaloBuffers_; + std::vector> emCaloBuffers_; + std::vector> muBuffers_; + + template + void fillCaloLinks_(unsigned int iclock, + const std::vector>& in, + std::vector& links, + std::vector& valid); + + void fillSharedCaloLinks(unsigned int iclock, + const std::vector>& em_in, + const std::vector>& had_in, + std::vector& links, + std::vector& valid); + + void encode(const l1ct::EmCaloObjEmu& from, l1ct::HadCaloObjEmu& to); + void encode(const l1ct::HadCaloObjEmu& from, l1ct::HadCaloObjEmu& to); + void decode(l1ct::HadCaloObjEmu& had, l1ct::EmCaloObjEmu& em); + }; +} // namespace l1ct + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.h b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.h index 91d36a366a1ae..0d7adcf55fe30 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.h @@ -5,6 +5,7 @@ #include #include +#include #include namespace l1ct { @@ -76,6 +77,60 @@ namespace l1ct { T pop_queue_(std::vector& queue); }; + template + inline bool local_eta_phi_window(const T& t, + const l1ct::glbeta_t& etaMin, + const l1ct::glbeta_t& etaMax, + const l1ct::glbphi_t& phiMin, + const l1ct::glbphi_t& phiMax); + template <> + inline bool local_eta_phi_window(const l1ct::TkObjEmu& t, + const l1ct::glbeta_t& etaMin, + const l1ct::glbeta_t& etaMax, + const l1ct::glbphi_t& phiMin, + const l1ct::glbphi_t& phiMax); + + template + class EtaPhiBuffer { + public: + EtaPhiBuffer() {} + EtaPhiBuffer(unsigned int maxitems, + const l1ct::glbeta_t& etaMin = 0, + const l1ct::glbeta_t& etaMax = 0, + const l1ct::glbeta_t& etaShift = 0, + const l1ct::glbphi_t& phiMin = 0, + const l1ct::glbphi_t& phiMax = 0, + const l1ct::glbphi_t& phiShift = 0) + : size_(maxitems), + iwrite_(0), + iread_(0), + etaMin_(etaMin), + etaMax_(etaMax), + etaShift_(etaShift), + phiMin_(phiMin), + phiMax_(phiMax), + phiShift_(phiShift) {} + void maybe_push(const T& t); + void writeNewEvent() { + iwrite_ = 1 - iwrite_; + items_[iwrite_].clear(); + } + void readNewEvent() { iread_ = 1 - iread_; } + T pop(); + unsigned int writeSize() const { return items_[iwrite_].size(); } + unsigned int readSize() const { return items_[iread_].size(); } + unsigned int maxSize() const { return size_; } + void reset(); + + private: + unsigned int size_, iwrite_, iread_; + l1ct::glbeta_t etaMin_, etaMax_; + l1ct::glbeta_t etaShift_; + l1ct::glbphi_t phiMin_, phiMax_; + l1ct::glbphi_t phiShift_; + std::deque items_[2]; + }; + // forward decl for later template class RegionMux; @@ -183,4 +238,57 @@ namespace l1ct { } // namespace multififo_regionizer } // namespace l1ct +template +inline bool l1ct::multififo_regionizer::local_eta_phi_window(const T& t, + const l1ct::glbeta_t& etaMin, + const l1ct::glbeta_t& etaMax, + const l1ct::glbphi_t& phiMin, + const l1ct::glbphi_t& phiMax) { + return (etaMin == etaMax) || + (etaMin <= t.hwEta && t.hwEta <= etaMax && ((phiMin == phiMax) || (phiMin <= t.hwPhi && t.hwPhi <= phiMax))); +} +template <> +inline bool l1ct::multififo_regionizer::local_eta_phi_window(const l1ct::TkObjEmu& t, + const l1ct::glbeta_t& etaMin, + const l1ct::glbeta_t& etaMax, + const l1ct::glbphi_t& phiMin, + const l1ct::glbphi_t& phiMax) { + return (etaMin == etaMax) || + (etaMin <= t.hwEta && t.hwEta <= etaMax && ((phiMin == phiMax) || (phiMin <= t.hwPhi && t.hwPhi <= phiMax))) || + (etaMin <= t.hwVtxEta() && t.hwVtxEta() <= etaMax && + ((phiMin == phiMax) || (phiMin <= t.hwVtxPhi() && t.hwVtxPhi() <= phiMax))); +} +template +void l1ct::multififo_regionizer::EtaPhiBuffer::maybe_push(const T& t) { + if ((t.hwPt != 0) && local_eta_phi_window(t, etaMin_, etaMax_, phiMin_, phiMax_)) { + if (items_[iwrite_].size() < size_) { + items_[iwrite_].push_back(t); + items_[iwrite_].back().hwEta += etaShift_; + items_[iwrite_].back().hwPhi += phiShift_; + } else { + // uncommenting the message below may be useful for debugging + //dbgCout() << "WARNING: sector buffer is full for " << typeid(T).name() << ", pt = " << t.intPt() + // << ", eta = " << t.intEta() << ", phi = " << t.intPhi() << "\n"; + } + } +} + +template +T l1ct::multififo_regionizer::EtaPhiBuffer::pop() { + T ret; + ret.clear(); + if (!items_[iread_].empty()) { + ret = items_[iread_].front(); + items_[iread_].pop_front(); + } + return ret; +} +template +void l1ct::multififo_regionizer::EtaPhiBuffer::reset() { + iread_ = 0; + iwrite_ = 0; + items_[0].clear(); + items_[1].clear(); +} + #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.icc b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.icc index 66b0538ac38fe..a884ed2f91780 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.icc +++ b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.icc @@ -41,6 +41,11 @@ void l1ct::multififo_regionizer::maybe_push(const l1ct::TkObjEmu template void l1ct::multififo_regionizer::RegionBuffer::initFifos(unsigned int nfifos) { assert(nfifos_ == 0); + bool isGood = + (nfifos == 1 || nfifos == 2 || nfifos == 3 || nfifos == 4 || nfifos == 6 || nfifos == 8 || nfifos == 12); + if (!isGood) { + dbgCerr() << "Error, created regionizer for nfifos == " << nfifos << ", not supported." << std::endl; + } nfifos_ = nfifos; fifos_.resize(nfifos); unsigned int nmerged = nfifos; @@ -53,11 +58,6 @@ void l1ct::multififo_regionizer::RegionBuffer::initFifos(unsigned int nfifos) for (auto& t : queues_.back().second) t.clear(); } - bool isGood = - (nfifos == 1 || nfifos == 2 || nfifos == 3 || nfifos == 4 || nfifos == 6 || nfifos == 8 || nfifos == 12); - if (!isGood) { - dbgCerr() << "Error, created regionizer for nfifos == " << nfifos << ", not supported." << std::endl; - } assert(isGood); } diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_ref.h b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_ref.h index d2b6bbce52b72..965f87dbadcdf 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_ref.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_ref.h @@ -34,6 +34,7 @@ namespace l1ct { enum class BarrelSetup { Full54, Full27, Central18, Central9, Phi18, Phi9 }; MultififoRegionizerEmulator(BarrelSetup barrelSetup, + unsigned int ntklinks, unsigned int nHCalLinks, unsigned int nECalLinks, unsigned int nclocks, diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h index cee3fa5f2c11c..cf8302dcbf74c 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/TauNNIdHW.h @@ -1,32 +1,24 @@ #ifndef L1Trigger_Phase2L1ParticleFlow_TAUNNIDHW_H_ #define L1Trigger_Phase2L1ParticleFlow_TAUNNIDHW_H_ -#include "DataFormats/L1TParticleFlow/interface/layer1_emulator.h" - #include #include -#include "ap_int.h" -#include "ap_fixed.h" + #include "L1Trigger/Phase2L1ParticleFlow/interface/taus/tau_parameters.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/defines.h" +#include "DataFormats/L1TParticleFlow/interface/layer1_emulator.h" #include "DataFormats/L1TParticleFlow/interface/PFCandidate.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/common/nnet_layer.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/common/nnet_activation.h" - -//hls-fpga-machine-learning insert weights -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h" - typedef ap_ufixed<16, 14> pt_t; typedef ap_fixed<10, 4> etaphi_t; +// Tau NN returns two values +struct Tau_NN_Result { + result_t nn_pt_correction; + result_t nn_id; +}; + namespace L1TauEmu { // Data types and constants used in the FPGA and FPGA-optimized functions //etaphi_base maps physical eta phi units onto bits @@ -148,8 +140,8 @@ class TauNNIdHW { void initialize(const std::string &iName, int iNParticles); void SetNNVectorVar(); input_t *NNVectorVar() { return NNvectorVar_.data(); } - result_t EvaluateNN(); - result_t compute(const l1t::PFCandidate &iSeed, std::vector &iParts); + Tau_NN_Result EvaluateNN(); + Tau_NN_Result compute(const l1t::PFCandidate &iSeed, std::vector &iParts); //void print(); std::string fInput_; diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/defines.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/defines.h new file mode 100644 index 0000000000000..1f1a2f73dbb98 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/defines.h @@ -0,0 +1,70 @@ +#ifndef DEFINES_H_ +#define DEFINES_H_ + +#include "ap_fixed.h" +#include "ap_int.h" + +#include +#include + +// hls-fpga-machine-learning insert numbers +#define N_INPUT_1_1 80 +#define N_LAYER_2 25 +#define N_LAYER_2 25 +#define N_LAYER_5 25 +#define N_LAYER_5 25 +#define N_LAYER_8 15 +#define N_LAYER_8 15 +#define N_LAYER_11 15 +#define N_LAYER_11 15 +#define N_LAYER_14 10 +#define N_LAYER_14 10 +#define N_LAYER_17 1 +#define N_LAYER_17 1 +#define N_LAYER_20 1 + +// hls-fpga-machine-learning insert layer-precision +typedef ap_fixed<16, 6> input_t; +typedef ap_fixed<24, 12> input2_t; +typedef ap_fixed<16, 6> model_default_t; +typedef ap_fixed<16, 6> layer2_t; +typedef ap_fixed<9, 3> weight2_t; +typedef ap_fixed<9, 3> bias2_t; +typedef ap_uint<1> layer2_index; +typedef ap_ufixed<9, 0, AP_RND_CONV, AP_SAT> layer4_t; +typedef ap_fixed<18, 8> relu_1_table_t; +typedef ap_fixed<16, 6> layer5_t; +typedef ap_fixed<9, 3> weight5_t; +typedef ap_fixed<9, 3> bias5_t; +typedef ap_uint<1> layer5_index; +typedef ap_ufixed<9, 0, AP_RND_CONV, AP_SAT> layer7_t; +typedef ap_fixed<18, 8> relu_2_table_t; +typedef ap_fixed<16, 6> layer8_t; +typedef ap_fixed<9, 3> weight8_t; +typedef ap_fixed<9, 3> bias8_t; +typedef ap_uint<1> layer8_index; +typedef ap_ufixed<9, 0, AP_RND_CONV, AP_SAT> layer10_t; +typedef ap_fixed<18, 8> relu_3_table_t; +typedef ap_fixed<16, 6> layer11_t; +typedef ap_fixed<9, 3> weight11_t; +typedef ap_fixed<9, 3> bias11_t; +typedef ap_uint<1> layer11_index; +typedef ap_ufixed<9, 0, AP_RND_CONV, AP_SAT> layer13_t; +typedef ap_fixed<18, 8> relu_4_table_t; +typedef ap_fixed<16, 6> layer14_t; +typedef ap_fixed<9, 3> weight14_t; +typedef ap_fixed<9, 3> bias14_t; +typedef ap_uint<1> layer14_index; +typedef ap_ufixed<9, 0, AP_RND_CONV, AP_SAT> layer16_t; +typedef ap_fixed<18, 8> relu_5_table_t; +typedef ap_fixed<16, 6> layer17_t; +typedef ap_fixed<16, 7> weight17_t; +typedef ap_fixed<16, 7> bias17_t; +typedef ap_uint<1> layer17_index; +typedef ap_fixed<16, 6> result_t; +typedef ap_fixed<18, 8> jetID_output_table_t; +typedef ap_fixed<16, 7> weight20_t; +typedef ap_fixed<16, 7> bias20_t; +typedef ap_uint<1> layer20_index; + +#endif \ No newline at end of file diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_activation.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_activation.h new file mode 100644 index 0000000000000..e5413aedf5fc5 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_activation.h @@ -0,0 +1,94 @@ +#ifndef NNET_ACTIVATION_H_ +#define NNET_ACTIVATION_H_ + +#include +#include "ap_fixed.h" +#include "nnet_common.h" + +namespace nnet { + + struct activ_config { + // IO size + static const unsigned n_in = 10; + + // Internal info + static const unsigned table_size = 1024; + + // Resource reuse info + static const unsigned io_type = io_parallel; + static const unsigned reuse_factor = 1; + + // Internal data type definitions + typedef ap_fixed<18, 8> table_t; + }; + + // ************************************************* + // LINEAR Activation -- See Issue 53 + // ************************************************* + template + void linear(data_T data[CONFIG_T::n_in], res_T res[CONFIG_T::n_in]) { + for (unsigned ii = 0; ii < CONFIG_T::n_in; ii++) { + res[ii] = data[ii]; + } + } + + // ************************************************* + // RELU Activation + // ************************************************* + template + void relu(data_T data[CONFIG_T::n_in], res_T res[CONFIG_T::n_in]) { + data_T datareg; + for (unsigned ii = 0; ii < CONFIG_T::n_in; ii++) { + datareg = data[ii]; + if (datareg > 0) + res[ii] = datareg; + else + res[ii] = 0; + } + } + + // ************************************************* + // Sigmoid Activation + // ************************************************* + template + inline out_T sigmoid_fcn_float(float input) { + return 1.0 / (1 + exp(-input)); + } + + template + void init_sigmoid_table(res_T table_out[N_TABLE]) { + // Default logistic sigmoid function: + // result = 1/(1+e^(-x)) + for (unsigned ii = 0; ii < N_TABLE; ii++) { + // First, convert from table index to X-value (signed 8-bit, range -8 to +8) + float in_val = 2 * 8.0 * (ii - float(N_TABLE) / 2.0) / float(N_TABLE); + // Next, compute lookup table function + res_T real_val = sigmoid_fcn_float(in_val); + //std::cout << "Lookup table In Value: " << in_val << " Result: " << real_val << std::endl; + table_out[ii] = (res_T)real_val; + } + } + + template + void sigmoid(data_T data[CONFIG_T::n_in], res_T res[CONFIG_T::n_in]) { + // Initialize the lookup table + res_T sigmoid_table[CONFIG_T::table_size]; + init_sigmoid_table(sigmoid_table); + + // Index into the lookup table based on data + int data_round; + unsigned index; + for (unsigned ii = 0; ii < CONFIG_T::n_in; ii++) { + data_round = data[ii] * CONFIG_T::table_size / 16; + index = data_round + 8 * CONFIG_T::table_size / 16; + /*if (index < 0) + index = 0;*/ + if (index > CONFIG_T::table_size - 1) + index = CONFIG_T::table_size - 1; + res[ii] = (res_T)sigmoid_table[index]; + } + } + +} // namespace nnet + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_common.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_common.h new file mode 100644 index 0000000000000..8441cca4412c2 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_common.h @@ -0,0 +1,52 @@ +#ifndef NNET_COMMON_H_ +#define NNET_COMMON_H_ + +#include "ap_fixed.h" + +// This is a substitute for "ceil(n/(float)d)". +#define DIV_ROUNDUP(n, d) ((n + d - 1) / d) +#define MIN(n, d) (n > d ? d : n) +#define MAX(n, d) (n > d ? n : d) + +#define STRINGIFY(x) #x +#define EXPAND_STRING(x) STRINGIFY(x) + +namespace nnet { + + // Common type definitions + enum io_type { io_parallel = 0, io_stream }; + enum strategy { latency, resource }; + + template + class Op_add { + public: + T operator()(T a, T b) { return a + b; } + }; + + template + class Op_and { + public: + T operator()(T a, T b) { return a && b; } + }; + + template + class Op_or { + public: + T operator()(T a, T b) { return a || b; } + }; + + template + class Op_max { + public: + T operator()(T a, T b) { return a >= b ? a : b; } + }; + + template + class Op_min { + public: + T operator()(T a, T b) { return a <= b ? a : b; } + }; + +} // namespace nnet + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_dense.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_dense.h new file mode 100644 index 0000000000000..22edbcbf501bd --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_dense.h @@ -0,0 +1,72 @@ +#ifndef NNET_DENSE_H_ +#define NNET_DENSE_H_ + +#include "nnet_common.h" +#include "nnet_mult.h" +#include + +namespace nnet { + + struct dense_config { + // Internal data type definitions + typedef float bias_t; + typedef float weight_t; + typedef float accum_t; + + // Layer Sizes + static const unsigned n_in = 10; + static const unsigned n_out = 10; + + // Resource reuse info + int io_type = io_parallel; + int strategy = latency; + int reuse_factor = 1; + static const bool store_weights_in_bram = false; + int n_zeros = 0; + // partitioning arrays cyclically to go with roll factors? + // Product function to use + template + using product = nnet::product::mult; + }; + + template + void dense(data_T data[CONFIG_T::n_in], + res_T res[CONFIG_T::n_out], + typename CONFIG_T::weight_t weights[CONFIG_T::n_in * CONFIG_T::n_out], + typename CONFIG_T::bias_t biases[CONFIG_T::n_out]) { + data_T cache; + typename CONFIG_T::accum_t mult[CONFIG_T::n_in * CONFIG_T::n_out]; + typename CONFIG_T::accum_t acc[CONFIG_T::n_out]; + + // Do the matrix-multiply + for (unsigned ii = 0; ii < CONFIG_T::n_in; ii++) { + cache = data[ii]; + for (unsigned jj = 0; jj < CONFIG_T::n_out; jj++) { + unsigned index = ii * CONFIG_T::n_out + jj; + mult[index] = CONFIG_T::template product::product(cache, weights[index]); + } + } + + // Initialize accumulator with input biases + for (unsigned iacc = 0; iacc < CONFIG_T::n_out; iacc++) { + acc[iacc] = (typename CONFIG_T::accum_t)biases[iacc]; + } + + // Accumulate multiplication result + for (unsigned ii = 0; ii < CONFIG_T::n_in; ii++) { + for (unsigned jj = 0; jj < CONFIG_T::n_out; jj++) { + unsigned index = ii * CONFIG_T::n_out + jj; + acc[jj] += mult[index]; + } + } + + // Cast to "res_t" type + for (unsigned ires = 0; ires < CONFIG_T::n_out; ires++) { + // res[ires] = (res_T) (acc[ires]); + res[ires] = cast(acc[ires]); + } + } + +} // namespace nnet + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_mult.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_mult.h new file mode 100644 index 0000000000000..3e2ce5b84b080 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_mult.h @@ -0,0 +1,108 @@ +#ifndef NNET_MULT_H_ +#define NNET_MULT_H_ + +#include "nnet_common.h" +#include +#include + +namespace nnet { + + constexpr int ceillog2(int x) { return (x <= 2) ? 1 : 1 + ceillog2((x + 1) / 2); } + + namespace product { + + /* --- + * different methods to perform the product of input and weight, depending on the + * types of each. + * --- */ + + class Product {}; + + template + class both_binary : public Product { + public: + static x_T product(x_T a, w_T w) { return a == w; } + }; + + template + class weight_binary : public Product { + public: + static auto product(x_T a, w_T w) -> decltype(-a) { + if (w == 0) + return -a; + else + return a; + } + }; + + template + class data_binary : public Product { + public: + static auto product(x_T a, w_T w) -> decltype(-w) { + if (a == 0) + return -w; + else + return w; + } + }; + + template + class weight_ternary : public Product { + public: + static auto product(x_T a, w_T w) -> decltype(-a) { + if (w == 0) + return 0; + else if (w == -1) + return -a; + else + return a; // if(w == 1) + } + }; + + template + class mult : public Product { + public: + static auto product(x_T a, w_T w) -> decltype(a * w) { return a * w; } + }; + + template + class weight_exponential : public Product { + public: + using r_T = + ap_fixed<2 * (decltype(w_T::weight)::width + x_T::width), (decltype(w_T::weight)::width + x_T::width)>; + static r_T product(x_T a, w_T w) { + // Shift by the exponent. Negative weights shift right + r_T y = static_cast(a) << w.weight; + + // Negate or not depending on weight sign + return w.sign == 1 ? y : static_cast(-y); + } + }; + + } // namespace product + + template + inline typename std::enable_if>::value && + std::is_same>::value, + ap_int>::type + cast(typename CONFIG_T::accum_t x) { + return (ap_int)(x - CONFIG_T::n_in / 2) * 2; + } + + template + inline typename std::enable_if>::value && + !std::is_same>::value, + res_T>::type + cast(typename CONFIG_T::accum_t x) { + return (res_T)x; + } + + template + inline typename std::enable_if<(!std::is_same>::value), res_T>::type cast( + typename CONFIG_T::accum_t x) { + return (res_T)x; + } + +} // namespace nnet + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/tau_parameters.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/tau_parameters.h index c6344e19f7c52..e488ac1bf4902 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/tau_parameters.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/tau_parameters.h @@ -1,100 +1,218 @@ #ifndef PARAMETERS_H_ #define PARAMETERS_H_ -#include -#include "ap_int.h" #include "ap_fixed.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/common/nnet_layer.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/common/nnet_activation.h" -#include "L1Trigger/Phase2L1ParticleFlow/interface/common/nnet_common.h" - -//hls-fpga-machine-learning insert numbers -#define N_INPUTS 80 -#define N_LAYER_1 25 -#define N_LAYER_2 10 -#define N_LAYER_3 10 -#define N_OUTPUTS 1 - -//hls-fpga-machine-learning insert layer-precision - -typedef ap_fixed<24, 12> input2_t; -typedef ap_fixed<16, 8> input_t; -typedef ap_fixed<16, 8> layer1_t; -typedef ap_fixed<16, 8> layer2_t; -typedef ap_fixed<16, 8> layer3_t; -typedef ap_fixed<16, 8> result_t; -typedef ap_fixed<16, 8> accum_default_t; -typedef ap_fixed<16, 8> weight_default_t; -typedef ap_fixed<16, 8> bias_default_t; - -//hls-fpga-machine-learning insert layer-config -struct config1 : nnet::layer_config { - static const unsigned n_in = N_INPUTS; - static const unsigned n_out = N_LAYER_1; +#include "ap_int.h" + +#include + +// Tau NN components +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_activation.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/nnet_utils/nnet_dense.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/defines.h" + +// Load the NN weights +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w5.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b5.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w8.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b8.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w11.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b11.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w14.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b14.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w17.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b17.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w20.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b20.h" + +// hls-fpga-machine-learning insert layer-config +// Dense_1 +struct config2 : nnet::dense_config { + static const unsigned n_in = 80; + static const unsigned n_out = 25; + static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; + static const unsigned reuse_factor = 1; + static const unsigned n_zeros = 1205; + static const unsigned n_nonzeros = 795; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; + static const bool store_weights_in_bram = false; + typedef model_default_t accum_t; + typedef bias2_t bias_t; + typedef weight2_t weight_t; + typedef layer2_index index_t; + template + using product = nnet::product::mult; +}; + +// relu_1 +struct relu_config4 : nnet::activ_config { + static const unsigned n_in = 25; + static const unsigned table_size = 1024; + static const unsigned io_type = nnet::io_parallel; + static const unsigned reuse_factor = 1; + typedef relu_1_table_t table_t; +}; + +// Dense_2 +struct config5 : nnet::dense_config { + static const unsigned n_in = 25; + static const unsigned n_out = 25; + static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; + static const unsigned reuse_factor = 1; + static const unsigned n_zeros = 375; + static const unsigned n_nonzeros = 250; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; + static const bool store_weights_in_bram = false; + typedef model_default_t accum_t; + typedef bias5_t bias_t; + typedef weight5_t weight_t; + typedef layer5_index index_t; + template + using product = nnet::product::mult; +}; + +// relu_2 +struct relu_config7 : nnet::activ_config { + static const unsigned n_in = 25; + static const unsigned table_size = 1024; + static const unsigned io_type = nnet::io_parallel; + static const unsigned reuse_factor = 1; + typedef relu_2_table_t table_t; +}; + +// Dense_3 +struct config8 : nnet::dense_config { + static const unsigned n_in = 25; + static const unsigned n_out = 15; static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; static const unsigned reuse_factor = 1; - //static const unsigned reuse_factor = 6; - static const unsigned n_zeros = 0; + static const unsigned n_zeros = 225; + static const unsigned n_nonzeros = 150; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; static const bool store_weights_in_bram = false; - typedef accum_default_t accum_t; - typedef bias_default_t bias_t; - typedef weight_default_t weight_t; + typedef model_default_t accum_t; + typedef bias8_t bias_t; + typedef weight8_t weight_t; + typedef layer8_index index_t; + template + using product = nnet::product::mult; }; -struct relu_config1 : nnet::activ_config { - static const unsigned n_in = N_LAYER_1; + +// relu_3 +struct relu_config10 : nnet::activ_config { + static const unsigned n_in = 15; static const unsigned table_size = 1024; static const unsigned io_type = nnet::io_parallel; + static const unsigned reuse_factor = 1; + typedef relu_3_table_t table_t; }; -struct config2 : nnet::layer_config { - static const unsigned n_in = N_LAYER_1; - static const unsigned n_out = N_LAYER_2; + +// Dense_4 +struct config11 : nnet::dense_config { + static const unsigned n_in = 15; + static const unsigned n_out = 15; static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; static const unsigned reuse_factor = 1; - //static const unsigned reuse_factor = 6; - static const unsigned n_zeros = 0; + static const unsigned n_zeros = 135; + static const unsigned n_nonzeros = 90; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; static const bool store_weights_in_bram = false; - typedef accum_default_t accum_t; - typedef bias_default_t bias_t; - typedef weight_default_t weight_t; + typedef model_default_t accum_t; + typedef bias11_t bias_t; + typedef weight11_t weight_t; + typedef layer11_index index_t; + template + using product = nnet::product::mult; }; -struct relu_config2 : nnet::activ_config { - static const unsigned n_in = N_LAYER_2; + +// relu_4 +struct relu_config13 : nnet::activ_config { + static const unsigned n_in = 15; static const unsigned table_size = 1024; static const unsigned io_type = nnet::io_parallel; + static const unsigned reuse_factor = 1; + typedef relu_4_table_t table_t; }; -struct config3 : nnet::layer_config { - static const unsigned n_in = N_LAYER_2; - static const unsigned n_out = N_LAYER_3; + +// Dense_5 +struct config14 : nnet::dense_config { + static const unsigned n_in = 15; + static const unsigned n_out = 10; static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; static const unsigned reuse_factor = 1; - //static const unsigned reuse_factor = 6; - static const unsigned n_zeros = 0; + static const unsigned n_zeros = 90; + static const unsigned n_nonzeros = 60; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; static const bool store_weights_in_bram = false; - typedef accum_default_t accum_t; - typedef bias_default_t bias_t; - typedef weight_default_t weight_t; + typedef model_default_t accum_t; + typedef bias14_t bias_t; + typedef weight14_t weight_t; + typedef layer14_index index_t; + template + using product = nnet::product::mult; }; -struct relu_config3 : nnet::activ_config { - static const unsigned n_in = N_LAYER_3; + +// relu_5 +struct relu_config16 : nnet::activ_config { + static const unsigned n_in = 10; static const unsigned table_size = 1024; static const unsigned io_type = nnet::io_parallel; + static const unsigned reuse_factor = 1; + typedef relu_5_table_t table_t; }; -struct config4 : nnet::layer_config { - static const unsigned n_in = N_LAYER_3; - static const unsigned n_out = N_OUTPUTS; + +// Dense_6 +struct config17 : nnet::dense_config { + static const unsigned n_in = 10; + static const unsigned n_out = 1; static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; static const unsigned reuse_factor = 1; - //static const unsigned reuse_factor = 6; - static const unsigned n_zeros = 0; + static const unsigned n_zeros = 6; + static const unsigned n_nonzeros = 4; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; static const bool store_weights_in_bram = false; - typedef accum_default_t accum_t; - typedef bias_default_t bias_t; - typedef weight_default_t weight_t; + typedef model_default_t accum_t; + typedef bias17_t bias_t; + typedef weight17_t weight_t; + typedef layer17_index index_t; + template + using product = nnet::product::mult; }; -struct sigmoid_config4 : nnet::activ_config { - static const unsigned n_in = N_OUTPUTS; + +// jetID_output +struct sigmoid_config19 : nnet::activ_config { + static const unsigned n_in = 1; static const unsigned table_size = 1024; static const unsigned io_type = nnet::io_parallel; + static const unsigned reuse_factor = 1; + typedef jetID_output_table_t table_t; +}; + +// pT_output +struct config20 : nnet::dense_config { + static const unsigned n_in = 10; + static const unsigned n_out = 1; + static const unsigned io_type = nnet::io_parallel; + static const unsigned strategy = nnet::latency; + static const unsigned reuse_factor = 1; + static const unsigned n_zeros = 6; + static const unsigned n_nonzeros = 4; + static const unsigned multiplier_limit = DIV_ROUNDUP(n_in * n_out, reuse_factor) - n_zeros / reuse_factor; + static const bool store_weights_in_bram = false; + typedef model_default_t accum_t; + typedef bias20_t bias_t; + typedef weight20_t weight_t; + typedef layer20_index index_t; + template + using product = nnet::product::mult; }; -#endif +#endif \ No newline at end of file diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h deleted file mode 100644 index cc14299dc03eb..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b1.h +++ /dev/null @@ -1,14 +0,0 @@ -//Numpy array shape [25] -//Min -0.734825849533 -//Max 1.288661003113 -//Number of zeros 0 - -#ifndef B1_H_ -#define B1_H_ - -weight_default_t b1[25] = {-0.12057505, -0.05409636, 0.27422485, 0.49775919, -0.73482585, 0.44995615, 0.52624124, - -0.71328187, -0.43596983, 0.10772870, -0.68372047, 0.22197038, -0.53673136, -0.00771000, - 0.06140821, 1.28866100, -0.12453079, 0.16897179, 0.18858922, -0.17255782, -0.24242370, - -0.21922758, 0.40799412, 0.46138164, 0.85911417}; - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b11.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b11.h new file mode 100644 index 0000000000000..289d5b76f7f7f --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b11.h @@ -0,0 +1,25 @@ +//Numpy array shape [15] +//Min -0.062500000000 +//Max 0.250000000000 +//Number of zeros 3 + +#ifndef B11_H_ +#define B11_H_ + +bias11_t b11[15] = {0.031250, + 0.000000, + 0.000000, + 0.078125, + 0.234375, + -0.062500, + 0.093750, + 0.000000, + 0.062500, + 0.109375, + -0.062500, + -0.015625, + 0.250000, + 0.109375, + -0.046875}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b14.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b14.h new file mode 100644 index 0000000000000..9de3170588cec --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b14.h @@ -0,0 +1,12 @@ +//Numpy array shape [10] +//Min -0.031250000000 +//Max 0.250000000000 +//Number of zeros 0 + +#ifndef B14_H_ +#define B14_H_ + +bias14_t b14[10] = { + 0.031250, 0.015625, 0.046875, -0.015625, -0.031250, 0.046875, 0.203125, 0.015625, 0.250000, -0.015625}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b17.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b17.h new file mode 100644 index 0000000000000..540e383f1cdf0 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b17.h @@ -0,0 +1,11 @@ +//Numpy array shape [1] +//Min -0.714843750000 +//Max -0.714843750000 +//Number of zeros 0 + +#ifndef B17_H_ +#define B17_H_ + +bias17_t b17[1] = {-0.714844}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h index 8a0d269df26f1..b9cf57fb0c52d 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b2.h @@ -1,20 +1,13 @@ -//Numpy array shape [10] -//Min -0.380347400904 -//Max 0.551839828491 +//Numpy array shape [25] +//Min -0.640625000000 +//Max 1.328125000000 //Number of zeros 0 #ifndef B2_H_ #define B2_H_ -weight_default_t b2[10] = {0.55183983, - 0.36323273, - -0.13108490, - -0.38034740, - 0.08559006, - 0.01700789, - 0.13562575, - -0.32752651, - 0.48282012, - -0.15096320}; +bias2_t b2[25] = {-0.312500, -0.281250, 0.687500, -0.250000, -0.640625, 0.656250, 0.500000, 0.265625, 0.171875, + -0.046875, -0.093750, 0.156250, -0.156250, -0.093750, -0.171875, 0.234375, 0.046875, 0.125000, + -0.140625, 0.187500, 0.937500, -0.046875, -0.250000, -0.250000, 1.328125}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b20.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b20.h new file mode 100644 index 0000000000000..8887c33e169f4 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b20.h @@ -0,0 +1,11 @@ +//Numpy array shape [1] +//Min 0.238281250000 +//Max 0.238281250000 +//Number of zeros 0 + +#ifndef B20_H_ +#define B20_H_ + +bias20_t b20[1] = {0.238281}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h deleted file mode 100644 index 740a1482c32e2..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b3.h +++ /dev/null @@ -1,20 +0,0 @@ -//Numpy array shape [10] -//Min -0.936354994774 -//Max 0.407682240009 -//Number of zeros 0 - -#ifndef B3_H_ -#define B3_H_ - -weight_default_t b3[10] = {-0.58549309, - -0.06117089, - -0.24173595, - 0.17925857, - -0.93635499, - 0.18813914, - 0.13134949, - 0.04132507, - 0.40768224, - 0.29987794}; - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h deleted file mode 100644 index 07d968b7f0a5a..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b4.h +++ /dev/null @@ -1,11 +0,0 @@ -//Numpy array shape [1] -//Min 0.023343238980 -//Max 0.023343238980 -//Number of zeros 0 - -#ifndef B4_H_ -#define B4_H_ - -weight_default_t b4[1] = {0.02334324}; - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b5.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b5.h new file mode 100644 index 0000000000000..82ab448e8b98e --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b5.h @@ -0,0 +1,13 @@ +//Numpy array shape [25] +//Min -0.125000000000 +//Max 0.265625000000 +//Number of zeros 1 + +#ifndef B5_H_ +#define B5_H_ + +bias5_t b5[25] = {-0.015625, 0.046875, -0.109375, 0.078125, 0.171875, 0.156250, 0.062500, 0.171875, 0.109375, + 0.265625, 0.234375, 0.125000, -0.046875, -0.062500, 0.015625, -0.062500, 0.156250, 0.093750, + 0.078125, -0.109375, 0.109375, 0.093750, 0.000000, -0.125000, 0.140625}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b8.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b8.h new file mode 100644 index 0000000000000..2cfe199fc7265 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/b8.h @@ -0,0 +1,25 @@ +//Numpy array shape [15] +//Min -0.109375000000 +//Max 0.265625000000 +//Number of zeros 0 + +#ifndef B8_H_ +#define B8_H_ + +bias8_t b8[15] = {0.093750, + 0.046875, + -0.015625, + 0.265625, + 0.046875, + -0.078125, + 0.031250, + -0.062500, + -0.015625, + 0.015625, + 0.062500, + 0.062500, + -0.109375, + -0.046875, + 0.140625}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h deleted file mode 100644 index 34e95d5f9469b..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w1.h +++ /dev/null @@ -1,234 +0,0 @@ -//Numpy array shape [80, 25] -//Min -2.676796197891 -//Max 3.172224998474 -//Number of zeros 0 - -#ifndef W1_H_ -#define W1_H_ - -weight_default_t w1[2000] = { - -0.24994563, -0.01592130, 0.02984710, -0.03246316, -0.19607241, -0.02163565, -0.00572438, 0.01376110, 0.06863546, - -0.21986796, -0.05606571, 0.06991967, 0.07118288, -0.00832175, -0.03974251, -0.12646708, 0.01565769, 0.02143256, - 0.04822187, -0.01806841, -0.00104700, 0.08732048, -0.19190465, -0.00814264, -0.15155232, 1.28681350, 0.13748017, - 0.39079481, -0.31852159, -0.28351930, 0.04033466, -0.42634365, -0.13127394, -0.20465094, -0.26889697, 0.70893532, - 0.43394735, 0.70848930, 0.04386011, 0.51139277, 0.40600044, -0.50317824, -0.25791675, 0.66503000, -0.40065920, - 0.65473962, -0.00253041, -0.33962274, -0.08765265, -0.11767972, 0.06714126, -0.60412002, -0.38466910, 0.15584932, - -0.06518575, -0.71045715, 0.46661234, 0.24567224, 0.29929164, 0.07424527, 0.00885416, 0.34313247, -0.40707770, - 0.49099818, -0.74588889, -0.10123775, 0.53515995, -0.42928374, -0.12010060, 0.12295905, -0.69315630, 0.38088876, - 0.01870272, 0.10997168, 0.26679659, 0.93503916, 1.01998508, -0.10151886, 0.15381983, 0.08079384, 0.12287367, - -0.29244336, 0.00544387, -0.31489906, -0.21896380, -0.07303306, 0.38462871, -0.88183403, 0.03077884, 0.05728795, - 1.33863544, 0.30312559, 0.28246397, -0.04266880, -0.50959545, 0.60257953, 0.41271350, 0.17042276, 0.60114610, - 0.22945273, 0.73635733, 0.20843484, 0.33445162, -1.11147344, -0.30075341, 0.51580977, -0.18865807, -0.91119158, - -0.39129823, 0.03684294, -0.68891215, -0.59370238, 0.65122741, -0.17603758, 0.66590655, 1.25159955, -0.37625167, - 0.32980818, 0.77502394, -1.58798909, 0.22748075, -0.95392829, -0.37276012, -0.61004913, 0.92332447, -0.09721770, - -0.72238702, -0.34178290, 1.19741392, -0.44719616, -0.75276721, 0.17758735, 0.02224001, -0.08087371, 0.25889483, - 0.03444218, 0.33437315, -0.78717542, 0.07385066, -1.37520838, -0.00982160, 0.42453086, 0.38150313, 0.19821575, - 0.93540424, -1.05033779, 0.57981151, 0.33810690, 0.24172245, -0.02910789, -2.12628174, -0.63280356, 0.29773250, - 3.17222500, -0.49264374, 0.29331800, 1.39211619, -0.76175922, -0.45130953, 0.42933312, -1.54781485, 0.02419901, - -2.16194177, -0.48207095, -0.31510717, -2.11770678, 0.76639241, 1.87467754, -0.52695322, 1.70596778, -2.33492446, - 0.41794685, 1.27378273, -0.10234303, -0.49648684, 1.86050689, -0.50189257, -0.16991651, -0.46694538, -0.00889901, - 0.58299482, 0.08892005, -0.20688151, 0.31415370, -0.20101114, -0.33977607, 0.07279664, 0.60349727, -0.34133548, - -0.48008150, 1.27710438, -0.29224181, -0.02558731, 0.86315304, 0.27016857, 0.12425910, -0.73576742, -0.41963914, - 0.04202708, 0.95604628, 0.15431352, 0.01539763, -0.01423682, 0.10296305, -0.08639759, 0.11045294, -0.03732327, - 0.13618803, 0.10233897, 0.21258777, 0.09800927, -0.05657235, -0.05041919, -0.16974531, 0.12601873, -0.14161462, - 0.12978475, -0.18991150, 0.07589593, 0.06911660, 0.10042754, -0.24628711, -0.28696042, -0.25114185, 0.07191065, - 0.36939719, 0.20196825, 0.19622889, 0.01961792, -0.52867746, 0.02060650, 0.32239082, 0.21925712, -0.29252347, - -0.07450268, 0.07430969, 0.19808058, -0.08999527, -0.41864324, 0.12763937, 0.10551479, 0.13380286, 0.26029557, - -0.09461474, 0.01125190, -0.01001714, 0.38791370, -0.59581864, -0.31798267, 0.13044289, -0.29599217, 0.06823352, - -0.13354187, -0.04749685, 0.44879583, -0.51446730, 0.37497100, -0.19995253, 0.11865021, -0.35735917, 0.28974858, - 0.12435340, 0.00421873, 0.08717419, -0.20247488, -0.05830143, -0.04514945, 0.03859331, -0.02609805, -0.22617900, - 0.09613950, -0.33556163, 0.23096344, 0.06258421, -0.05920995, -0.81900448, -0.61287695, 0.12958381, 0.79978222, - -0.32717428, 0.23371933, -0.11298512, 0.06942000, 0.52603680, 0.06176474, -1.15612555, 0.38241693, 0.13082752, - -0.69803941, -0.44519529, 0.24077913, -0.18162382, -0.41263813, 0.00626828, -0.56472856, -0.09948663, -0.18302669, - 0.95950598, -0.30670726, 0.02000829, 1.03344405, 0.48644996, 0.34142539, -0.14057057, -0.08406556, 0.58438534, - -0.22699004, -1.44362915, -0.95808500, 0.35579941, 0.29348719, -0.11956982, 0.27683857, 0.57247722, 1.37406516, - 0.18090977, -0.48121765, 0.06628983, -0.17082840, -0.86288124, -0.12994859, -0.10934682, -0.44934374, 0.64140421, - 0.43463030, -0.40653625, -0.92759031, -0.26878390, 0.47970986, -0.45654160, -0.31465080, 0.94702774, -0.16918387, - -0.42442611, 0.00438548, 0.00923580, 0.90002447, -0.55483723, -0.11998936, -0.24002072, 0.48533896, 0.11834613, - -0.07799944, -0.42383757, -0.16936988, -0.90337831, 0.50523067, 0.72644299, 0.32532176, 0.05432085, 0.68847007, - -0.60442829, 0.80158204, 0.99259549, -0.30103669, 0.05667507, 0.36611405, -0.94233608, 0.23696357, -0.61583829, - 0.52145499, 0.14344153, 0.00328588, 0.36766458, -0.71754855, 0.42685041, -0.52480674, -0.41898140, 0.29636848, - -0.70113719, -0.20197862, -0.37344661, -0.17589939, -0.54375410, -0.72718179, -1.11110735, 0.32055253, -0.25643155, - -0.30023971, -0.58632553, 0.50699002, 0.73423439, 0.04769143, -0.69287294, 0.71418941, -0.98707741, -0.48756132, - 0.14591850, -0.00972518, -0.18280549, 0.33020869, 0.07739078, -0.27737662, 0.32508579, 0.52724129, -0.13557516, - 0.27238563, 0.73315942, 0.99855763, 0.84088510, 0.08538753, 0.13155562, -0.14930172, 0.02797297, 0.10585469, - 0.02903437, -0.30760777, -0.08591483, -0.16532275, -0.04133916, 0.12315685, 0.08694953, 0.12440344, -0.39931026, - -0.06502170, -0.07466459, 0.25206035, -0.11492801, 0.01234671, 0.02252278, 0.10730736, 0.00707526, -0.04144976, - 0.16572779, -0.06111651, -0.05090914, 0.22255808, 0.21892326, 0.02140033, -0.26701146, -0.09199855, -0.34320089, - 0.04647652, 0.24066357, 0.00315903, -0.14013545, 0.20657861, 0.19460022, 0.13409390, -0.12650517, -0.00711635, - -0.36546883, -0.27223793, 0.22557122, 0.15888590, -0.19231611, -0.01208463, -0.42694032, 0.00924643, -0.04871246, - 0.14489457, 0.19934957, 0.03268532, -0.26802376, -0.06917346, -0.08818764, -0.06936200, -0.00991716, -0.14875649, - 0.20260695, -0.03016085, -0.11772685, -0.06528303, 0.33984911, -0.42861041, 0.04678998, 0.24468878, -0.26212654, - 0.05760178, -0.01277140, 0.25944546, 0.21451963, -0.22919317, 0.08311309, 0.01015522, -0.07370505, -0.28775448, - 0.28065524, 0.80104679, -0.69237137, 0.09623399, 0.04745018, -0.11536954, 0.21645974, -0.17521553, -0.12839432, - -0.32616171, -0.19263010, -0.05076053, -0.32757092, 0.14068608, -0.31371123, -0.36700678, 1.02383471, 0.41596910, - -0.39243886, -0.39699236, -0.18623418, 0.23590773, 0.44462955, -0.01158825, 0.15543512, 0.36914709, -0.19606984, - 0.04083448, 0.11609410, 0.10854912, -0.93667829, -0.59664226, -0.10577209, -0.03770705, -0.82973319, 0.07100462, - 0.46515539, 0.70493704, 0.11769867, -0.09642658, 0.19184169, -0.60267162, -0.15556012, -0.06323973, 0.25728056, - 0.32714555, 0.37354282, 0.64966816, -0.85379928, -0.52891093, -0.53338081, 0.00071357, -0.80146301, -0.23014045, - 0.31370798, 0.19652064, -0.30330509, 0.59732527, -0.61618036, 0.43174049, -0.33461112, -0.09222537, -0.57418764, - 0.31234556, -0.06441883, -0.29923901, 0.04574157, 0.00199618, -0.07604899, 0.18836573, 0.22399814, 0.11964659, - 0.27587023, 0.54073912, -0.07070547, 1.09669447, 0.60586989, -0.56627184, 0.73163223, -0.06587803, -0.95469141, - 0.05797904, -0.32544577, 0.46618402, -0.42818251, -0.15697184, -0.07984095, -0.06863761, 0.27211952, -0.63966370, - -0.85368210, 1.04474986, -0.03273144, 0.04721467, -0.57129002, -0.51463783, -0.01716019, 0.41848388, -0.92354447, - -0.02085111, -0.35023081, -0.28929639, -0.12352847, -0.06491212, 0.62791741, 0.52128577, -0.08786132, 0.50663567, - -0.85222739, -0.67956436, -0.07901944, -0.20291066, -0.12427756, 0.21070847, 0.36405188, 0.01811016, -0.35558707, - -0.07505420, -0.51016599, 0.08317504, 0.78687006, 0.26184845, 0.32996735, -0.11742579, 0.13708171, 0.09675904, - 0.00351471, 0.17156938, 0.04663955, -0.01313619, 0.07353903, 0.11845510, -0.03040916, -0.11860044, -0.05890951, - 0.13578244, -0.27024615, 0.12044270, -0.06773756, 0.26196989, 0.03754797, -0.69103962, 0.11767364, 0.08418153, - -0.07073509, -0.08945126, -0.04465364, -0.01228451, 0.61217988, 0.36905605, -0.06841971, 0.01820075, 0.22142294, - 0.20999679, -0.00854848, -0.21310976, -0.48690179, -0.06172886, 0.09083650, 0.47623742, -0.38875908, 0.29984316, - 0.35164335, 0.07724196, 0.25907773, -0.03366175, 0.00794181, -0.16796382, 0.12707716, 0.67827290, -0.46863237, - 0.40221474, -0.01072991, -0.01881496, -0.22039062, -0.00463564, -0.20179020, 0.14899430, 0.09645735, 0.08785056, - 0.05667125, -0.08783643, -0.57045329, -0.27956113, 0.32969514, -0.32422251, 0.03947007, 0.04782788, 0.12597121, - 0.12803499, 0.24237561, 0.03641291, 0.02941555, -0.13378389, 0.71286631, 0.13059177, -0.11221728, -0.04303265, - 0.32258469, 0.03121127, 0.19749436, 0.80445844, -0.83933711, 0.40717539, -0.08058111, 0.18654235, 0.58147413, - -0.22004756, -0.21094175, -0.49914742, -0.07245248, 0.21281776, -0.72978270, 0.11609764, -0.12739497, -0.49795446, - 0.91565651, 0.71345496, -0.19992878, 0.12728572, -0.34958413, 0.51537168, 0.36229423, -0.20545541, -0.04014085, - -0.15503673, 0.46182132, -0.18324539, -0.02288571, -0.12150281, -0.35487393, -0.25479561, 0.34288880, 0.01429710, - 0.03762121, 0.01153337, 0.11537866, -0.11222634, -0.04343228, 0.09371492, 0.24208696, 0.02680596, 0.08744393, - -0.01195653, -0.02051427, 0.46111181, 0.34674245, 0.17142926, -0.32360074, -0.30470049, -0.08778754, 0.56703365, - -0.39670938, 0.01970642, -0.24996454, 0.59148031, -0.04976763, 0.42775628, -0.51978588, 0.74823248, -0.24332942, - -0.10120203, -0.71067011, -0.05833459, 0.24460207, 0.12378100, 0.39883280, 0.15179272, -0.45821238, -0.26472330, - -0.11036454, 0.47337988, -0.19236894, 0.44863826, 0.19078662, 0.46045646, 0.55434424, -1.23575699, 0.89674824, - 0.14763579, -0.29703000, 0.11096095, -0.23884353, 0.32712832, -0.55054861, 0.67220551, -0.28248659, -0.10569336, - 0.04621894, -0.49375376, -0.12733379, 0.67400223, -0.12935409, 0.09695239, -0.28661168, -0.36145869, 0.06896356, - 0.46334738, -0.83616781, -0.68781477, -0.22872619, -0.02656318, -0.46397430, -0.16735579, 0.57318032, -0.05219025, - -0.06242780, 0.30701312, -0.43937260, -0.05616235, -0.35246953, 0.47527167, -0.36845928, 0.13797158, 0.46169606, - 0.03073783, -0.16647297, 0.35587814, -0.52273571, 0.22240485, 0.32394350, 0.29325587, 0.38622752, -0.12588513, - 0.21903162, -0.03870760, -0.07586532, 0.09732155, -0.44541699, 0.01353051, 0.07500879, -0.22210084, -0.02879842, - -0.02839135, 0.02233995, 0.01847041, -0.22886260, 0.09602077, -0.10249722, 0.02895709, -0.11213382, -0.32242554, - 0.21315952, 0.13921122, -0.05876900, -0.14110731, 0.17718993, 0.06612965, -0.03701587, 0.34920025, -0.22553837, - -0.25041988, 0.16762421, -0.04839466, -0.57936865, 0.20034809, 0.28770819, 0.07073146, 0.06286270, -0.14398633, - 0.08881986, -0.26472491, 0.27725342, 0.22914961, 0.32062715, 0.15277733, -0.33009961, 0.21074554, -0.15565939, - 0.47236079, 0.03225322, 0.06781324, -0.16307135, 0.73327172, -0.11553932, -0.13312288, -0.30246657, -0.04846320, - -0.39416528, 0.15607847, 0.08472254, -0.12179766, 0.23342557, -0.02313556, -0.16107082, 0.19552790, -0.05060831, - 0.08372914, 0.37613615, -0.26624736, 0.05994382, 0.57154304, -0.03778595, 0.15102805, 0.26144159, -0.64846903, - -0.11667332, 0.64444566, 0.53041399, -0.37275234, 0.12701584, 0.25457710, -0.91777927, 0.63840097, -0.04469256, - -0.01554284, 0.52316505, -0.07778227, -0.11871518, 0.13643374, -0.16263111, 0.12193766, -0.43915382, 0.17769964, - 0.06158905, -0.40595376, 0.36887977, 0.21324196, -0.16621692, 0.07623006, -0.07362154, 0.53180701, 0.40119246, - -0.41867191, -0.17060547, 0.11066595, 0.33041847, -0.30610490, -0.01155049, 0.06596804, 0.06266157, 0.11539320, - 0.53958863, -0.19265023, 0.19687888, -0.32241911, 0.17509246, 0.06316098, 0.22965759, -0.10924519, 0.13696006, - 0.34725070, 0.05508206, -0.31879237, -0.07152238, 0.30400902, 0.47540823, 0.05332027, -1.34034514, -0.63157010, - -0.20077212, 0.82977784, -0.83980680, 0.05455742, 0.23470649, 0.15096639, -0.02279334, 0.74177665, -0.51908326, - 0.57153726, -0.20008761, -0.44515362, -0.52133244, -0.53501129, 0.30665237, 0.03230446, -0.27042213, 0.69568527, - -0.53271943, 0.12585282, 0.84569460, 1.16614997, 0.30099568, 1.01664233, -0.04021535, 0.35936305, 0.12363404, - -0.44788554, 0.65720278, 0.14622304, -0.57894391, -0.17871566, -0.13646793, 0.06899100, -0.13851331, 0.07404158, - -0.32255191, 0.22225420, 0.05467210, -0.22595364, -0.09422892, 0.08064129, -0.14696676, 0.24685700, -0.36180913, - -0.50487852, 0.09818821, 0.23832101, -1.06369340, -0.94318706, 0.00698828, 0.28264612, -0.01870376, -0.69367069, - 0.32556781, 0.29627222, 0.17554468, 0.22879148, -0.32052159, 0.18480402, -0.76028723, 0.17409454, -0.52946806, - -1.31131041, 0.72142994, -0.21024033, 0.65006751, 0.28911707, -0.45603541, 0.30260912, 0.22917707, 0.76010191, - 0.50517660, -0.43544480, 0.01703142, 0.15579990, -0.06952365, 0.26123571, -0.32477272, -0.07388589, 0.23853466, - 0.02649050, -0.04410565, 0.35238847, 0.10454764, -0.21788062, -0.05252795, 0.12990016, -0.20476976, 0.02988371, - -0.20392458, 0.07077907, 0.07255822, 0.03174250, 0.19428524, -0.27959460, 0.17289197, -0.06749524, 0.07314484, - 0.04101936, 0.00711376, 0.39040637, -0.09693181, -0.13249642, 0.06778622, -0.20384689, -0.08403887, -0.06206702, - 0.39903295, 0.01676942, 0.16174519, -0.24540325, -0.15171684, 0.36854738, -0.04578711, -0.20637585, -0.58331889, - 0.23066565, -0.40027916, -0.33852276, 0.22725138, -0.22780336, -0.45288083, 0.05498514, -0.15462326, -0.01167145, - 0.14075157, -0.23809917, -0.04884083, -0.15133418, 0.16887660, 0.08024041, -0.26719818, -0.08086196, 0.27881959, - 0.03904902, -0.05400108, -0.14138514, 0.16911660, -0.10002459, 0.31475541, 0.20939967, 0.07277112, 0.10095973, - 0.33317840, -0.23609909, 0.10387685, 0.08162952, 0.30970895, -0.19202805, 0.11137805, -0.08374452, -0.64609599, - 0.49284625, -0.02431013, 0.22352953, 0.35399213, -0.04173037, 0.01117679, -0.26933041, -0.07039601, 0.30380678, - -0.05741419, 0.47689995, 0.20879868, -0.06093958, -0.08551129, -0.07670606, -0.23868953, -0.26600242, -0.24509941, - 0.40901592, 0.42221358, -0.76004744, 0.13680586, -0.25070697, 0.08168428, -0.19393569, -0.23131981, -0.35523322, - 0.31124046, -0.02291389, 0.52390915, -0.46724460, 0.13923384, -0.12886441, -0.03299529, -0.27032244, -1.19288146, - 0.24336755, -0.20915434, -0.14846808, 0.10754984, 0.02535326, 0.28236297, 0.90321386, 0.28560060, 0.31486535, - -0.78192097, -0.21997991, -0.19503053, 0.71680617, -0.23815078, -0.38749680, 0.09747923, -0.11504970, 0.19734858, - 0.98412722, -0.13073727, 0.75299066, -0.85745215, -0.40456349, -0.51684064, -0.47700635, 0.39638016, 0.17537507, - 0.52784997, 0.63105047, -0.69734496, -0.28434739, 0.58557647, 0.96909130, 0.17804323, 0.09428761, 0.17061329, - 0.33784506, -0.14671242, -0.48270255, 0.31931961, 0.04116327, -0.46874690, -0.45884821, -0.19885214, -0.39863971, - -0.41624883, 0.43567199, -0.28685057, 0.40880397, 0.18431477, -0.15750097, -0.56084317, -0.13018279, 0.18903515, - 0.30848095, -0.34719062, -0.19633505, -0.02658261, 0.24495831, -0.78052413, -0.85096359, -0.37101209, 0.22163752, - -0.14013411, -0.24140479, 0.23052573, 0.54393709, 0.13316275, 0.12203635, 0.20220585, 0.49100202, -0.62808341, - 0.16586047, -0.38358831, -1.00215280, 0.77456385, -0.27937427, 0.11909273, 0.50655580, -0.87544155, 0.59288806, - 0.01167453, 0.57931119, -0.02249480, -0.12532967, -0.25048557, -0.28306130, 0.06188992, 0.48368040, -0.36783400, - -0.21773575, 0.14827894, 0.13848552, 0.04230130, -0.04214389, -0.07091486, -0.04140090, -0.30136281, 0.00464335, - -0.21866782, -0.02765239, -0.17025313, 0.08577426, 0.06893988, 0.11575132, 0.07546596, 0.02867554, 0.19112501, - 0.27582642, 0.12627265, 0.10898180, -0.18745209, 0.23613420, 0.23121634, 0.28491151, 0.02902788, 0.15380767, - 0.03966511, -0.01862929, -0.00648489, 0.01908036, -0.19008325, -0.18426324, -0.07000075, -0.29073888, -0.22639032, - -0.11762336, 0.33500755, -0.21507888, -0.07346634, -0.03355709, -0.04096937, -0.33768243, -0.19027354, -0.18297306, - -0.50098300, -0.02807480, 0.23949267, -0.15996224, -0.07754000, -0.17378184, 0.00657926, 0.39929193, 0.45185298, - -0.34957576, -0.24467568, 0.21933684, -0.10674803, -0.35011348, 0.35258722, -0.14792293, 0.02977267, 0.63623291, - 0.01652745, 0.28561106, -0.24670583, 0.39176771, 0.05463742, 0.32333028, 0.14167164, -0.06670932, 0.23938650, - 0.31829852, -0.41095898, 0.35032102, 0.03883050, 0.14073621, 0.64508480, 0.25743634, -0.24900754, 0.26631746, - -0.12656187, 0.01745303, -0.18157384, 0.34143060, 0.32021353, 0.30565801, -0.26965511, 0.23778385, -0.02008655, - -0.08103817, -0.07159230, 0.32048982, 0.06949183, -2.33522058, 0.02816298, -0.10037031, 0.37423018, -0.22492132, - -0.36854437, 0.40015242, 0.28485346, 0.22778602, 0.19501299, -0.93215930, 0.07858350, -0.40451255, -0.27547240, - -0.02443204, -1.41666114, 0.05133143, -0.06660908, 0.50325763, 0.31695950, -0.18681468, -0.12560664, 2.13244534, - 0.22775133, 0.42665431, -1.29449880, -0.23370074, 0.01759187, 0.25374168, 0.06429626, -0.52347112, 0.34470561, - -0.26376522, -0.04219850, -0.01756793, -0.43413332, -0.22707182, 0.05281873, -0.45199049, 0.04030637, -0.54730064, - -0.13315515, 0.10807105, -0.34840381, -0.12949815, -0.38297817, -0.13845149, 0.97675931, 0.20487542, 0.41703507, - 0.23882188, 0.23847181, 0.40595204, 0.22122343, -0.59291810, 0.16200593, -0.23582739, -0.33778340, -0.05766481, - -0.25944924, -0.28257781, -0.02519164, 0.15628809, 0.22581941, 0.29877603, 0.11747632, -0.13611910, -0.68844485, - 0.10147709, -0.19454663, 0.21278845, 0.02120594, 0.12139316, -0.17088807, 0.38014871, -0.78083509, -0.60448849, - 0.05090213, 0.61401623, -0.32977888, -0.38970327, 0.26832360, 0.53781092, 0.20194471, 0.82220250, 0.23819874, - 0.49616402, -0.43314114, -0.50223577, -0.46702045, -1.17008650, 0.48856854, -0.03626145, 0.75825346, 0.49573380, - -0.68196982, 0.29390180, 0.22509925, 0.79214412, 0.17140889, -0.22514503, 0.10945672, -0.20663217, -0.00440216, - 0.21418120, -0.34781390, -0.11805713, 0.12930803, -0.02661256, -0.16583513, 0.50446808, 0.12406299, -0.18522657, - -0.42358905, 0.14963409, -1.34551275, 0.13522045, 0.17906164, 0.25551242, 0.31629464, -0.21916427, -0.00383488, - -0.16207457, 0.18151720, -0.08251988, 0.89760458, 0.44453332, -0.27497387, 0.29844183, 0.01738336, 0.12566963, - 0.00516657, -0.15164798, -0.07898259, -0.25138238, 0.47278392, 0.46358061, 0.20548722, 0.38698843, -0.07769089, - 0.21403231, -0.12140352, 0.01454621, 0.27465621, -0.04136071, -0.18499696, -0.33877471, -0.52207792, -0.06982010, - -0.67964226, -0.37841988, -0.05654239, -0.44023779, -0.34978950, -0.11707290, 0.43336329, 0.23595251, 0.51182544, - 0.45589104, 0.46062201, -0.28254399, 0.04058569, 0.35703275, 0.09476561, -0.19271792, -0.85225898, 0.18226382, - 0.07547066, -0.23841362, 0.07214766, 0.05686964, -0.64615160, 0.89725614, -0.09489815, -0.24773495, 0.18898845, - -0.05227394, -0.04989563, -0.04141004, -0.68845397, 0.44256380, 0.15174553, 0.16641839, 0.20559123, 0.18821712, - -0.18444933, 0.75212121, 0.04695220, -0.14553900, -0.25279966, -0.78429103, 0.21485479, 0.24854848, -0.34898055, - 0.12131061, -0.01442323, 0.31166860, -0.03168157, 0.23537874, -0.04150987, -0.73491955, 0.30445504, 0.01360191, - 0.11793279, -0.01071012, -0.86158031, -0.44057927, -0.11391853, -0.08041152, 0.30659840, -0.07929188, 0.14337794, - -0.16240485, -0.37871391, -0.12544847, -0.75813878, 0.07463507, 0.30250356, -0.08979524, -0.05500457, -0.00572075, - -0.15594503, 0.03389021, 0.33084431, 0.39045012, -0.42743438, -0.61926889, -1.01879334, 0.43193951, 0.11156862, - -0.76947951, -0.20159762, 0.24022132, 0.20872289, 0.69780248, -0.16525456, 0.63648707, -1.59807694, -0.14674914, - -0.52725124, -0.42184243, 0.85394889, 0.03816247, -0.73201150, 0.72350580, -0.94382733, 0.30476892, 0.62137985, - 0.76275116, 0.58395672, 0.12438627, 0.09742960, 0.15616673, -0.26625797, 0.15280285, 0.40855104, -0.06499965, - 0.07652657, -0.03907230, -0.03445091, -0.13297464, 0.12203576, 0.49042386, -0.46612582, 0.23596950, -0.60011405, - 0.01329148, -0.40629655, 0.34626818, 0.00672128, 0.21219759, 0.12195532, -0.24550790, 0.25495195, 0.50089574, - -0.69004655, -0.82626939, -0.04906785, 0.22566023, -0.19735636, -0.32598498, -0.23328499, 0.59350103, 0.50138974, - 0.03376095, -0.21038638, 0.23230115, -0.67481101, -0.46950540, -0.53264731, -1.31645954, 0.43338448, -0.07359013, - 0.19401260, 0.85574108, -0.58386785, 0.27350774, 0.94151503, 0.99626285, 0.16530964, -0.52822798, 0.02781926, - 0.19514728, 0.02097620, 0.00889074, -0.16201399, -0.07028764, 0.22292475, -0.00996018, 0.11951973, -0.02360463, - 0.18132643, 0.03626538, -0.40536785, -0.24706507, -1.10316157, 0.23488073, -0.11203269, -0.26491979, 0.32530117, - -0.07893114, -0.00744999, 0.26029640, 0.33739540, 0.02217237, 0.02589254, -0.42112139, 0.24534294, 0.70596570, - -0.23823494, -0.01574550, -0.57523948, -0.01305772, -0.10088185, 0.27640396, -0.16561478, 0.15046248, -0.04703883, - 0.12256249, -0.13618535, -0.25345358, 0.13640152, 0.11063136, 0.76222241, 0.26646805, -0.26234278, 0.19928859, - 0.05528985, -0.14719652, 0.09461970, -0.29426023, -0.11857925, -0.33014619, -0.16937710, 0.49556774, 0.09860725, - -0.08043962, 0.60073936, -0.16133121, 0.60515904, 0.05304303, 0.21871525, 0.45007041, -0.18452203, -0.23329300, - 0.15948120, 0.03171407, 0.05523947, -0.19391575, -0.06312876, 0.05657719, -0.01570622, 0.34798819, 0.35875756, - 0.64115590, -0.12868474, -0.21662687, -0.07916048, -0.02071994, -0.39688477, 0.34791452, -0.01536988, -0.01980658, - 0.20821385, 0.32254547, 0.03658571, 0.53079057, 0.11581320, -0.52330321, 0.08113370, -0.35415897, -0.01983317, - 0.34641969, -0.06101644, -0.00271639, -0.19201282, -0.43245769, -0.21427184, 0.11255077, -0.15757668, -1.97429311, - 0.25491333, 0.18619338, -0.13669698, -0.33716843, -1.20977962, -0.06677102, 0.12260284, 0.31985071, 0.98761481, - -0.66411626, -0.41700807, -0.00110240, -0.32249039, 0.21490636, -0.67965972, -0.16568908, -0.11263562, -1.06136537, - -0.06080189, 0.00003523, -0.27638850, 0.54172385, 0.15916675, 0.66536385, -0.61083424, -1.17721260, -0.79620224, - 1.62779248, -1.29850137, -0.40923908, -0.21678016, 1.11565304, 1.38857508, 1.67485464, -0.48776993, 1.54490137, - -0.99453592, -0.23702216, -1.28989625, -0.32184783, 1.73645914, 0.50596559, -0.42633674, 2.06059289, -1.31561661, - 0.09407058, 0.71311694, 1.60583699, 0.67549241, -0.75638843, -0.11993816, 0.25794804, -0.30944440, -0.43204123, - 0.36899459, 0.19363843, -0.08060863, -0.05935695, 0.27492559, -0.16506658, -0.00417477, 0.57574582, -0.39738783, - 0.30795437, -1.27800059, -0.36806244, 0.00201544, 0.41062146, -0.01292078, 0.33908349, 0.05562977, 0.15150607, - 0.33948043, -0.19380097, -0.34239587, -0.26843691, 0.14322159, 0.16285747, -0.12242185, -0.39411676, -0.39972457, - 0.32914063, -0.14964050, 0.18657172, -0.32965264, 0.50208765, -0.61841202, -0.96437931, -0.19447599, -1.48685813, - 0.36768064, -0.19042422, -0.14381048, 0.16720532, -0.38585469, 0.28041863, 1.07230306, 0.34857085, 0.56100559, - -0.60621732, -0.27094939, 0.03308203, 0.28440759, -0.05372868, -0.37450859, -0.23122661, 0.14196907, -0.08391851, - 0.58788222, 0.06581475, 0.12165748, -0.56094503, -0.62536222, -0.32290021, -1.14628315, 0.28745806, 0.09321925, - -0.11868286, 0.73546922, -0.14506210, 0.10030940, 0.65942341, 0.56377023, 0.38628533, -0.42766783, -0.12002008, - -0.27770182, 0.38072130, -0.41092056, 0.07260298, 0.32786149, -0.18012661, -0.02678201, 0.29315698, -0.62710303, - 0.16001518, -0.31741443, -0.36174574, -0.17293620, -0.11350867, 0.18780905, 0.17321175, 0.81462449, 0.27337193, - -0.34306210, -0.12359867, 0.26058146, 0.48336327, 0.48286983, 0.00497185, -0.08108788, -0.37280399, -0.07095718, - 0.07272183, 0.25405398, -0.01350151, 0.19333066, 0.50434202, 0.30863705, 0.23423783, 0.27947450, -0.35671273, - 0.39509684, -0.28312561, 0.13625887, 0.05653338, 0.26617846, 0.24114241, 0.22899513, -0.34379941, 0.14200218, - 0.16892987, 0.41087806, 0.25089607, -0.16019906, 0.13426897, -0.13074127, -0.23068653, -0.45294666, 0.30708107, - -0.05777374, -0.03524012, -0.18545437, 0.26572716, 0.34135580, -0.10212494, 0.15759155, -0.29985228, 0.00604882, - -1.35232568, 0.02671386, -0.18605591, 0.28203139, 0.06673647, 0.21136442, 0.02198954, -0.02589645, -0.13472135, - -0.33945116, -1.36670744, 0.26497167, -0.01333835, 0.35838512, -0.00214932, -0.67533672, -0.01949281, -0.15939406, - -0.17611854, 0.62018734, -1.11697268, 0.25882152, -0.40646151, -0.21743414, -0.35022104, -0.48264894, 0.15348732, - 0.32525846, -0.62968028, -0.14668293, 0.04142878, -0.18443897, 1.67367685, 0.29640922, 0.54300213, -0.38739282, - -1.12135983, -0.95634991, 1.56781328, -0.78718096, -0.65814853, -0.09405752, 1.45496094, 1.55392945, 1.32255197, - -0.49480981, 1.84735644, -1.09742570, 0.03602623, -1.19865084, 0.01194180, 1.76398528, 0.22691993, -0.24130857, - 2.00458288, -1.63459969, 0.28926355, 0.26902235, 1.57351863, 0.59064698, -2.67679620, 0.40217704, 0.49060968, - 0.01024920, -0.21290652, 0.01566074, -0.11393169, -0.32448450, -0.27194211, 0.21742176, -0.57667369, -0.03412761, - 0.36706647, -0.42090943, 0.39278191, -0.02046515, -0.30790815, -0.07676671, 0.48708537, -0.19606759, 0.39258122, - 0.11010294, 1.56427002, -0.23800702, 0.70309281, -1.84958696, -0.04740064, 0.06504993, 0.21830852, -0.09291255, - -1.47656202, -0.76586556, -0.02407140, -0.12262835, 0.55286926, -0.37243509, -0.11549302, -0.16901262, -0.81201553, - -0.16746910, -1.11338747, -0.03933520, 0.25118551, -0.27406788, 0.25855088, -0.24614365, -0.05488263, 0.42877647, - 0.41920695, 0.49124199}; - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w11.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w11.h new file mode 100644 index 0000000000000..ba69fb192e297 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w11.h @@ -0,0 +1,34 @@ +//Numpy array shape [15, 15] +//Min -0.984375000000 +//Max 1.203125000000 +//Number of zeros 135 + +#ifndef W11_H_ +#define W11_H_ + +weight11_t w11[225] = { + 0.734375, 0.000000, 0.000000, 1.015625, -0.781250, 0.000000, 1.203125, 0.687500, 0.000000, 0.000000, + 0.593750, 0.281250, 0.843750, 0.000000, -0.343750, 0.000000, 0.000000, 0.000000, -0.937500, 0.531250, + 0.000000, 0.000000, 0.000000, -0.453125, 0.000000, 0.484375, 0.000000, 0.546875, -0.671875, -0.296875, + 0.000000, 0.000000, 0.375000, -0.625000, 0.203125, 0.000000, -0.734375, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.515625, 0.000000, 0.000000, 0.500000, -0.453125, 0.000000, 0.000000, 0.500000, + -0.359375, 0.000000, 0.000000, 0.000000, 0.468750, 0.000000, 0.000000, 0.000000, 0.328125, -0.406250, + 0.000000, 0.359375, 0.359375, -0.375000, 0.000000, 0.000000, -0.296875, 0.406250, 0.000000, 0.000000, + 0.406250, 0.328125, -0.515625, 0.421875, 0.000000, 0.000000, 0.000000, -0.281250, 0.000000, 0.000000, + 0.000000, 0.312500, 0.000000, 0.000000, 0.000000, -0.453125, 0.000000, 0.000000, 0.000000, -0.375000, + 0.000000, -0.453125, -0.984375, 0.000000, -0.406250, 0.000000, 0.421875, -0.343750, 0.000000, 0.000000, + 0.000000, -0.437500, 0.000000, 0.343750, 0.000000, 0.375000, -0.453125, 0.000000, -0.343750, 0.000000, + -0.421875, 0.000000, 0.406250, 0.000000, 0.328125, 0.343750, 0.375000, 0.000000, -0.343750, 0.000000, + 0.328125, 0.000000, -0.359375, 0.000000, 0.000000, -0.453125, 0.000000, 0.000000, 0.000000, 0.000000, + 0.328125, 0.000000, 0.468750, 0.000000, 0.000000, 0.000000, 0.000000, 0.375000, 0.000000, 0.000000, + 0.000000, 0.531250, -0.281250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + -0.671875, 0.000000, 0.000000, 0.000000, 0.437500, 0.000000, 0.000000, 0.000000, -0.765625, 0.000000, + 0.421875, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.421875, 0.000000, + 0.000000, 0.000000, 0.000000, 0.343750, 0.000000, -0.437500, -0.375000, 0.000000, 0.000000, 0.375000, + 0.296875, 0.000000, 0.000000, 0.000000, 0.000000, 0.375000, 0.000000, 0.000000, 0.390625, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + -0.328125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.562500, 0.000000, + -0.421875, 0.000000, 0.000000, 0.312500, -0.140625, 0.359375, -0.390625, -0.359375, 0.406250, 0.625000, + -0.484375, 0.000000, 0.000000, 0.687500, -0.406250}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w14.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w14.h new file mode 100644 index 0000000000000..f4103cee867e2 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w14.h @@ -0,0 +1,26 @@ +//Numpy array shape [15, 10] +//Min -0.921875000000 +//Max 1.031250000000 +//Number of zeros 90 + +#ifndef W14_H_ +#define W14_H_ + +weight14_t w14[150] = { + -0.296875, -0.843750, 0.000000, 0.000000, -0.406250, 0.000000, -0.281250, 1.031250, 0.000000, 0.000000, + 0.453125, 0.000000, 0.359375, 0.375000, 0.406250, -0.421875, 0.000000, 0.000000, 0.375000, 0.000000, + 0.000000, 0.828125, 0.000000, 0.000000, 0.000000, 0.000000, -0.312500, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.406250, 0.796875, 0.421875, 0.640625, 0.546875, 0.000000, 0.000000, 0.000000, + -0.328125, 0.000000, 0.000000, 0.000000, -0.328125, -0.890625, 0.000000, 0.859375, 0.750000, 0.000000, + 0.453125, 0.000000, 0.000000, 0.000000, 0.000000, -0.328125, 0.000000, 0.000000, -0.328125, -0.359375, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.750000, 0.640625, 0.000000, 0.000000, + 0.000000, -0.484375, 0.000000, 0.000000, -0.421875, 0.000000, -0.421875, 0.781250, 0.000000, 0.000000, + 0.437500, 0.000000, 0.328125, 0.000000, 0.359375, 0.000000, 0.000000, 0.000000, -0.546875, 0.000000, + 0.484375, 0.640625, 0.531250, 0.000000, 0.000000, 0.000000, 0.625000, -0.296875, 0.000000, -0.437500, + 0.000000, 0.000000, 0.000000, 0.000000, 0.421875, 0.000000, 0.000000, 0.000000, 0.000000, 0.375000, + 0.000000, 0.000000, 0.000000, -0.296875, -0.390625, 0.375000, 0.000000, 0.000000, -0.328125, 0.000000, + 0.000000, 0.000000, -0.671875, 0.000000, -0.921875, 0.000000, -0.875000, 0.000000, 0.000000, 0.000000, + 0.468750, 0.718750, 0.484375, 0.812500, 0.000000, 0.375000, 0.000000, 0.000000, -0.390625, 0.000000, + -0.390625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.390625, 0.000000}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w17.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w17.h new file mode 100644 index 0000000000000..0ce1c2b014117 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w17.h @@ -0,0 +1,12 @@ +//Numpy array shape [10, 1] +//Min -2.798828125000 +//Max 1.773437500000 +//Number of zeros 6 + +#ifndef W17_H_ +#define W17_H_ + +weight17_t w17[10] = { + 0.000000, 1.773438, 1.755859, 0.000000, 0.000000, 0.000000, 1.603516, 0.000000, -2.798828, 0.000000}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h index 592ab44151bbc..cd94ddd044393 100644 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w2.h @@ -1,39 +1,211 @@ -//Numpy array shape [25, 10] -//Min -1.512127518654 -//Max 2.787853240967 -//Number of zeros 0 +//Numpy array shape [80, 25] +//Min -1.515625000000 +//Max 1.312500000000 +//Number of zeros 1205 #ifndef W2_H_ #define W2_H_ -weight_default_t w2[250] = { - 0.20997065, 0.23109458, 0.56466961, 0.22711204, -0.20132071, -0.27363914, 0.14927717, -0.16103272, -0.83456266, - -0.16359854, 0.42116061, 0.25756207, 0.04047282, 0.21591994, -0.26583776, -0.55054820, 0.41611665, -0.02321975, - 0.07042803, 0.50135452, 0.00703545, -0.20829202, -0.33702660, -0.12396229, -0.11880612, -0.27329573, -0.11452802, - -0.31897750, 0.21264470, 0.13742544, -0.28871939, 0.41868410, -0.63091415, -0.19237195, -0.65478534, 0.38763866, - -0.24744406, -0.16881032, 0.39083633, -0.50035834, -0.19310105, -0.31465644, 0.00439816, 0.10827218, -0.49906382, - -0.32572702, -0.91848624, 0.37550700, -0.71738565, -0.34755468, 0.06423171, 0.32547599, 0.02474762, 0.03221778, - 0.48550412, -0.33728692, -0.32770881, 0.17164232, 0.55661368, 0.11896797, 0.36957362, 0.47705862, -0.49895954, - 0.33941826, 0.19965869, 0.01562935, 0.11520918, -0.64897013, 0.09584811, -0.06691046, -0.22340138, -0.28523839, - 0.47164100, 0.39281282, -0.27396747, 0.23841321, -0.16906965, 0.23569225, -0.15681265, 0.18717216, -0.60413569, - -0.08125137, 0.03988006, -0.21231870, -0.22519483, 0.12118224, 0.16755132, 0.12627158, 0.01710406, 0.12804474, - 0.15039428, -0.44942543, -0.31897655, 0.23188710, 0.18285972, 0.19390795, -1.01665187, 0.21815108, -0.29137248, - -0.33327803, -0.59519506, 0.28375888, -0.21275434, 0.20035347, 0.24234673, -0.23726320, 0.13105272, -0.11671171, - -1.04230368, -0.01892293, 0.24302486, -0.11491518, 0.00009525, 0.16215059, -0.33812979, 0.25157502, 0.08174099, - 0.02176141, 0.21500087, 0.09077536, -0.76118916, 0.10925286, 0.29795000, 0.12469041, 0.37909570, -0.20281483, - 0.27489746, 0.37251407, 0.22438200, 0.38048640, 0.05875695, -0.26088551, -0.21821247, -0.16538695, 0.41207287, - -0.16648161, -0.84085250, -0.41789296, -0.34957457, -0.61002076, 0.31845343, 0.14742102, 0.19950806, 0.16061406, - 0.06558945, -0.37494221, -0.08883159, -0.04767518, -0.01558618, -0.38022742, -1.51212752, 0.86078125, 0.19461697, - 0.17105880, -0.30809617, -0.31512862, 2.78785324, -0.00088534, 1.45783448, 1.60251164, 0.00830983, -0.11042736, - -0.09234238, -0.63981187, -0.12528154, 0.26517308, -0.64378422, 0.26114368, -0.03288542, -0.30414325, 0.06316128, - 0.20465648, 0.13085699, -0.47638854, -0.23346442, 0.28762946, 0.11337498, -0.16003485, -0.03085457, -0.34413737, - -0.20898604, 0.25293669, 0.12700504, -0.57297736, 0.37069905, -0.10958206, -0.02782927, -0.04480676, 0.37059775, - 0.22780053, -0.46436781, 0.21395527, -0.12828122, 0.25643846, 0.42216083, 0.38164839, -0.21980932, 0.36473754, - 0.07016987, -0.35408738, -0.16640140, -0.25358951, 0.39250490, -0.54550570, -0.19580491, -0.40004924, 0.17290805, - 0.03295039, 0.15710174, 0.38565248, 0.17310381, -0.26752374, -0.01243732, 0.19979088, -0.15178865, 0.05851814, - -0.30287826, -0.22805928, 0.13903613, -0.17035685, 0.42811340, -0.32098049, 0.01897480, 0.19527332, 0.15685958, - 0.24155772, -1.29652667, 0.23406981, -0.14959824, 0.22470856, 0.06737669, -0.17472392, -0.07033237, 0.12923102, - -0.45487776, 0.28186423, -0.08404353, 0.05938773, -0.14591871, -0.37163615, -0.11934289, 0.09545202, 0.20201178, - 0.15774842, 0.09092412, 0.54094648, 0.01843318, -0.20180281, -1.01475310, -0.02641589}; +weight2_t w2[2000] = { + 0.000000, 0.000000, 0.000000, 0.109375, 0.046875, 0.078125, 0.000000, 0.281250, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, -0.046875, -0.125000, 0.000000, 0.703125, 0.031250, 0.000000, + 0.000000, -0.203125, 0.000000, -1.296875, -0.656250, 0.000000, 0.000000, 0.390625, 0.000000, 0.000000, + 0.203125, 0.125000, 0.000000, 0.000000, 0.000000, 0.234375, -0.343750, 0.000000, 0.203125, 0.000000, + 0.359375, -1.515625, 1.312500, 0.546875, 0.000000, -0.046875, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.156250, -0.125000, -0.250000, 0.000000, 0.187500, 0.000000, -0.906250, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.718750, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.578125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.093750, 0.000000, 0.390625, + 0.406250, 0.625000, 0.000000, 0.000000, -0.140625, 0.000000, -0.125000, 0.000000, 0.000000, 0.000000, + -0.546875, -0.109375, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.218750, + 0.000000, 0.000000, 0.000000, 0.390625, -0.265625, -0.234375, 0.000000, -0.265625, 0.000000, 0.000000, + 0.562500, 0.000000, 0.140625, 0.000000, 0.000000, 0.296875, 0.000000, -0.812500, 0.000000, -0.375000, + 0.000000, 0.000000, 0.062500, 0.234375, 0.000000, 0.000000, 0.062500, 0.000000, 0.000000, 0.062500, + -0.140625, -0.078125, 0.187500, -0.906250, 0.000000, 0.000000, 0.000000, 0.000000, -0.281250, 0.000000, + 0.718750, 0.296875, -0.937500, -0.937500, 0.000000, 0.000000, 0.000000, -0.062500, 0.843750, 0.031250, + 0.000000, 0.468750, 0.000000, 0.000000, -0.484375, 0.000000, -0.656250, 0.875000, 0.000000, -0.109375, + -0.015625, 0.000000, 0.000000, 0.140625, -0.343750, -0.421875, 0.343750, 0.078125, 0.000000, 0.000000, + 0.171875, 0.000000, 0.000000, -0.531250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + -0.375000, 0.000000, 0.000000, 0.000000, 0.218750, 0.546875, 0.015625, -0.109375, 0.000000, 0.000000, + -0.125000, 0.000000, 0.000000, 0.000000, -0.078125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.046875, 0.578125, 0.000000, 0.000000, 0.000000, -0.093750, 0.000000, 0.000000, 0.000000, 0.000000, + 0.093750, 0.000000, -0.078125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.312500, 0.000000, 0.000000, 0.000000, 0.062500, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.031250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.171875, 0.000000, -0.031250, 0.000000, 0.453125, 0.000000, 0.000000, 0.000000, 0.703125, + 0.125000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.265625, 0.000000, + 0.000000, -0.484375, 0.000000, -0.031250, 0.000000, 0.000000, -0.156250, 0.000000, 0.187500, 0.484375, + 0.343750, 0.000000, 0.000000, 0.000000, 0.000000, 0.015625, 0.000000, 0.000000, 0.156250, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.140625, 0.000000, 0.000000, -0.062500, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.390625, 0.000000, -0.125000, -0.156250, + 0.000000, 0.000000, 0.000000, -0.062500, 0.000000, 0.218750, -0.671875, 0.000000, 0.281250, 0.000000, + 0.000000, 0.000000, 0.125000, -0.125000, 0.000000, 0.000000, 0.000000, 0.000000, 0.203125, 0.593750, + 0.000000, 0.000000, 0.000000, 0.000000, 0.281250, 0.000000, -0.140625, -0.171875, -0.265625, 0.000000, + 0.437500, -0.343750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.140625, 0.000000, 0.000000, + 0.000000, -0.281250, -0.125000, 0.000000, 1.234375, -0.171875, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.234375, 0.078125, 0.000000, -0.546875, 0.421875, 0.000000, -0.312500, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.250000, -0.375000, 0.000000, + 0.000000, 0.515625, 0.000000, 0.000000, 0.000000, -0.171875, 0.000000, -0.515625, -0.156250, 0.000000, + 0.171875, -0.453125, 0.000000, 0.000000, -0.500000, 0.000000, 0.171875, -0.187500, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.296875, 0.187500, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.156250, 0.062500, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.156250, 0.187500, 0.000000, 0.000000, 0.000000, + -0.421875, 0.000000, -0.281250, 0.000000, 0.000000, 0.000000, -0.187500, 0.000000, 0.000000, 0.187500, + 0.000000, 0.000000, 0.359375, 0.000000, 0.000000, 0.187500, -0.093750, 0.000000, 0.000000, 0.046875, + -0.250000, 0.000000, 0.000000, 0.156250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.031250, 0.000000, 0.000000, + -0.250000, 0.000000, 0.000000, -0.125000, 0.000000, 0.000000, 0.000000, 0.000000, -0.078125, 0.000000, + -0.078125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.015625, 0.000000, 0.000000, + -0.406250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.109375, 0.000000, 0.000000, + -0.218750, -0.359375, 0.000000, 0.421875, 0.000000, 0.062500, 0.000000, -0.421875, -0.046875, 0.000000, + 0.093750, 0.000000, 0.000000, 0.000000, -0.515625, 0.000000, 0.000000, 0.015625, 0.000000, 0.000000, + -0.218750, 0.281250, 0.000000, 0.281250, -0.156250, 0.250000, 0.000000, 0.000000, 0.109375, 0.015625, + 0.000000, 0.000000, 0.187500, 0.000000, 0.406250, -0.062500, -0.281250, -0.078125, 0.000000, 0.000000, + 0.000000, -0.250000, -0.453125, -0.046875, 0.421875, 0.000000, -0.109375, 0.109375, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.281250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.218750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.656250, 0.000000, 0.000000, 0.000000, 0.046875, 0.000000, 0.484375, -0.546875, -0.031250, -0.421875, + 0.000000, -0.781250, 0.000000, 0.000000, -0.546875, 0.265625, 0.171875, -0.203125, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, -0.062500, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.171875, 0.125000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.328125, 0.000000, + 0.140625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.062500, 0.171875, 0.000000, 0.015625, + 0.000000, 0.000000, 0.000000, 0.000000, -0.234375, 0.000000, 0.000000, 0.000000, 0.000000, -0.078125, + 0.000000, 0.000000, 0.000000, 0.093750, 0.203125, -0.140625, 0.000000, -0.328125, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, -0.359375, 0.000000, 0.187500, -0.171875, -0.187500, 0.000000, 0.031250, + 0.000000, 0.000000, 0.125000, 0.015625, 0.000000, 0.000000, 0.000000, 0.000000, -0.109375, 0.000000, + -0.296875, 0.000000, -0.187500, 0.250000, 0.000000, 0.000000, 0.390625, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.078125, 0.000000, 0.000000, -0.015625, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.093750, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.250000, 0.000000, -0.109375, -0.296875, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.234375, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.187500, 0.000000, + 0.125000, 0.000000, 0.109375, -0.750000, 0.125000, 0.000000, -0.187500, 0.156250, 0.000000, 0.109375, + 0.000000, 0.109375, 0.000000, -0.265625, -0.031250, 0.000000, 0.125000, 0.000000, 0.203125, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.187500, 0.000000, -0.203125, + 0.000000, 0.000000, 0.187500, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.062500, 0.031250, + 0.015625, 0.000000, 0.078125, -0.328125, -0.031250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.015625, 0.000000, -0.468750, -0.031250, 0.000000, + 0.000000, -0.046875, 0.703125, 0.000000, -0.093750, 0.265625, 0.312500, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.328125, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.375000, 0.000000, -0.187500, + 0.109375, 0.000000, 0.000000, 0.125000, 0.000000, -0.078125, 0.000000, 0.000000, 0.000000, -0.250000, + -0.156250, 0.000000, 0.250000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, -0.187500, 0.000000, 0.109375, 0.000000, 0.031250, 0.031250, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.234375, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.171875, 0.000000, -0.328125, 0.000000, 0.000000, 0.000000, 0.000000, -0.281250, + 0.000000, 0.000000, -0.265625, 0.000000, 0.125000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + -0.312500, 0.000000, 0.000000, 0.000000, 0.000000, -0.031250, 0.000000, 0.390625, 0.000000, 0.000000, + -0.343750, 0.000000, 0.000000, -0.015625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.046875, + -0.109375, 0.171875, -0.031250, 0.125000, 0.000000, 0.000000, -0.359375, -0.171875, -0.328125, 0.000000, + 0.000000, 0.218750, 0.281250, -0.437500, 0.000000, 0.000000, 0.109375, -0.093750, 0.000000, -0.125000, + 0.000000, 0.000000, 0.140625, 0.156250, 0.000000, 0.000000, 0.375000, 0.000000, 0.156250, 0.000000, + 0.000000, 0.265625, 0.000000, 0.000000, 0.296875, 0.000000, 0.000000, -0.140625, 0.000000, -0.250000, + 0.000000, -0.187500, 0.296875, 0.000000, -0.218750, 0.000000, 0.218750, 0.000000, -0.171875, -0.218750, + 0.000000, -0.328125, 0.000000, 0.062500, 0.000000, 0.234375, 0.000000, 0.000000, 0.000000, -0.062500, + 0.000000, 0.000000, 0.265625, 0.000000, 0.000000, 0.000000, 0.046875, 0.000000, 0.000000, 0.093750, + -0.265625, 0.000000, 0.265625, -0.359375, 0.000000, 0.000000, 0.062500, 0.000000, 0.140625, 0.000000, + 0.046875, 0.000000, 0.000000, 0.000000, 0.156250, 0.000000, 0.203125, 0.000000, 0.000000, -0.203125, + 0.000000, 0.000000, 0.328125, 0.000000, -0.484375, 0.000000, 0.281250, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.390625, 0.000000, 0.000000, + 0.000000, 0.000000, -0.031250, 0.000000, -0.375000, -0.156250, 0.000000, -0.015625, 0.000000, -0.421875, + 0.000000, 0.093750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.312500, 0.000000, + 0.015625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.390625, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.125000, 0.046875, 0.000000, 0.000000, 0.000000, + -0.296875, 0.000000, 0.000000, 0.000000, 0.078125, 0.000000, 0.000000, 0.281250, 0.156250, 0.000000, + 0.000000, -0.156250, 0.218750, 0.375000, 0.000000, 0.000000, 0.000000, -0.015625, -0.125000, 0.015625, + 0.359375, 0.171875, 0.000000, -0.078125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.031250, + 0.000000, 0.187500, 0.000000, 0.000000, 0.000000, 0.000000, 0.281250, 0.171875, 0.000000, 0.171875, + 0.000000, -0.078125, -0.312500, 0.000000, 0.000000, 0.000000, 0.000000, -0.250000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.031250, 0.000000, 0.296875, 0.000000, 0.000000, -0.265625, 0.000000, + 0.000000, 0.343750, 0.250000, 0.000000, -0.265625, 0.000000, 0.000000, 0.000000, 0.000000, -0.109375, + 0.000000, 0.078125, 0.000000, -0.140625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.187500, 0.000000, 0.078125, -0.156250, 0.234375, -0.031250, 0.000000, 0.234375, 0.000000, 0.109375, + 0.031250, 0.000000, -0.187500, 0.000000, 0.093750, 0.343750, -0.062500, 0.000000, -0.015625, 0.093750, + 0.000000, 0.000000, 0.000000, 0.015625, 0.015625, 0.000000, 0.140625, 0.234375, 0.156250, 0.000000, + 0.000000, -0.062500, 0.187500, 0.000000, 0.000000, 0.000000, 0.015625, -0.125000, 0.000000, 0.234375, + -0.234375, -0.171875, 0.171875, 0.015625, 0.000000, 0.375000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.171875, -0.218750, 0.000000, 0.171875, 0.000000, 0.000000, -0.718750, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, -0.328125, 0.000000, 0.218750, -0.265625, 0.000000, 0.000000, + 0.000000, 0.187500, 0.000000, 0.109375, 0.000000, -0.171875, 0.062500, 0.000000, 0.000000, 0.093750, + 0.000000, 0.000000, -0.078125, 0.000000, -0.328125, 0.000000, 0.000000, 0.187500, 0.000000, -0.359375, + -0.015625, 0.000000, 0.000000, 0.000000, 0.000000, 0.203125, -0.093750, 0.000000, 0.078125, 0.000000, + 0.000000, -0.187500, 0.000000, 0.000000, 0.000000, -0.109375, 0.000000, 0.312500, 0.187500, 0.000000, + 0.000000, -0.078125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.203125, -0.171875, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.140625, 0.156250, 0.187500, 0.000000, 0.109375, + 0.000000, 0.000000, 0.000000, 0.000000, 0.078125, 0.000000, 0.000000, 0.000000, 0.000000, 0.140625, + 0.000000, -0.156250, 0.000000, 0.312500, 0.000000, 0.000000, 0.000000, 0.000000, 0.031250, -0.031250, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, -0.046875, 0.062500, 0.000000, 0.000000, 0.000000, -0.015625, -0.125000, 0.000000, 0.000000, + 0.000000, -0.156250, -0.015625, 0.250000, -0.109375, -0.171875, 0.000000, 0.000000, 0.000000, 0.000000, + 0.343750, 0.437500, -0.031250, 0.093750, 0.000000, -0.250000, 0.031250, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.078125, 0.031250, 0.000000, 0.000000, 0.437500, + 0.000000, 0.140625, 0.296875, 0.125000, 0.000000, -0.078125, -0.156250, 0.000000, 0.000000, -0.109375, + 0.000000, -0.156250, -0.062500, 0.203125, -0.062500, 0.000000, 0.140625, -0.125000, 0.218750, 0.000000, + 0.000000, -0.421875, 0.000000, 0.000000, 0.312500, 0.000000, 0.000000, 0.234375, 0.250000, 0.000000, + 0.000000, 0.000000, 0.406250, 0.000000, -0.062500, 0.000000, 0.015625, 0.000000, 0.000000, 0.000000, + -0.281250, 0.000000, 0.515625, 0.000000, 0.000000, 0.484375, 0.187500, 0.000000, -0.218750, 0.000000, + 0.312500, 0.000000, 0.125000, 0.062500, 0.125000, 0.000000, 0.468750, -0.578125, 0.000000, -0.546875, + -0.265625, 0.000000, 0.000000, 0.000000, -0.328125, 0.234375, 0.296875, -0.468750, 0.000000, 0.000000, + 0.187500, 0.000000, 0.000000, 0.046875, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.093750, + 0.000000, 0.640625, -0.421875, 0.000000, -0.296875, 0.000000, 0.000000, 0.093750, 0.000000, -0.234375, + 0.000000, 0.000000, -0.281250, -0.265625, 0.000000, -0.250000, 0.250000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.046875, 0.015625, 0.000000, 0.000000, 0.156250, 0.000000, 0.000000, 0.250000, + -0.062500, 0.000000, 0.000000, 0.000000, 0.187500, 0.000000, 0.000000, 0.000000, 0.250000, 0.000000, + -0.140625, -0.125000, 0.000000, 0.250000, 0.000000, 0.000000, -0.343750, 0.000000, 0.343750, 0.000000, + 0.000000, -0.140625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.281250, 0.000000, 0.000000, + 0.234375, 0.000000, 0.078125, -0.515625, 0.000000, -0.234375, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.375000, 0.000000, -0.046875, 0.000000, 0.296875, 0.296875, 0.000000, 0.109375, + 0.312500, 0.000000, -0.281250, 0.000000, 0.109375, 0.218750, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.281250, 0.000000, -0.109375, 0.000000, 0.203125, 0.000000, -0.046875, 0.000000, + 0.000000, 0.000000, -0.281250, 0.000000, -0.234375, 0.515625, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.109375, 0.109375, 0.000000, -0.031250, -0.156250, -0.296875, 0.000000, -0.390625, + 0.000000, 0.171875, -0.093750, 0.000000, 0.312500, 0.312500, 0.000000, -0.125000, 0.000000, 0.171875, + -0.093750, 0.125000, 0.000000, 0.000000, 0.000000, 0.203125, 0.000000, 0.046875, 0.000000, -0.281250, + -0.281250, -0.265625, 0.000000, 0.000000, 0.000000, 0.343750, 0.000000, 0.000000, 0.000000, -0.140625, + 0.000000, 0.359375, 0.203125, 0.000000, -0.125000, 0.000000, 0.000000, -0.140625, -0.046875, 0.171875, + 0.421875, -0.078125, 0.187500, 0.000000, 0.000000, 0.250000, 0.156250, 0.000000, -0.234375, -0.500000, + 0.031250, 0.265625, 0.390625, -0.453125, 0.000000, 0.000000, 0.000000, -0.296875, -0.109375, -0.390625, + 0.000000, -0.250000, 0.000000, 0.000000, -0.203125, 0.000000, 0.250000, -0.234375, 0.000000, -0.078125, + 0.265625, 0.140625, -0.140625, 0.000000, 0.000000, 0.000000, 0.281250, 0.546875, 0.000000, 0.000000, + 0.000000, 0.000000, -0.359375, 0.000000, -0.328125, 0.156250, -0.296875, 0.171875, 0.000000, 0.000000, + 0.171875, 0.000000, -0.625000, 0.000000, 0.000000, 0.000000, 0.000000, 0.171875, -0.140625, 0.000000, + -0.187500, 0.000000, 0.078125, -0.281250, 0.187500, 0.000000, 0.125000, -0.093750, 0.000000, 0.203125, + -0.203125, 0.000000, -0.187500, 0.031250, 0.000000, -0.156250, -0.078125, -0.078125, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.281250, 0.000000, 0.078125, 0.000000, 0.296875, 0.000000, 0.000000, + -0.234375, 0.000000, -0.015625, 0.000000, 0.078125, 0.281250, 0.000000, 0.171875, 0.109375, 0.000000, + 0.203125, -0.406250, -0.187500, 0.000000, 0.000000, 0.000000, -0.328125, 0.046875, 0.000000, 0.296875, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.234375, + 0.265625, -0.156250, -0.203125, 0.000000, -0.281250, 0.171875, 0.000000, 0.000000, 0.375000, -0.062500, + 0.000000, 0.406250, 0.000000, 0.296875, -0.031250, -0.046875, 0.000000, 0.328125, 0.000000, 0.000000, + 0.000000, 0.218750, -0.109375, 0.000000, 0.000000, 0.125000, -0.093750, -0.125000, 0.000000, -0.171875, + 0.234375, -0.140625, 0.000000, 0.062500, -0.015625, 0.000000, 0.156250, -0.453125, 0.000000, 0.000000, + 0.109375, -0.140625, 0.109375, 0.000000, 0.312500, 0.000000, -0.171875, 0.125000, -0.250000, 0.000000, + 0.187500, -0.078125, 0.156250, 0.000000, 0.125000, 0.203125, 0.000000, -0.281250, 0.000000, 0.000000, + 0.000000, 0.000000, 0.109375, 0.000000, 0.000000, 0.250000, 0.187500, 0.000000, 0.171875, -0.109375, + 0.000000, 0.000000, -0.031250, 0.000000, 0.187500, 0.203125, 0.000000, 0.000000, 0.000000, 0.062500, + 0.093750, 0.156250, 0.000000, 0.015625, 0.000000, 0.515625, 0.328125, 0.000000, -0.015625, 0.000000, + 0.000000, 0.312500, 0.484375, 0.000000, 0.000000, -0.312500, 0.000000, -0.531250, -0.250000, -0.140625, + 0.125000, 0.000000, 0.406250, 0.000000, 0.000000, 0.171875, 0.296875, -0.875000, 0.000000, -0.281250, + 0.359375, 0.000000, 0.000000, 0.000000, -0.375000, 0.000000, 0.250000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.500000, 0.000000, -0.140625, 0.000000, -0.156250, 0.000000, 0.000000, -0.218750, + 0.296875, 0.000000, -1.109375, 0.000000, 0.000000, 0.000000, 0.250000, 0.000000, -0.046875, 0.062500, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.328125, 0.000000, 0.109375, 0.000000, -0.109375, + 0.531250, 0.203125, 0.000000, 0.000000, 0.156250, -0.203125, -0.484375, 0.000000, 0.000000, -0.281250, + 0.000000, 0.000000, -0.156250, 0.000000, 0.000000, -0.078125, 0.203125, -0.109375, 0.000000, 0.000000, + 0.000000, -0.062500, -0.062500, 0.000000, 0.000000, 0.000000, -0.109375, -0.250000, 0.000000, 0.000000, + 0.000000, -0.046875, -0.281250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.093750, + 0.328125, 0.000000, 0.312500, 0.000000, 0.000000, 0.000000, 0.515625, -0.187500, 0.000000, 0.062500, + -0.031250, -0.250000, 0.281250, -0.015625, -0.312500, 0.000000, 0.140625, 0.000000, 0.000000, 0.000000, + 0.218750, 0.375000, -0.203125, 0.343750, 0.000000, 0.125000, 0.125000, 0.359375, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.093750, 0.312500, 0.000000, 0.000000, 0.250000, 0.000000, + 0.359375, -0.015625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.312500, 0.000000, 0.000000, + -0.125000, 0.156250, 0.000000, -0.781250, 0.000000, 0.000000, -0.093750, 0.156250, -0.328125, 0.078125, + 0.125000, 0.140625, 0.000000, 0.109375, -0.187500, 0.171875, 0.140625, -0.265625, -0.234375, 0.000000, + 0.000000, 0.000000, 0.000000, -0.093750, 0.000000, 0.000000, 0.171875, 0.000000, 0.078125, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.218750, -0.171875, 0.000000, -0.187500, + -0.234375, 0.000000, 0.140625, 0.156250, 0.000000, 0.484375, 0.406250, -0.234375, 0.343750, -0.812500, + 0.000000, 0.000000, 0.000000, -1.265625, 0.000000, 0.000000, 0.000000, -0.421875, 0.000000, 0.000000, + 0.000000, -0.265625, 0.000000, 0.000000, 0.000000, 0.281250, 0.000000, 0.000000, -0.843750, 0.000000}; #endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w20.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w20.h new file mode 100644 index 0000000000000..25d75a1880f14 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w20.h @@ -0,0 +1,12 @@ +//Numpy array shape [10, 1] +//Min -0.931640625000 +//Max 1.476562500000 +//Number of zeros 6 + +#ifndef W20_H_ +#define W20_H_ + +weight20_t w20[10] = { + 0.000000, 0.000000, 0.000000, 1.185547, 0.000000, 1.476562, -0.931641, 0.769531, 0.000000, 0.000000}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h deleted file mode 100644 index b67cf178a716e..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w3.h +++ /dev/null @@ -1,23 +0,0 @@ -//Numpy array shape [10, 10] -//Min -1.255380868912 -//Max 1.165371656418 -//Number of zeros 0 - -#ifndef W3_H_ -#define W3_H_ - -weight_default_t w3[100] = { - -0.24639761, 0.36854371, -0.20667994, 0.63942766, -0.48512432, -0.20601453, 0.95860600, -0.76670301, -0.62915105, - -0.16087309, -0.71208179, -0.22137630, -0.61618358, -0.28030652, -0.16592601, 0.01428368, -0.02218036, 0.18670039, - -0.05923353, 0.38925353, -0.03025977, 0.18113941, 0.04013579, -0.24923514, 0.04662795, -0.21779495, -0.11618838, - 0.27686477, -0.12692934, -0.14645813, 0.13050388, -0.61944312, -0.97363800, 0.34909710, -0.49283633, 0.35699531, - -0.21654762, 0.29707199, -0.37069076, -0.45038351, 0.23440604, -0.01497080, -0.43628553, 0.47897390, -0.57205141, - 0.28325596, 0.45101821, 0.30717590, -0.82709831, -1.01788270, 0.11227678, 0.40207320, -0.01430387, 0.33558398, - 0.14979517, 0.40087056, 0.56262153, -0.08988120, -0.39212254, 0.19313116, 0.18044059, -0.09485760, 0.07735054, - -1.25538087, -0.37033975, 0.96087897, -0.62376523, 0.97630143, 0.54678482, 1.16537166, -0.38099980, 0.25253880, - -0.48733908, 0.30896747, 0.00154836, -1.06780457, -0.38455144, 0.22028424, 0.40647805, -0.58109504, -0.29596746, - -0.19207183, -0.55882788, 0.12817945, -0.23813887, 0.05867399, 0.29090765, 0.50279891, 0.23116076, 0.11913682, - -0.03850375, -0.61140555, 0.42096528, -0.28724584, 0.06309307, -0.41296995, -0.22518104, 0.10956753, 0.17092451, - 0.46520787}; - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h deleted file mode 100644 index d2b8c3be33f48..0000000000000 --- a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w4.h +++ /dev/null @@ -1,20 +0,0 @@ -//Numpy array shape [10, 1] -//Min -0.562117636204 -//Max 0.764084100723 -//Number of zeros 0 - -#ifndef W4_H_ -#define W4_H_ - -weight_default_t w4[10] = {0.41375983, - -0.10875144, - 0.31972024, - -0.56211764, - 0.16606922, - 0.33737957, - -0.11298771, - 0.61149263, - 0.09088434, - 0.76408410}; - -#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w5.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w5.h new file mode 100644 index 0000000000000..f001160129b86 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w5.h @@ -0,0 +1,74 @@ +//Numpy array shape [25, 25] +//Min -1.203125000000 +//Max 1.078125000000 +//Number of zeros 375 + +#ifndef W5_H_ +#define W5_H_ + +weight5_t w5[625] = { + -0.578125, 0.515625, 0.000000, -0.796875, 0.359375, -0.562500, 0.000000, 0.000000, 0.359375, 0.000000, + 0.390625, 0.000000, 0.000000, -0.281250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.484375, -0.718750, 0.000000, 0.000000, 0.000000, -0.578125, 0.000000, 0.000000, + 0.000000, 0.343750, 0.000000, 0.421875, 0.000000, 0.218750, 0.000000, 0.000000, -0.281250, 0.000000, + 0.218750, 0.000000, 0.000000, 0.000000, 0.000000, -0.625000, 0.250000, -0.375000, 0.000000, 0.000000, + 0.000000, 0.000000, -1.062500, 0.000000, 0.515625, 0.000000, -0.203125, -0.546875, 0.828125, 0.734375, + 0.000000, 0.500000, 0.000000, 0.000000, -1.203125, 0.000000, -1.062500, 0.375000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.375000, 0.703125, 0.000000, 0.000000, 0.000000, 0.000000, 0.390625, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.375000, 0.000000, 0.000000, -0.250000, 0.265625, + -0.312500, 0.000000, 0.171875, 0.312500, 0.000000, 0.000000, 0.250000, 0.000000, 0.000000, 0.203125, + 0.000000, 0.000000, -0.328125, 0.546875, 0.000000, 0.000000, 0.000000, 0.000000, -0.343750, 0.000000, + 0.000000, 0.000000, 0.000000, -0.218750, 0.281250, -0.296875, 0.000000, -0.187500, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, -0.468750, 0.000000, 0.328125, 0.000000, -0.234375, 0.000000, + 0.421875, 0.000000, 0.000000, 0.312500, 0.000000, 0.000000, 0.000000, 0.140625, 0.000000, 0.000000, + 0.296875, -0.390625, 0.000000, 0.000000, 0.000000, -0.593750, 0.421875, 0.250000, 0.000000, -0.234375, + 0.000000, 0.078125, 0.000000, 0.328125, 0.000000, 0.000000, -0.187500, -0.156250, 0.000000, -0.281250, + 0.000000, 0.000000, 0.359375, 0.000000, 0.218750, -0.281250, 0.000000, -0.171875, 0.218750, 0.000000, + 0.000000, 0.000000, 0.000000, 0.312500, 0.000000, 0.000000, 0.406250, 0.000000, 0.000000, 0.000000, + 0.312500, -0.468750, 0.000000, 0.000000, 0.421875, 0.000000, 0.000000, 0.000000, 0.000000, -0.281250, + -0.218750, -0.484375, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.156250, 0.328125, + 0.421875, 0.000000, 0.218750, 0.640625, 0.000000, 0.187500, 0.000000, 0.000000, -0.234375, -0.531250, + 0.671875, 0.000000, -0.250000, 0.000000, 0.000000, -0.375000, 0.000000, 0.390625, -0.203125, 0.000000, + 0.000000, -0.375000, 0.390625, -0.468750, -0.421875, -0.015625, 0.437500, 0.000000, -0.531250, -0.781250, + 0.500000, 0.000000, 0.671875, 0.421875, 0.000000, 0.000000, -0.359375, 0.000000, 0.000000, 0.359375, + 0.000000, -0.156250, 0.000000, 0.000000, 0.218750, -0.328125, 0.000000, 0.000000, 0.000000, 0.000000, + -0.281250, 0.093750, -0.328125, 0.000000, 0.312500, 0.000000, -0.171875, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.343750, -0.234375, 0.125000, -0.250000, + 0.000000, 0.000000, 0.421875, 0.437500, -0.343750, 0.375000, 0.000000, -0.390625, 0.000000, 0.281250, + 0.000000, 0.203125, 0.000000, 0.000000, 0.000000, 0.000000, -0.234375, -0.312500, -0.312500, 0.000000, + 0.000000, -0.250000, 0.234375, 0.000000, 0.000000, 0.000000, 0.000000, -0.187500, 0.000000, 0.000000, + 0.000000, 0.000000, 0.281250, 0.000000, 0.000000, -0.359375, 0.453125, 0.000000, 0.000000, -0.093750, + -0.406250, 0.250000, 0.000000, -0.281250, 0.000000, 0.000000, -0.250000, -0.250000, 0.000000, -0.234375, + -0.125000, -0.171875, 0.468750, -0.484375, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.375000, 0.000000, 0.000000, 0.140625, + -0.156250, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.187500, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.218750, 0.000000, 0.000000, 0.000000, + -0.125000, 0.390625, 0.000000, -0.328125, 1.078125, 0.234375, 0.312500, 0.000000, 0.000000, 0.000000, + 0.781250, -0.218750, 0.000000, 0.312500, 0.000000, 0.000000, 0.000000, -0.500000, -0.906250, -0.687500, + 0.000000, 0.500000, 0.437500, 0.000000, 0.000000, 0.000000, -0.265625, 0.078125, 0.000000, 0.000000, + 0.000000, -0.500000, 0.265625, 0.000000, 0.000000, 0.000000, -0.562500, 0.000000, 0.656250, 0.000000, + 0.468750, 0.000000, 0.000000, 0.000000, 0.140625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, -0.562500, 0.000000, 0.000000, -0.343750, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.671875, -0.328125, 0.468750, 0.000000, 0.468750, 0.000000, + 0.062500, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.203125, 0.109375, 0.000000, 0.000000, + -0.328125, 0.000000, 0.218750, 0.000000, 0.000000, -0.328125, -0.187500, 0.000000, 0.203125, 0.296875, + -0.671875, 0.031250, -0.546875, -0.234375, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.812500, + 0.000000, 0.250000, 0.000000, 0.265625, -0.468750, 0.234375, 0.000000, 0.281250, 0.000000, 0.000000, + -0.828125, -0.671875, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.031250, + -0.203125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.421875, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, 0.656250, 0.000000, 0.453125, 0.343750, 0.343750, 0.000000, 0.000000, + 0.000000, 0.265625, 0.218750, 0.000000, -0.546875, 0.000000, 0.000000, -0.296875, 0.296875, 0.000000, + 0.000000, 0.000000, 0.281250, -0.234375, 0.234375, 0.203125, 0.000000, 0.000000, 0.000000, 0.359375, + 0.000000, -1.078125, 0.000000, 0.000000, 0.000000, -0.187500, 0.437500, 0.000000, 0.000000, -0.500000, + 0.484375, 0.000000, 0.000000, 0.281250, 0.000000, 0.359375, 0.000000, 0.000000, -0.187500, 0.000000, + 0.000000, 0.000000, 0.000000, -0.437500, 0.203125, 0.203125, 0.000000, -0.328125, 0.000000, 0.000000, + -0.250000, 0.000000, 0.000000, 0.000000, 0.390625, 0.000000, 0.328125, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.125000, 0.000000, -0.265625, 0.171875, 0.000000, 0.000000, 0.000000, 0.000000, + -0.421875, 0.359375, 0.000000, -0.390625, -0.093750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, -0.156250, 0.000000, 0.296875, 0.187500, 0.406250, 0.000000, 0.000000, 0.281250, 0.000000, + 0.000000, -0.046875, 0.000000, 0.000000, 0.000000, -0.265625, -0.250000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.375000, 0.000000, -0.375000, 0.000000, 0.000000, 0.000000, 0.000000, -0.968750, + -0.640625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.500000, 0.000000, 0.000000, 0.515625, + 0.531250, 0.000000, 0.000000, 0.000000, 0.000000}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w8.h b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w8.h new file mode 100644 index 0000000000000..30533952a7b8f --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/interface/taus/weights/w8.h @@ -0,0 +1,49 @@ +//Numpy array shape [25, 15] +//Min -0.859375000000 +//Max 0.750000000000 +//Number of zeros 225 + +#ifndef W8_H_ +#define W8_H_ + +weight8_t w8[375] = { + 0.000000, -0.250000, 0.000000, 0.000000, 0.000000, 0.000000, 0.562500, -0.187500, 0.312500, 0.234375, + 0.234375, 0.140625, -0.203125, 0.000000, 0.000000, -0.218750, -0.281250, 0.000000, 0.000000, 0.000000, + 0.187500, 0.296875, 0.000000, -0.296875, 0.000000, -0.203125, 0.328125, -0.390625, 0.000000, 0.000000, + 0.593750, -0.234375, 0.000000, 0.000000, -0.375000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.265625, 0.000000, 0.000000, 0.000000, 0.000000, -0.343750, 0.000000, 0.000000, 0.062500, + 0.000000, 0.000000, 0.000000, 0.312500, 0.000000, 0.000000, 0.406250, -0.265625, -0.421875, 0.000000, + 0.171875, 0.000000, 0.000000, 0.000000, 0.000000, -0.328125, 0.000000, 0.000000, -0.468750, 0.000000, + 0.000000, 0.000000, 0.000000, 0.562500, 0.453125, 0.453125, 0.000000, 0.000000, 0.421875, -0.437500, + -0.296875, -0.250000, -0.359375, 0.000000, -0.234375, -0.625000, 0.000000, -0.328125, 0.000000, -0.359375, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, -0.343750, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, -0.859375, 0.000000, 0.000000, 0.671875, 0.000000, 0.000000, 0.203125, + 0.218750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.468750, -0.234375, 0.296875, 0.000000, + -0.640625, 0.359375, 0.000000, 0.000000, 0.000000, 0.000000, -0.343750, 0.203125, -0.312500, -0.234375, + 0.000000, 0.250000, 0.187500, 0.000000, 0.000000, 0.000000, 0.000000, 0.531250, 0.000000, 0.000000, + -0.250000, 0.000000, 0.000000, -0.187500, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.468750, -0.218750, 0.375000, 0.000000, -0.265625, 0.000000, -0.218750, -0.296875, 0.265625, + -0.562500, 0.281250, 0.000000, 0.390625, 0.437500, 0.000000, 0.000000, 0.218750, 0.625000, 0.000000, + 0.000000, 0.218750, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.203125, 0.000000, 0.750000, + 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.187500, -0.234375, + 0.265625, 0.171875, -0.328125, 0.328125, 0.000000, 0.250000, 0.000000, 0.000000, -0.218750, 0.000000, + 0.000000, -0.281250, 0.000000, -0.312500, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.500000, 0.125000, 0.000000, 0.265625, 0.312500, 0.203125, 0.562500, 0.000000, -0.234375, 0.187500, + 0.000000, 0.000000, 0.203125, 0.000000, 0.000000, -0.156250, 0.515625, 0.000000, 0.000000, 0.000000, + -0.187500, 0.000000, 0.000000, -0.296875, 0.000000, -0.093750, -0.296875, 0.000000, 0.484375, 0.000000, + 0.453125, 0.000000, -0.203125, 0.000000, 0.000000, -0.406250, 0.000000, -0.187500, 0.250000, -0.343750, + 0.000000, 0.000000, 0.000000, -0.343750, 0.000000, 0.000000, 0.000000, 0.000000, 0.578125, 0.000000, + 0.000000, 0.000000, 0.000000, 0.250000, 0.000000, 0.000000, 0.171875, 0.218750, 0.000000, 0.000000, + 0.000000, -0.281250, 0.000000, 0.468750, -0.375000, 0.000000, 0.000000, 0.000000, 0.000000, -0.343750, + 0.000000, 0.453125, 0.000000, 0.000000, 0.000000, 0.281250, 0.609375, 0.000000, 0.000000, 0.000000, + -0.218750, 0.000000, -0.406250, 0.000000, -0.328125, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, -0.734375, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.250000, 0.000000, + 0.000000, 0.000000, -0.328125, 0.000000, 0.640625, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, -0.593750, -0.375000, 0.000000, 0.312500, 0.312500, 0.000000, 0.562500, + 0.000000, 0.000000, -0.593750, 0.000000, 0.281250, 0.218750, 0.359375, 0.000000, 0.000000, -0.296875, + 0.000000, 0.000000, -0.296875, -0.250000, 0.000000, -0.500000, 0.000000, 0.000000, 0.593750, 0.000000, + 0.000000, 0.000000, 0.000000, -0.328125, -0.343750, 0.531250, 0.000000, 0.000000, 0.000000, 0.000000, + 0.000000, 0.000000, 0.000000, -0.234375, 0.000000, 0.000000, 0.000000, 0.000000, -0.421875, -0.250000, + 0.000000, 0.000000, -0.375000, -0.437500, -0.437500}; + +#endif diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1CTJetFileWriter.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1CTJetFileWriter.cc index 82957e57178e1..38e1d75601524 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1CTJetFileWriter.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1CTJetFileWriter.cc @@ -1,4 +1,5 @@ #include +#include // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" @@ -16,6 +17,7 @@ #include "L1Trigger/DemonstratorTools/interface/utilities.h" #include "DataFormats/L1TParticleFlow/interface/PFJet.h" #include "DataFormats/L1TParticleFlow/interface/gt_datatypes.h" +#include "DataFormats/L1Trigger/interface/EtSum.h" // // class declaration @@ -29,7 +31,8 @@ class L1CTJetFileWriter : public edm::one::EDAnalyzer private: // ----------constants, enums and typedefs --------- - unsigned nJets_; + std::vector collections_; + size_t nFramesPerBX_; size_t ctl2BoardTMUX_; size_t gapLengthOutput_; @@ -39,45 +42,84 @@ class L1CTJetFileWriter : public edm::one::EDAnalyzer // ----------member functions ---------------------- void analyze(const edm::Event&, const edm::EventSetup&) override; void endJob() override; - std::vector> encodeJets(const std::vector jets); + std::vector> encodeJets(const std::vector jets, unsigned nJets); + std::vector> encodeSums(const std::vector sums, unsigned nSums); - edm::EDGetTokenT> jetsToken_; l1t::demo::BoardDataWriter fileWriterOutputToGT_; + std::vector>, edm::EDGetTokenT>>> tokens_; + std::vector> tokensToWrite_; + std::vector nJets_; + std::vector nSums_; }; L1CTJetFileWriter::L1CTJetFileWriter(const edm::ParameterSet& iConfig) - : nJets_(iConfig.getParameter("nJets")), + : collections_(iConfig.getParameter>("collections")), nFramesPerBX_(iConfig.getParameter("nFramesPerBX")), ctl2BoardTMUX_(iConfig.getParameter("TMUX")), - gapLengthOutput_(ctl2BoardTMUX_ * nFramesPerBX_ - 2 * nJets_), + gapLengthOutput_(iConfig.getParameter("gapLengthOutput")), maxLinesPerFile_(iConfig.getParameter("maxLinesPerFile")), channelSpecsOutputToGT_{{{"jets", 0}, {{ctl2BoardTMUX_, gapLengthOutput_}, {0}}}}, - jetsToken_(consumes>(iConfig.getParameter("jets"))), fileWriterOutputToGT_(l1t::demo::parseFileFormat(iConfig.getParameter("format")), iConfig.getParameter("outputFilename"), iConfig.getParameter("outputFileExtension"), nFramesPerBX_, ctl2BoardTMUX_, maxLinesPerFile_, - channelSpecsOutputToGT_) {} + channelSpecsOutputToGT_) { + for (const auto& pset : collections_) { + edm::EDGetTokenT> jetToken; + edm::EDGetTokenT> mhtToken; + unsigned nJets = pset.getParameter("nJets"); + unsigned nSums = pset.getParameter("nSums"); + nJets_.push_back(nJets); + nSums_.push_back(nSums); + bool writeJetToken(false), writeMhtToken(false); + if (nJets > 0) { + jetToken = consumes>(pset.getParameter("jets")); + writeJetToken = true; + } + if (nSums > 0) { + mhtToken = consumes>(pset.getParameter("mht")); + writeMhtToken = true; + } + tokens_.emplace_back(jetToken, mhtToken); + tokensToWrite_.emplace_back(writeJetToken, writeMhtToken); + } +} void L1CTJetFileWriter::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; - // 1) Encode jet information onto vectors containing link data - // TODO remove the sort here and sort the input collection where it's created - const edm::View& jets = iEvent.get(jetsToken_); - std::vector sortedJets; - sortedJets.reserve(jets.size()); - std::copy(jets.begin(), jets.end(), std::back_inserter(sortedJets)); - - std::stable_sort( - sortedJets.begin(), sortedJets.end(), [](l1t::PFJet i, l1t::PFJet j) { return (i.hwPt() > j.hwPt()); }); - const auto outputJets(encodeJets(sortedJets)); + // 1) Pack collections in the order they're specified. jets then sums within collection + std::vector> link_words; + for (unsigned iCollection = 0; iCollection < collections_.size(); iCollection++) { + if (tokensToWrite_.at(iCollection).first) { + const auto& jetToken = tokens_.at(iCollection).first; + // 2) Encode jet information onto vectors containing link data + const edm::View& jets = iEvent.get(jetToken); + std::vector sortedJets; + sortedJets.reserve(jets.size()); + std::copy(jets.begin(), jets.end(), std::back_inserter(sortedJets)); + + std::stable_sort( + sortedJets.begin(), sortedJets.end(), [](l1t::PFJet i, l1t::PFJet j) { return (i.hwPt() > j.hwPt()); }); + const auto outputJets(encodeJets(sortedJets, nJets_.at(iCollection))); + link_words.insert(link_words.end(), outputJets.begin(), outputJets.end()); + } - // 2) Pack jet information into 'event data' object, and pass that to file writer + if (tokensToWrite_.at(iCollection).second) { + // 3) Encode sums onto vectors containing link data + const auto& mhtToken = tokens_.at(iCollection).second; + const edm::View& mht = iEvent.get(mhtToken); + std::vector orderedSums; + std::copy(mht.begin(), mht.end(), std::back_inserter(orderedSums)); + const auto outputSums(encodeSums(orderedSums, nSums_.at(iCollection))); + link_words.insert(link_words.end(), outputSums.begin(), outputSums.end()); + } + } + // 4) Pack jet information into 'event data' object, and pass that to file writer l1t::demo::EventData eventDataJets; - eventDataJets.add({"jets", 0}, outputJets); + eventDataJets.add({"jets", 0}, link_words); fileWriterOutputToGT_.addEvent(eventDataJets); } @@ -87,31 +129,51 @@ void L1CTJetFileWriter::endJob() { fileWriterOutputToGT_.flush(); } -std::vector> L1CTJetFileWriter::encodeJets(const std::vector jets) { - std::vector> jet_words; - for (unsigned i = 0; i < nJets_; i++) { - l1t::PFJet j; - if (i < jets.size()) { - j = jets.at(i); - } else { // pad up to nJets_ with null jets - l1t::PFJet j(0, 0, 0, 0, 0, 0); - } - jet_words.push_back(j.encodedJet()[0]); - jet_words.push_back(j.encodedJet()[1]); +std::vector> L1CTJetFileWriter::encodeJets(const std::vector jets, const unsigned nJets) { + // Encode up to nJets jets, padded with 0s + std::vector> jet_words(2 * nJets, 0); // allocate 2 words per jet + for (unsigned i = 0; i < std::min(nJets, (uint)jets.size()); i++) { + const l1t::PFJet& j = jets.at(i); + jet_words[2 * i] = j.encodedJet()[0]; + jet_words[2 * i + 1] = j.encodedJet()[1]; } return jet_words; } +std::vector> L1CTJetFileWriter::encodeSums(const std::vector sums, unsigned nSums) { + // Need two l1t::EtSum for each GT Sum + std::vector> sum_words; + for (unsigned i = 0; i < nSums; i++) { + if (2 * i < sums.size()) { + l1gt::Sum gtSum; + gtSum.valid = 1; // if the sums are sent at all, they are valid + gtSum.vector_pt.V = sums.at(2 * i + 1).hwPt(); + gtSum.vector_phi.V = sums.at(2 * i + 1).hwPhi(); + gtSum.scalar_pt.V = sums.at(2 * i).hwPt(); + sum_words.push_back(gtSum.pack_ap()); + } else { + sum_words.push_back(0); + } + } + return sum_words; +} + // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void L1CTJetFileWriter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { - //The following says we do not know what parameters are allowed so do no validation - // Please change this to state exactly what you do use, even if it is no parameters edm::ParameterSetDescription desc; - desc.add("jets"); + { + edm::ParameterSetDescription vpsd1; + vpsd1.addOptional("jets"); + vpsd1.addOptional("mht"); + vpsd1.add("nJets", 0); + vpsd1.add("nSums", 0); + desc.addVPSet("collections", vpsd1); + } desc.add("outputFilename"); desc.add("outputFileExtension", "txt"); desc.add("nJets", 12); desc.add("nFramesPerBX", 9); + desc.add("gapLengthOutput", 4); desc.add("TMUX", 6); desc.add("maxLinesPerFile", 1024); desc.add("format", "EMPv2"); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1MHtPFProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1MHtPFProducer.cc index c788261e396a7..fbcc76db7dabf 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1MHtPFProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1MHtPFProducer.cc @@ -43,16 +43,16 @@ void L1MhtPfProducer::produce(edm::StreamID, edm::Event& iEvent, const edm::Even // Get the jets from the event l1t::PFJetCollection edmJets = iEvent.get(jetsToken); + std::vector hwJets = convertEDMToHW(edmJets); // convert to the emulator format // Apply pT and eta selections - l1t::PFJetCollection edmJetsFiltered; - std::copy_if(edmJets.begin(), edmJets.end(), std::back_inserter(edmJetsFiltered), [&](auto jet) { - return jet.pt() > minJetPt && std::abs(jet.eta()) < maxJetEta; + std::vector hwJetsFiltered; + std::copy_if(hwJets.begin(), hwJets.end(), std::back_inserter(hwJetsFiltered), [&](auto jet) { + return jet.hwPt > l1ct::Scales::makePtFromFloat(minJetPt) && + std::abs(jet.hwEta) < l1ct::Scales::makeGlbEta(maxJetEta); }); - // Run the emulation - std::vector hwJets = convertEDMToHW(edmJetsFiltered); // convert to the emulator format - l1ct::Sum hwSums = htmht(hwJets); // call the emulator - std::vector edmSums = convertHWToEDM(hwSums); // convert back to edm format + l1ct::Sum hwSums = htmht(hwJetsFiltered); // call the emulator + std::vector edmSums = convertHWToEDM(hwSums); // convert back to edm format // Put the sums in the event std::unique_ptr> mhtCollection(new std::vector(0)); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc index 68baad7517a74..9359f761dce2f 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1NNTauProducer.cc @@ -29,8 +29,9 @@ class L1NNTauProducer : public edm::stream::EDProducer fTauNNId_; - std::unique_ptr fTauNNIdHW_; + std::unique_ptr fTauNNIdHW_; // Default void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; void process_SW(const l1t::PFCandidateCollection& parts, std::unique_ptr& iTaus); @@ -212,6 +213,7 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, L1TauEmu::z0_t z0 = 0; L1TauEmu::dxy_t dxy = 0; + // Reconstruct the Tau Cone for (unsigned i0 = 0; i0 < parts.size(); i0++) { if (L1TauEmu::inCone(seed, (parts[i0]), rCone2)) { if (parts[i0].id() == l1t::PFCandidate::Electron || parts[i0].id() == l1t::PFCandidate::ChargedHadron || @@ -246,17 +248,19 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, if (pt < fSeedPt_) return; - result_t NN = fTauNNIdHW_->compute(seed, parts); - input_t* lNNVector = fTauNNIdHW_->NNVectorVar(); + // Tau NN Inference + Tau_NN_Result NN_ouput = fTauNNIdHW_->compute(seed, parts); + // Needed for making PFTau + input_t* lNNVector = fTauNNIdHW_->NNVectorVar(); float pNNVec[80]; for (unsigned i0 = 0; i0 < 80; i0++) pNNVec[i0] = float(lNNVector[i0]); //Firmware Tau l1ct::Tau l1ctTau; - l1ctTau.hwPt = l1ct::pt_t(pt); //l1gt is <16,11> and currently <16,14> - l1ctTau.hwEta = l1ct::Scales::makeGlbEta(seed.eta()); // seed.eta() and seed.phi() are in physical coordinates + l1ctTau.hwPt = l1ct::pt_t(pt * NN_ouput.nn_pt_correction); //l1gt is <16,11> and currently <16,14> + l1ctTau.hwEta = l1ct::Scales::makeGlbEta(seed.eta()); // seed.eta() and seed.phi() are in physical coordinates l1ctTau.hwPhi = l1ct::Scales::makeGlbPhi(seed.phi()); l1ctTau.hwSeedPt = seed.pt(); @@ -264,7 +268,7 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, l1ctTau.hwCharge = seed.charge(); l1ctTau.hwType = l1ct::Tau::type_t(lId); - l1ctTau.hwRawId = ap_uint<10>(NN * 1024); //NN Output is ap_fixed<16, 8> so need to cast. + l1ctTau.hwRawId = ap_uint<10>(NN_ouput.nn_id * 1024); //NN Output is ap_fixed<16, 6> so need to cast. //Convert to GT format and pack to encodedTau of PFTau l1gt::Tau l1gtTau = l1ctTau.toGT(); @@ -277,7 +281,7 @@ void L1NNTauProducer::makeTau_HW(const l1t::PFCandidate& seed, l1gt::Scales::floatPhi(l1gtTau.v3.phi), float(mass)); - l1t::PFTau l1PFTau(tempP4, pNNVec, NN, 0, lId); + l1t::PFTau l1PFTau(tempP4, pNNVec, NN_ouput.nn_id, 0, lId); l1PFTau.setZ0(float(z0) * 0.05); //L1TauEmu::z0_base); l1PFTau.setDxy(float(dxy) * 0.05); //L1TauEmu::dxy_base); diff --git a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrelatorLayer1Producer.cc b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrelatorLayer1Producer.cc index 155437be33466..38e8222dab630 100644 --- a/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrelatorLayer1Producer.cc +++ b/L1Trigger/Phase2L1ParticleFlow/plugins/L1TCorrelatorLayer1Producer.cc @@ -28,6 +28,7 @@ #include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/regionizer_base_ref.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_ref.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/buffered_folded_multififo_regionizer_ref.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/middle_buffer_multififo_regionizer_ref.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/tdr_regionizer_ref.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/pf/pfalgo2hgc_ref.h" #include "L1Trigger/Phase2L1ParticleFlow/interface/pf/pfalgo3_ref.h" @@ -265,6 +266,9 @@ L1TCorrelatorLayer1Producer::L1TCorrelatorLayer1Producer(const edm::ParameterSet const auto &pset = iConfig.getParameter("regionizerAlgoParameters"); regionizer_ = std::make_unique(pset.getParameter("barrelSetup"), pset); + } else if (regalgo == "MiddleBufferMultififo") { + regionizer_ = std::make_unique( + iConfig.getParameter("regionizerAlgoParameters")); } else if (regalgo == "TDR") { regionizer_ = std::make_unique( iConfig.getParameter("regionizerAlgoParameters")); @@ -367,9 +371,11 @@ void L1TCorrelatorLayer1Producer::fillDescriptions(edm::ConfigurationDescription auto bfMultififoRegPD = getParDesc("regionizerAlgo"); auto multififoBarrelRegPD = edm::ParameterDescription( "regionizerAlgoParameters", l1ct::MultififoRegionizerEmulator::getParameterSetDescriptionBarrel(), true); + auto mbMultififoRegPD = getParDesc("regionizerAlgo"); desc.ifValue(edm::ParameterDescription("regionizerAlgo", "Ideal", true), "Ideal" >> idealRegPD or "TDR" >> tdrRegPD or "Multififo" >> multififoRegPD or - "BufferedFoldedMultififo" >> bfMultififoRegPD or "MultififoBarrel" >> multififoBarrelRegPD); + "BufferedFoldedMultififo" >> bfMultififoRegPD or "MultififoBarrel" >> multififoBarrelRegPD or + "MiddleBufferMultififo" >> mbMultififoRegPD); // PF desc.ifValue(edm::ParameterDescription("pfAlgo", "PFAlgo3", true), "PFAlgo3" >> getParDesc("pfAlgo") or diff --git a/L1Trigger/Phase2L1ParticleFlow/python/L1BJetProducer_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/L1BJetProducer_cff.py index 731d661cfd6c1..75904f145c4c2 100644 --- a/L1Trigger/Phase2L1ParticleFlow/python/L1BJetProducer_cff.py +++ b/L1Trigger/Phase2L1ParticleFlow/python/L1BJetProducer_cff.py @@ -4,7 +4,7 @@ from L1Trigger.Phase2L1ParticleFlow.L1BJetProducer_cfi import L1BJetProducer l1tBJetProducerPuppi = L1BJetProducer.clone( - jets = ("l1tSCPFL1PuppiExtended", ""), + jets = ("l1tSC4PFL1PuppiExtended", ""), maxJets = 6, minPt = 10, vtx = ("l1tVertexFinderEmulator","L1VerticesEmulation") @@ -12,7 +12,7 @@ l1tBJetProducerPuppiCorrectedEmulator = l1tBJetProducerPuppi.clone( - jets = ("l1tSCPFL1PuppiExtendedCorrectedEmulator", "") + jets = ("l1tSC4PFL1PuppiExtendedCorrectedEmulator", "") ) L1TBJetsTask = cms.Task( diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py b/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py index 1ca27e1cf018f..423941d5bb4ae 100644 --- a/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1pfJetMet_cff.py @@ -3,13 +3,20 @@ from L1Trigger.Phase2L1ParticleFlow.l1SeedConePFJetProducer_cfi import l1SeedConePFJetProducer from L1Trigger.Phase2L1ParticleFlow.l1SeedConePFJetEmulatorProducer_cfi import l1SeedConePFJetEmulatorProducer from L1Trigger.Phase2L1ParticleFlow.l1tDeregionizerProducer_cfi import l1tDeregionizerProducer as l1tLayer2Deregionizer, l1tDeregionizerProducerExtended as l1tLayer2DeregionizerExtended -l1tSCPFL1PF = l1SeedConePFJetProducer.clone(L1PFObjects = 'l1tLayer1:PF') -l1tSCPFL1Puppi = l1SeedConePFJetProducer.clone() -l1tSCPFL1PuppiEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2Deregionizer:Puppi') -l1tSCPFL1PuppiCorrectedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2Deregionizer:Puppi', - doCorrections = True, - correctorFile = "L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root", - correctorDir = "L1PuppiSC4EmuJets") +l1tSC4PFL1PF = l1SeedConePFJetProducer.clone(L1PFObjects = 'l1tLayer1:PF') +l1tSC4PFL1Puppi = l1SeedConePFJetProducer.clone() +l1tSC4PFL1PuppiEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2Deregionizer:Puppi') +l1tSC8PFL1PuppiEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2Deregionizer:Puppi', + coneSize = cms.double(0.8)) +l1tSC4PFL1PuppiCorrectedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2Deregionizer:Puppi', + doCorrections = cms.bool(True), + correctorFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root"), + correctorDir = cms.string('L1PuppiSC4EmuJets')) +l1tSC8PFL1PuppiCorrectedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2Deregionizer:Puppi', + coneSize = cms.double(0.8), + doCorrections = cms.bool(True), + correctorFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root"), + correctorDir = cms.string('L1PuppiSC4EmuJets')) _correctedJets = cms.EDProducer("L1TCorrectedPFJetProducer", jets = cms.InputTag("_tag_"), @@ -26,28 +33,25 @@ phase2_hgcalV11.toModify(_correctedJets, correctorFile = "L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root") from L1Trigger.Phase2L1ParticleFlow.l1tMHTPFProducer_cfi import l1tMHTPFProducer -l1tSCPFL1PuppiCorrectedEmulatorMHT = l1tMHTPFProducer.clone(jets = 'l1tSCPFL1PuppiCorrectedEmulator') +l1tSC4PFL1PuppiCorrectedEmulatorMHT = l1tMHTPFProducer.clone(jets = 'l1tSC4PFL1PuppiCorrectedEmulator') -L1TPFJetsTask = cms.Task( - l1tLayer2Deregionizer, l1tSCPFL1PF, l1tSCPFL1Puppi, l1tSCPFL1PuppiEmulator, l1tSCPFL1PuppiCorrectedEmulator, l1tSCPFL1PuppiCorrectedEmulatorMHT -) - -l1tSCPFL1PuppiExtended = l1SeedConePFJetProducer.clone(L1PFObjects = 'l1tLayer1Extended:Puppi') -l1tSCPFL1PuppiExtendedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2DeregionizerExtended:Puppi') -l1tSCPFL1PuppiExtendedCorrectedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2DeregionizerExtended:Puppi', - doCorrections = True, - correctorFile = "L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root", - correctorDir = "L1PuppiSC4EmuJets") +l1tSC4PFL1PuppiExtended = l1SeedConePFJetProducer.clone(L1PFObjects = 'l1tLayer1Extended:Puppi') +l1tSC4PFL1PuppiExtendedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2DeregionizerExtended:Puppi') +l1tSC4PFL1PuppiExtendedCorrectedEmulator = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = 'l1tLayer2DeregionizerExtended:Puppi', + doCorrections = cms.bool(True), + correctorFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root"), + correctorDir = cms.string('L1PuppiSC4EmuJets')) L1TPFJetsTask = cms.Task( - l1tLayer2Deregionizer, l1tSCPFL1PF, l1tSCPFL1Puppi, l1tSCPFL1PuppiEmulator, l1tSCPFL1PuppiCorrectedEmulator, l1tSCPFL1PuppiCorrectedEmulatorMHT + l1tLayer2Deregionizer, l1tSC4PFL1PF, l1tSC4PFL1Puppi, l1tSC4PFL1PuppiEmulator, l1tSC4PFL1PuppiCorrectedEmulator, l1tSC4PFL1PuppiCorrectedEmulatorMHT, + l1tSC8PFL1PuppiEmulator, l1tSC8PFL1PuppiCorrectedEmulator ) L1TPFJetsExtendedTask = cms.Task( - l1tLayer2DeregionizerExtended, l1tSCPFL1PuppiExtended, l1tSCPFL1PuppiExtendedEmulator, l1tSCPFL1PuppiExtendedCorrectedEmulator + l1tLayer2DeregionizerExtended, l1tSC4PFL1PuppiExtended, l1tSC4PFL1PuppiExtendedEmulator, l1tSC4PFL1PuppiExtendedCorrectedEmulator ) L1TPFJetsEmulationTask = cms.Task( - l1tLayer2Deregionizer, l1tSCPFL1PuppiEmulator, l1tSCPFL1PuppiCorrectedEmulator, l1tSCPFL1PuppiCorrectedEmulatorMHT + l1tLayer2Deregionizer, l1tSC4PFL1PuppiEmulator, l1tSC4PFL1PuppiCorrectedEmulator, l1tSC4PFL1PuppiCorrectedEmulatorMHT, + l1tSC8PFL1PuppiEmulator, l1tSC8PFL1PuppiCorrectedEmulator ) - diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1tJetFileWriter_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/l1tJetFileWriter_cfi.py index a53db5cb667fe..e450e0c57e317 100644 --- a/L1Trigger/Phase2L1ParticleFlow/python/l1tJetFileWriter_cfi.py +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1tJetFileWriter_cfi.py @@ -1,9 +1,12 @@ import FWCore.ParameterSet.Config as cms l1tSeededConeJetFileWriter = cms.EDAnalyzer('L1CTJetFileWriter', - jets = cms.InputTag("l1tSCPFL1PuppiEmulatorCorrected"), - nJets = cms.uint32(12), + collections = cms.VPSet(cms.PSet(jets = cms.InputTag("l1tSC4PFL1PuppiCorrectedEmulator"), + nJets = cms.uint32(12), + mht = cms.InputTag("l1tSC4PFL1PuppiCorrectedEmulatorMHT"), + nSums = cms.uint32(1))), nFramesPerBX = cms.uint32(9), # 360 MHz clock or 25 Gb/s link + gapLengthOutput = cms.uint32(4), TMUX = cms.uint32(6), maxLinesPerFile = cms.uint32(1024), outputFilename = cms.string("L1CTSCJetsPatterns"), diff --git a/L1Trigger/Phase2L1ParticleFlow/python/l1tMHTPFProducer_cfi.py b/L1Trigger/Phase2L1ParticleFlow/python/l1tMHTPFProducer_cfi.py index 31e3f57591c9e..e51ca85feafb4 100644 --- a/L1Trigger/Phase2L1ParticleFlow/python/l1tMHTPFProducer_cfi.py +++ b/L1Trigger/Phase2L1ParticleFlow/python/l1tMHTPFProducer_cfi.py @@ -1,7 +1,7 @@ import FWCore.ParameterSet.Config as cms l1tMHTPFProducer = cms.EDProducer("L1MhtPfProducer", - jets = cms.InputTag("l1tSCPFL1PuppiEmulator"), + jets = cms.InputTag("l1tSC4PFL1PuppiEmulator"), minJetPt = cms.double(30.0), maxJetEta = cms.double(2.4) ) diff --git a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/buffered_folded_multififo_regionizer_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/buffered_folded_multififo_regionizer_ref.cpp index 9717416c15b0d..9f1e9ca3f8bcf 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/buffered_folded_multififo_regionizer_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/buffered_folded_multififo_regionizer_ref.cpp @@ -88,16 +88,17 @@ void l1ct::BufferedFoldedMultififoRegionizerEmulator::initSectorsAndRegions(cons l1ct::glbeta_t etaMin, etaMax; findEtaBounds_(fold_[ie].sectors.track[0].region, fold_[ie].regions, etaMin, etaMax); for (unsigned int isec = 0; ntk_ > 0 && isec < NTK_SECTORS; ++isec) { - tkBuffers_[2 * isec + ie] = l1ct::multififo_regionizer::EtaBuffer(nclocks_ / 2, etaMin, etaMax); + tkBuffers_[2 * isec + ie] = + l1ct::multififo_regionizer::EtaPhiBuffer(nclocks_ / 2, etaMin, etaMax); } findEtaBounds_(fold_[ie].sectors.hadcalo[0].region, fold_[ie].regions, etaMin, etaMax); for (unsigned int isec = 0; ncalo_ > 0 && isec < NCALO_SECTORS; ++isec) { caloBuffers_[2 * isec + ie] = - l1ct::multififo_regionizer::EtaBuffer(nclocks_ / 2, etaMin, etaMax); + l1ct::multififo_regionizer::EtaPhiBuffer(nclocks_ / 2, etaMin, etaMax); } findEtaBounds_(fold_[ie].sectors.muon.region, fold_[ie].regions, etaMin, etaMax); if (nmu_ > 0) { - muBuffers_[ie] = l1ct::multififo_regionizer::EtaBuffer(nclocks_ / 2, etaMin, etaMax); + muBuffers_[ie] = l1ct::multififo_regionizer::EtaPhiBuffer(nclocks_ / 2, etaMin, etaMax); } } } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/middle_buffer_multififo_regionizer_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/middle_buffer_multififo_regionizer_ref.cpp new file mode 100644 index 0000000000000..aa818bb139ab6 --- /dev/null +++ b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/middle_buffer_multififo_regionizer_ref.cpp @@ -0,0 +1,631 @@ +#include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/middle_buffer_multififo_regionizer_ref.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/dbgPrintf.h" +#include "L1Trigger/Phase2L1ParticleFlow/interface/regionizer/multififo_regionizer_elements_ref.icc" + +#include +#include +#include + +#ifdef CMSSW_GIT_HASH +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" +#include "FWCore/ParameterSet/interface/allowedValues.h" + +l1ct::MiddleBufferMultififoRegionizerEmulator::MiddleBufferMultififoRegionizerEmulator(const edm::ParameterSet& iConfig) + : MiddleBufferMultififoRegionizerEmulator(iConfig.getParameter("nClocks"), + iConfig.getParameter("nBuffers"), + iConfig.getParameter("etaBufferDepth"), + iConfig.getParameter("nTkLinks"), + iConfig.getParameter("nHCalLinks"), + iConfig.getParameter("nECalLinks"), + iConfig.getParameter("nTrack"), + iConfig.getParameter("nCalo"), + iConfig.getParameter("nEmCalo"), + iConfig.getParameter("nMu"), + /*streaming=*/true, + /*outii=*/2, + /*pauseii=*/1, + iConfig.getParameter("useAlsoVtxCoords")) { + debug_ = iConfig.getUntrackedParameter("debug", false); +} + +edm::ParameterSetDescription l1ct::MiddleBufferMultififoRegionizerEmulator::getParameterSetDescription() { + edm::ParameterSetDescription description; + description.add("nClocks", 162); + description.add("nBuffers", 27); + description.add("etaBufferDepth", 54); + description.add("nTkLinks", 1); + description.add("nHCalLinks", 1); + description.add("nECalLinks", 0); + description.add("nTrack", 22); + description.add("nCalo", 15); + description.add("nEmCalo", 12); + description.add("nMu", 2); + description.add("useAlsoVtxCoords", true); + description.addUntracked("debug", false); + return description; +} + +#endif + +l1ct::MiddleBufferMultififoRegionizerEmulator::MiddleBufferMultififoRegionizerEmulator(unsigned int nclocks, + unsigned int nbuffers, + unsigned int etabufferDepth, + unsigned int ntklinks, + unsigned int nHCalLinks, + unsigned int nECalLinks, + unsigned int ntk, + unsigned int ncalo, + unsigned int nem, + unsigned int nmu, + bool streaming, + unsigned int outii, + unsigned int pauseii, + bool useAlsoVtxCoords) + : RegionizerEmulator(useAlsoVtxCoords), + NTK_SECTORS(9), + NCALO_SECTORS(3), + NTK_LINKS(ntklinks), + HCAL_LINKS(nHCalLinks), + ECAL_LINKS(nECalLinks), + NMU_LINKS(1), + nclocks_(nclocks), + nbuffers_(nbuffers), + etabuffer_depth_(etabufferDepth), + ntk_(ntk), + ncalo_(ncalo), + nem_(nem), + nmu_(nmu), + outii_(outii), + pauseii_(pauseii), + nregions_pre_(27), + nregions_post_(54), + streaming_(streaming), + init_(false), + iclock_(0), + tkRegionizerPre_(ntk, ntk, false, outii, pauseii, useAlsoVtxCoords), + tkRegionizerPost_(ntk, (ntk + outii - 1) / outii, true, outii, pauseii, useAlsoVtxCoords), + hadCaloRegionizerPre_(ncalo, ncalo, false, outii, pauseii), + hadCaloRegionizerPost_(ncalo, (ncalo + outii - 1) / outii, true, outii, pauseii), + emCaloRegionizerPre_(nem, nem, false, outii, pauseii), + emCaloRegionizerPost_(nem, (nem + outii - 1) / outii, true, outii, pauseii), + muRegionizerPre_(nmu, nmu, false, outii, pauseii), + muRegionizerPost_(nmu, std::max(1u, (nmu + outii - 1) / outii), true, outii, pauseii), + tkBuffers_(ntk ? nbuffers_ : 0), + hadCaloBuffers_(ncalo ? nbuffers_ : 0), + emCaloBuffers_(nem ? nbuffers_ : 0), + muBuffers_(nmu ? nbuffers_ : 0) { + assert(nbuffers_ == nregions_post_ || nbuffers_ == nregions_pre_); + unsigned int phisectors = 9, etaslices = 3; + for (unsigned int ietaslice = 0; ietaslice < etaslices && ntk > 0; ++ietaslice) { + for (unsigned int ie = 0; ie < 2; ++ie) { // 0 = negative, 1 = positive + unsigned int nTFEtaSlices = ietaslice == 1 ? 2 : 1; + if ((ietaslice == 0 && ie == 1) || (ietaslice == 2 && ie == 0)) + continue; + unsigned int ireg0 = phisectors * ietaslice, il0 = 3 * NTK_LINKS * (nTFEtaSlices - 1) * ie; + for (unsigned int is = 0; is < NTK_SECTORS; ++is) { // 9 tf sectors + for (unsigned int il = 0; il < NTK_LINKS; ++il) { // max tracks per sector per clock + unsigned int isp = (is + 1) % NTK_SECTORS, ism = (is + NTK_SECTORS - 1) % NTK_SECTORS; + tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, is + ireg0, il0 + il); + tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, isp + ireg0, il0 + il + NTK_LINKS); + tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, ism + ireg0, il0 + il + 2 * NTK_LINKS); + } + } + } + } + // calo + for (unsigned int ie = 0; ie < etaslices; ++ie) { + for (unsigned int is = 0; is < NCALO_SECTORS; ++is) { // NCALO_SECTORS sectors + for (unsigned int j = 0; j < 3; ++j) { // 3 regions x sector + for (unsigned int il = 0; il < HCAL_LINKS; ++il) { + caloRoutes_.emplace_back(is, il, 3 * is + j + phisectors * ie, il); + if (j) { + caloRoutes_.emplace_back((is + 1) % 3, il, 3 * is + j + phisectors * ie, il + HCAL_LINKS); + } + } + for (unsigned int il = 0; il < ECAL_LINKS; ++il) { + emCaloRoutes_.emplace_back(is, il, 3 * is + j + phisectors * ie, il); + if (j) { + emCaloRoutes_.emplace_back((is + 1) % 3, il, 3 * is + j + phisectors * ie, il + ECAL_LINKS); + } + } + } + } + } + // mu + for (unsigned int il = 0; il < NMU_LINKS && nmu > 0; ++il) { + for (unsigned int j = 0; j < nregions_pre_; ++j) { + muRoutes_.emplace_back(0, il, j, il); + } + } +} + +l1ct::MiddleBufferMultififoRegionizerEmulator::~MiddleBufferMultififoRegionizerEmulator() {} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::initSectorsAndRegions(const RegionizerDecodedInputs& in, + const std::vector& out) { + assert(!init_); + init_ = true; + assert(out.size() == nregions_post_); + + std::vector mergedRegions; + unsigned int neta = 3, nphi = 9; + mergedRegions.reserve(nregions_pre_); + mergedRegions_.reserve(nregions_pre_); + outputRegions_.reserve(nregions_post_); + for (unsigned int ieta = 0; ieta < neta; ++ieta) { + for (unsigned int iphi = 0; iphi < nphi; ++iphi) { + const PFRegionEmu& reg0 = out[(2 * ieta + 0) * nphi + iphi].region; + const PFRegionEmu& reg1 = out[(2 * ieta + 1) * nphi + iphi].region; + assert(reg0.hwPhiCenter == reg1.hwPhiCenter); + mergedRegions.emplace_back(reg0.floatEtaMin(), + reg1.floatEtaMax(), + reg0.floatPhiCenter(), + reg0.floatPhiHalfWidth() * 2, + reg0.floatEtaExtra(), + reg0.floatPhiExtra()); + mergedRegions_.push_back(mergedRegions.back().region); + outputRegions_.push_back(reg0); + outputRegions_.push_back(reg1); + if (debug_) { + dbgCout() << "Created region with etaCenter " << mergedRegions.back().region.hwEtaCenter.to_int() + << ", halfWidth " << mergedRegions.back().region.hwEtaHalfWidth.to_int() << "\n"; + } + if (nbuffers_ == nregions_post_) { + for (int i = 0; i < 2; ++i) { + unsigned int iout = (2 * ieta + i) * nphi + iphi; + const l1ct::PFRegionEmu& from = mergedRegions.back().region; + const l1ct::PFRegionEmu& to = out[iout].region; + l1ct::glbeta_t etaMin = to.hwEtaCenter - to.hwEtaHalfWidth - to.hwEtaExtra - from.hwEtaCenter; + l1ct::glbeta_t etaMax = to.hwEtaCenter + to.hwEtaHalfWidth + to.hwEtaExtra - from.hwEtaCenter; + l1ct::glbeta_t etaShift = from.hwEtaCenter - to.hwEtaCenter; + l1ct::glbphi_t phiMin = -to.hwPhiHalfWidth - to.hwPhiExtra; + l1ct::glbphi_t phiMax = +to.hwPhiHalfWidth + to.hwPhiExtra; + l1ct::glbphi_t phiShift = 0; + if (ntk_ > 0) + tkBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer( + etabuffer_depth_, etaMin, etaMax, etaShift, phiMin, phiMax, phiShift); + if (ncalo_ > 0) + hadCaloBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer( + etabuffer_depth_, etaMin, etaMax, etaShift, phiMin, phiMax, phiShift); + if (nem_ > 0) + emCaloBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer( + etabuffer_depth_, etaMin, etaMax, etaShift, phiMin, phiMax, phiShift); + if (nmu_ > 0) + muBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer( + etabuffer_depth_, etaMin, etaMax, etaShift, phiMin, phiMax, phiShift); + } + } else if (nbuffers_ == nregions_pre_) { + unsigned int iout = ieta * nphi + iphi; + if (ntk_ > 0) + tkBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer(etabuffer_depth_); + if (ncalo_ > 0) + hadCaloBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer(etabuffer_depth_); + if (nem_ > 0) + emCaloBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer(etabuffer_depth_); + if (nmu_ > 0) + muBuffers_[iout] = l1ct::multififo_regionizer::EtaPhiBuffer(etabuffer_depth_); + } + } + } + if (ntk_) { + assert(in.track.size() == 2 * NTK_SECTORS); + tkRegionizerPre_.initSectors(in.track); + tkRegionizerPre_.initRegions(mergedRegions); + tkRegionizerPre_.initRouting(tkRoutes_); + tkRegionizerPost_.initRegions(out); + } + if (ncalo_) { + assert(in.hadcalo.size() == NCALO_SECTORS); + hadCaloRegionizerPre_.initSectors(in.hadcalo); + hadCaloRegionizerPre_.initRegions(mergedRegions); + hadCaloRegionizerPre_.initRouting(caloRoutes_); + hadCaloRegionizerPost_.initRegions(out); + } + if (nem_) { + assert(in.emcalo.size() == NCALO_SECTORS); + emCaloRegionizerPre_.initSectors(in.emcalo); + emCaloRegionizerPre_.initRegions(mergedRegions); + if (ECAL_LINKS) + emCaloRegionizerPre_.initRouting(emCaloRoutes_); + emCaloRegionizerPost_.initRegions(out); + } + if (nmu_) { + muRegionizerPre_.initSectors(in.muon); + muRegionizerPre_.initRegions(mergedRegions); + muRegionizerPre_.initRouting(muRoutes_); + muRegionizerPost_.initRegions(out); + } +} + +bool l1ct::MiddleBufferMultififoRegionizerEmulator::step(bool newEvent, + const std::vector& links_tk, + const std::vector& links_hadCalo, + const std::vector& links_emCalo, + const std::vector& links_mu, + std::vector& out_tk, + std::vector& out_hadCalo, + std::vector& out_emCalo, + std::vector& out_mu, + bool /*unused*/) { + iclock_ = (newEvent ? 0 : iclock_ + 1); + bool newRead = iclock_ == 2 * etabuffer_depth_; + + std::vector pre_out_tk; + std::vector pre_out_hadCalo; + std::vector pre_out_emCalo; + std::vector pre_out_mu; + bool ret = false; + if (ntk_) + ret = tkRegionizerPre_.step(newEvent, links_tk, pre_out_tk, false); + if (nmu_) + ret = muRegionizerPre_.step(newEvent, links_mu, pre_out_mu, false); + if (ncalo_) + ret = hadCaloRegionizerPre_.step(newEvent, links_hadCalo, pre_out_hadCalo, false); + if (nem_) { + if (ECAL_LINKS) { + ret = emCaloRegionizerPre_.step(newEvent, links_emCalo, pre_out_emCalo, false); + } else if (ncalo_) { + pre_out_emCalo.resize(pre_out_hadCalo.size()); + for (unsigned int i = 0, n = pre_out_hadCalo.size(); i < n; ++i) { + decode(pre_out_hadCalo[i], pre_out_emCalo[i]); + } + } + } + + // in the no-streaming case, we just output the pre-regionizer + if (!streaming_) { + out_tk.swap(pre_out_tk); + out_mu.swap(pre_out_mu); + out_hadCalo.swap(pre_out_hadCalo); + out_emCalo.swap(pre_out_emCalo); + return ret; + } + + // otherwise, we push into the eta buffers + if (newEvent) { + for (auto& b : tkBuffers_) + b.writeNewEvent(); + for (auto& b : hadCaloBuffers_) + b.writeNewEvent(); + for (auto& b : emCaloBuffers_) + b.writeNewEvent(); + for (auto& b : muBuffers_) + b.writeNewEvent(); + } + unsigned int neta = 3, nphi = 9; + for (unsigned int ieta = 0; ieta < neta; ++ieta) { + for (unsigned int iphi = 0; iphi < nphi; ++iphi) { + unsigned int iin = ieta * nphi + iphi; + for (int i = 0, n = nbuffers_ == nregions_pre_ ? 1 : 2; i < n; ++i) { + unsigned int iout = (n * ieta + i) * nphi + iphi; + if (ntk_) + tkBuffers_[iout].maybe_push(pre_out_tk[iin]); + if (ncalo_) + hadCaloBuffers_[iout].maybe_push(pre_out_hadCalo[iin]); + if (nem_) + emCaloBuffers_[iout].maybe_push(pre_out_emCalo[iin]); + if (nmu_) + muBuffers_[iout].maybe_push(pre_out_mu[iin]); + } + } + } + + // and we read from eta buffers into muxes + if (newRead) { + for (auto& b : tkBuffers_) + b.readNewEvent(); + for (auto& b : hadCaloBuffers_) + b.readNewEvent(); + for (auto& b : emCaloBuffers_) + b.readNewEvent(); + for (auto& b : muBuffers_) + b.readNewEvent(); + } + std::vector bufferOut_tk(ntk_ ? nregions_post_ : 0); + std::vector bufferOut_hadCalo(ncalo_ ? nregions_post_ : 0); + std::vector bufferOut_emCalo(nem_ ? nregions_post_ : 0); + std::vector bufferOut_mu(nmu_ ? nregions_post_ : 0); + if (nbuffers_ == nregions_post_) { // just copy directly + for (unsigned int i = 0; i < nregions_post_; ++i) { + if (ntk_) + bufferOut_tk[i] = tkBuffers_[i].pop(); + if (ncalo_) + bufferOut_hadCalo[i] = hadCaloBuffers_[i].pop(); + if (nem_) + bufferOut_emCalo[i] = emCaloBuffers_[i].pop(); + if (nmu_) + bufferOut_mu[i] = muBuffers_[i].pop(); + } + } else if (nbuffers_ == nregions_pre_) { // propagate and copy + unsigned int neta = 3, nphi = 9; + for (unsigned int ieta = 0; ieta < neta; ++ieta) { + for (unsigned int iphi = 0; iphi < nphi; ++iphi) { + unsigned int iin = ieta * nphi + iphi; + const l1ct::PFRegionEmu& from = mergedRegions_[iin]; + l1ct::TkObjEmu tk = ntk_ ? tkBuffers_[iin].pop() : l1ct::TkObjEmu(); + l1ct::HadCaloObjEmu calo = ncalo_ ? hadCaloBuffers_[iin].pop() : l1ct::HadCaloObjEmu(); + l1ct::EmCaloObjEmu em = nem_ ? emCaloBuffers_[iin].pop() : l1ct::EmCaloObjEmu(); + l1ct::MuObjEmu mu = nmu_ ? muBuffers_[iin].pop() : l1ct::MuObjEmu(); + for (int i = 0; i < 2; ++i) { + const l1ct::PFRegionEmu& to = outputRegions_[2 * iin + i]; + unsigned int iout = (2 * ieta + i) * nphi + iphi; + l1ct::glbeta_t etaMin = to.hwEtaCenter - to.hwEtaHalfWidth - to.hwEtaExtra - from.hwEtaCenter; + l1ct::glbeta_t etaMax = to.hwEtaCenter + to.hwEtaHalfWidth + to.hwEtaExtra - from.hwEtaCenter; + l1ct::glbeta_t etaShift = from.hwEtaCenter - to.hwEtaCenter; + l1ct::glbphi_t phiMin = -to.hwPhiHalfWidth - to.hwPhiExtra; + l1ct::glbphi_t phiMax = +to.hwPhiHalfWidth + to.hwPhiExtra; + if (tk.hwPt > 0 && l1ct::multififo_regionizer::local_eta_phi_window(tk, etaMin, etaMax, phiMin, phiMax)) { + bufferOut_tk[iout] = tk; + bufferOut_tk[iout].hwEta += etaShift; + } + if (calo.hwPt > 0 && l1ct::multififo_regionizer::local_eta_phi_window(calo, etaMin, etaMax, phiMin, phiMax)) { + bufferOut_hadCalo[iout] = calo; + bufferOut_hadCalo[iout].hwEta += etaShift; + } + if (em.hwPt > 0 && l1ct::multififo_regionizer::local_eta_phi_window(em, etaMin, etaMax, phiMin, phiMax)) { + bufferOut_emCalo[iout] = em; + bufferOut_emCalo[iout].hwEta += etaShift; + } + if (mu.hwPt > 0 && l1ct::multififo_regionizer::local_eta_phi_window(mu, etaMin, etaMax, phiMin, phiMax)) { + bufferOut_mu[iout] = mu; + bufferOut_mu[iout].hwEta += etaShift; + } + } + } + } + } + if (ntk_) + tkRegionizerPost_.muxonly_step(newEvent, /*flush=*/true, bufferOut_tk, out_tk); + if (ncalo_) + hadCaloRegionizerPost_.muxonly_step(newEvent, /*flush=*/true, bufferOut_hadCalo, out_hadCalo); + if (nem_) + emCaloRegionizerPost_.muxonly_step(newEvent, /*flush=*/true, bufferOut_emCalo, out_emCalo); + if (nmu_) + muRegionizerPost_.muxonly_step(newEvent, /*flush=*/true, bufferOut_mu, out_mu); + + return newRead; +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::fillLinks(unsigned int iclock, + const l1ct::RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid) { + if (ntk_ == 0) + return; + assert(NTK_LINKS == 1); + links.resize(NTK_SECTORS * NTK_LINKS * 2); + valid.resize(links.size()); + // emulate reduced rate from 96b tracks on 64b links + unsigned int itkclock = 2 * (iclock / 3) + (iclock % 3) - 1; // will underflow for iclock == 0 but it doesn't matter + for (unsigned int is = 0, idx = 0; is < 2 * NTK_SECTORS; ++is, ++idx) { // tf sectors + const l1ct::DetectorSector& sec = in.track[is]; + unsigned int ntracks = sec.size(); + unsigned int nw64 = (ntracks * 3 + 1) / 2; + if (iclock % 3 == 0) { + links[idx].clear(); + valid[idx] = (iclock == 0) || (iclock < nw64); + } else if (itkclock < ntracks && itkclock < nclocks_ - 1) { + links[idx] = sec[itkclock]; + valid[idx] = true; + } else { + links[idx].clear(); + valid[idx] = false; + } + } +} + +template +void l1ct::MiddleBufferMultififoRegionizerEmulator::fillCaloLinks_(unsigned int iclock, + const std::vector>& in, + std::vector& links, + std::vector& valid) { + unsigned int NLINKS = (typeid(T) == typeid(l1ct::HadCaloObjEmu) ? HCAL_LINKS : ECAL_LINKS); + links.resize(NCALO_SECTORS * NLINKS); + valid.resize(links.size()); + for (unsigned int is = 0, idx = 0; is < NCALO_SECTORS; ++is) { + for (unsigned int il = 0; il < NLINKS; ++il, ++idx) { + unsigned int ioffs = iclock * NLINKS + il; + if (ioffs < in[is].size() && iclock < nclocks_ - 1) { + links[idx] = in[is][ioffs]; + valid[idx] = true; + } else { + links[idx].clear(); + valid[idx] = false; + } + } + } +} +void l1ct::MiddleBufferMultififoRegionizerEmulator::fillSharedCaloLinks( + unsigned int iclock, + const std::vector>& em_in, + const std::vector>& had_in, + std::vector& links, + std::vector& valid) { + assert(ECAL_LINKS == 0 && HCAL_LINKS == 1 && ncalo_ != 0 && nem_ != 0); + links.resize(NCALO_SECTORS); + valid.resize(links.size()); + // for the moment we assume the first 54 clocks are for EM, the rest for HAD + const unsigned int NCLK_EM = 54; + for (unsigned int is = 0; is < NCALO_SECTORS; ++is) { + links[is].clear(); + if (iclock < NCLK_EM) { + valid[is] = true; + if (iclock < em_in[is].size()) { + encode(em_in[is][iclock], links[is]); + } + } else { + if (iclock - NCLK_EM < had_in[is].size()) { + encode(had_in[is][iclock - NCLK_EM], links[is]); + valid[is] = true; + } else { + valid[is] = false; + } + } + } // sectors +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::fillLinks(unsigned int iclock, + const l1ct::RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid) { + if (ncalo_ == 0) + return; + if (nem_ != 0 && ECAL_LINKS == 0 && HCAL_LINKS == 1) + fillSharedCaloLinks(iclock, in.emcalo, in.hadcalo, links, valid); + else + fillCaloLinks_(iclock, in.hadcalo, links, valid); +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::fillLinks(unsigned int iclock, + const l1ct::RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid) { + if (nem_ == 0) + return; + fillCaloLinks_(iclock, in.emcalo, links, valid); +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::fillLinks(unsigned int iclock, + const l1ct::RegionizerDecodedInputs& in, + std::vector& links, + std::vector& valid) { + if (nmu_ == 0) + return; + assert(NMU_LINKS == 1); + links.resize(NMU_LINKS); + valid.resize(links.size()); + if (iclock < in.muon.size() && iclock < nclocks_ - 1) { + links[0] = in.muon[iclock]; + valid[0] = true; + } else { + links[0].clear(); + valid[0] = false; + } +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::destream(int iclock, + const std::vector& tk_out, + const std::vector& em_out, + const std::vector& calo_out, + const std::vector& mu_out, + PFInputRegion& out) { + if (ntk_) + tkRegionizerPost_.destream(iclock, tk_out, out.track); + if (ncalo_) + hadCaloRegionizerPost_.destream(iclock, calo_out, out.hadcalo); + if (nem_) + emCaloRegionizerPost_.destream(iclock, em_out, out.emcalo); + if (nmu_) + muRegionizerPost_.destream(iclock, mu_out, out.muon); +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::reset() { + tkRegionizerPre_.reset(); + emCaloRegionizerPre_.reset(); + hadCaloRegionizerPre_.reset(); + muRegionizerPre_.reset(); + tkRegionizerPost_.reset(); + emCaloRegionizerPost_.reset(); + hadCaloRegionizerPost_.reset(); + muRegionizerPost_.reset(); + for (auto& b : tkBuffers_) + b.reset(); + for (auto& b : hadCaloBuffers_) + b.reset(); + for (auto& b : emCaloBuffers_) + b.reset(); + for (auto& b : muBuffers_) + b.reset(); +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::run(const RegionizerDecodedInputs& in, + std::vector& out) { + assert(streaming_); // doesn't make sense otherwise + if (!init_) + initSectorsAndRegions(in, out); + reset(); + std::vector tk_links_in, tk_out; + std::vector em_links_in, em_out; + std::vector calo_links_in, calo_out; + std::vector mu_links_in, mu_out; + + // read and sort the inputs + for (unsigned int iclock = 0; iclock < nclocks_; ++iclock) { + fillLinks(iclock, in, tk_links_in); + fillLinks(iclock, in, em_links_in); + fillLinks(iclock, in, calo_links_in); + fillLinks(iclock, in, mu_links_in); + + bool newevt = (iclock == 0); + step(newevt, tk_links_in, calo_links_in, em_links_in, mu_links_in, tk_out, calo_out, em_out, mu_out, true); + } + + // set up an empty event + for (auto& l : tk_links_in) + l.clear(); + for (auto& l : em_links_in) + l.clear(); + for (auto& l : calo_links_in) + l.clear(); + for (auto& l : mu_links_in) + l.clear(); + + // read and put the inputs in the regions + assert(out.size() == nregions_post_); + for (unsigned int iclock = 0; iclock < nclocks_; ++iclock) { + bool newevt = (iclock == 0); + step(newevt, tk_links_in, calo_links_in, em_links_in, mu_links_in, tk_out, calo_out, em_out, mu_out, true); + + unsigned int ireg = (iclock / (outii_ + pauseii_)); + if ((iclock % (outii_ + pauseii_)) >= outii_) + continue; + if (ireg >= nregions_post_) + break; + + if (streaming_) { + destream(iclock, tk_out, em_out, calo_out, mu_out, out[ireg]); + } else { + if (iclock % outii_ == 0) { + out[ireg].track = tk_out; + out[ireg].emcalo = em_out; + out[ireg].hadcalo = calo_out; + out[ireg].muon = mu_out; + } + } + } + + reset(); +} + +void l1ct::MiddleBufferMultififoRegionizerEmulator::encode(const l1ct::EmCaloObjEmu& from, l1ct::HadCaloObjEmu& to) { + assert(!from.hwEmID[5]); + to.hwPt = from.hwPt; + to.hwEmPt = from.hwPtErr; + to.hwEta = from.hwEta; + to.hwPhi = from.hwPhi; + to.hwEmID[5] = true; + to.hwEmID(4, 0) = from.hwEmID(4, 0); + to.src = from.src; +} +void l1ct::MiddleBufferMultififoRegionizerEmulator::encode(const l1ct::HadCaloObjEmu& from, l1ct::HadCaloObjEmu& to) { + assert(!from.hwEmID[5]); + to = from; +} +void l1ct::MiddleBufferMultififoRegionizerEmulator::decode(l1ct::HadCaloObjEmu& had, l1ct::EmCaloObjEmu& em) { + if (had.hwPt && had.hwEmID[5]) { + em.hwPt = had.hwPt; + em.hwPtErr = had.hwEmPt; + em.hwEta = had.hwEta; + em.hwPhi = had.hwPhi; + em.hwEmID[5] = 0; + em.hwEmID(4, 0) = had.hwEmID(4, 0); + em.hwSrrTot = 0; + em.hwMeanZ = 0; + em.hwHoe = 0; + em.src = had.src; + had.clear(); + } else { + em.clear(); + } +} \ No newline at end of file diff --git a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/multififo_regionizer_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/multififo_regionizer_ref.cpp index a9e9d3977dde4..ef509bb4ccaf1 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/multififo_regionizer_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/multififo_regionizer_ref.cpp @@ -34,6 +34,7 @@ l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(const edm::Parame l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(const std::string& barrelSetup, const edm::ParameterSet& iConfig) : MultififoRegionizerEmulator(parseBarrelSetup(barrelSetup), + iConfig.getParameter("nTkLinks"), iConfig.getParameter("nHCalLinks"), iConfig.getParameter("nECalLinks"), iConfig.getParameter("nClocks"), @@ -71,6 +72,7 @@ edm::ParameterSetDescription l1ct::MultififoRegionizerEmulator::getParameterSetD description.ifValue(edm::ParameterDescription("barrelSetup", "Full54", true), edm::allowedValues("Full54", "Full27")); description.add("nClocks", 54); + description.add("nTkLinks", 2); description.add("nHCalLinks", 2); description.add("nECalLinks", 1); description.add("nTrack", 22); @@ -154,6 +156,7 @@ l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(unsigned int nend } l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(BarrelSetup barrelSetup, + unsigned int ntklinks, unsigned int nHCalLinks, unsigned int nECalLinks, unsigned int nclocks, @@ -168,7 +171,7 @@ l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(BarrelSetup barre : RegionizerEmulator(useAlsoVtxCoords), NTK_SECTORS((barrelSetup == BarrelSetup::Phi18 || barrelSetup == BarrelSetup::Phi9) ? 5 : 9), NCALO_SECTORS((barrelSetup == BarrelSetup::Phi18 || barrelSetup == BarrelSetup::Phi9) ? 2 : 3), - NTK_LINKS(2), + NTK_LINKS(ntklinks), NCALO_LINKS(2), HCAL_LINKS(nHCalLinks), ECAL_LINKS(nECalLinks), @@ -237,13 +240,13 @@ l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(BarrelSetup barre } else if (barrelSetup == BarrelSetup::Central18 || barrelSetup == BarrelSetup::Central9) { nTFEtaSlices = 2; } - unsigned int ireg0 = phisectors * ietaslice, il0 = 6 * (nTFEtaSlices - 1) * ie; + unsigned int ireg0 = phisectors * ietaslice, il0 = 3 * NTK_LINKS * (nTFEtaSlices - 1) * ie; if (barrelSetup == BarrelSetup::Phi18 || barrelSetup == BarrelSetup::Phi9) { for (unsigned int iregphi = 0; iregphi < (nregions_ / etaslices); ++iregphi) { for (unsigned int il = 0; il < NTK_LINKS; ++il) { tkRoutes_.emplace_back((iregphi + 1) + NTK_SECTORS * ie, il, iregphi + ireg0, il0 + il); - tkRoutes_.emplace_back((iregphi + 0) + NTK_SECTORS * ie, il, iregphi + ireg0, il0 + il + 2); - tkRoutes_.emplace_back((iregphi + 2) + NTK_SECTORS * ie, il, iregphi + ireg0, il0 + il + 4); + tkRoutes_.emplace_back((iregphi + 0) + NTK_SECTORS * ie, il, iregphi + ireg0, il0 + il + NTK_LINKS); + tkRoutes_.emplace_back((iregphi + 2) + NTK_SECTORS * ie, il, iregphi + ireg0, il0 + il + 2 * NTK_LINKS); } } } else { @@ -251,8 +254,8 @@ l1ct::MultififoRegionizerEmulator::MultififoRegionizerEmulator(BarrelSetup barre for (unsigned int il = 0; il < NTK_LINKS; ++il) { // max tracks per sector per clock unsigned int isp = (is + 1) % NTK_SECTORS, ism = (is + NTK_SECTORS - 1) % NTK_SECTORS; tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, is + ireg0, il0 + il); - tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, isp + ireg0, il0 + il + 2); - tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, ism + ireg0, il0 + il + 4); + tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, isp + ireg0, il0 + il + NTK_LINKS); + tkRoutes_.emplace_back(is + NTK_SECTORS * ie, il, ism + ireg0, il0 + il + 2 * NTK_LINKS); } } } diff --git a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/tdr_regionizer_ref.cpp b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/tdr_regionizer_ref.cpp index 79616c2753888..5d9d635dc8b02 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/regionizer/tdr_regionizer_ref.cpp +++ b/L1Trigger/Phase2L1ParticleFlow/src/regionizer/tdr_regionizer_ref.cpp @@ -75,9 +75,11 @@ void l1ct::TDRRegionizerEmulator::initSectorsAndRegions(const RegionizerDecodedI netaInBR_, nphiInBR_, nmu_, bigRegionEdges_[i], bigRegionEdges_[i + 1], nclocks_, 1, false); } - dbgCout() << "in.track.size() = " << in.track.size() << std::endl; - dbgCout() << "in.hadcalo.size() = " << in.hadcalo.size() << std::endl; - dbgCout() << "in.emcalo.size() = " << in.emcalo.size() << std::endl; + if (debug_) { + dbgCout() << "in.track.size() = " << in.track.size() << std::endl; + dbgCout() << "in.hadcalo.size() = " << in.hadcalo.size() << std::endl; + dbgCout() << "in.emcalo.size() = " << in.emcalo.size() << std::endl; + } if (ntk_) { for (unsigned int i = 0; i < nBigRegions_; i++) { diff --git a/L1Trigger/Phase2L1ParticleFlow/src/taus/TauNNIdHW.cc b/L1Trigger/Phase2L1ParticleFlow/src/taus/TauNNIdHW.cc index 4f87a9a56b760..f4e996f6a665e 100644 --- a/L1Trigger/Phase2L1ParticleFlow/src/taus/TauNNIdHW.cc +++ b/L1Trigger/Phase2L1ParticleFlow/src/taus/TauNNIdHW.cc @@ -12,6 +12,8 @@ void TauNNIdHW::initialize(const std::string &iInput, int iNParticles) { fId_ = std::make_unique(fNParticles_); fInput_ = iInput; } + +//Prepare the inputs for the Tau NN void TauNNIdHW::SetNNVectorVar() { NNvectorVar_.clear(); for (unsigned i0 = 0; i0 < fNParticles_; i0++) { @@ -35,35 +37,62 @@ void TauNNIdHW::SetNNVectorVar() { } } -result_t TauNNIdHW::EvaluateNN() { - input_t data[N_INPUTS]; +// Main architecture of the NN here +Tau_NN_Result TauNNIdHW::EvaluateNN() { + input_t model_input[N_INPUT_1_1]; for (unsigned int i = 0; i < NNvectorVar_.size(); i++) { - data[i] = input_t(NNvectorVar_[i]); + model_input[i] = input_t(NNvectorVar_[i]); } - layer1_t layer1_out[N_LAYER_1]; - layer1_t logits1[N_LAYER_1]; - nnet::compute_layer(data, logits1, w1, b1); - nnet::relu(logits1, layer1_out); - layer2_t layer2_out[N_LAYER_2]; - layer2_t logits2[N_LAYER_2]; - nnet::compute_layer(layer1_out, logits2, w2, b2); - nnet::relu(logits2, layer2_out); + nnet::dense(model_input, layer2_out, w2, b2); // Dense_1 + + layer4_t layer4_out[N_LAYER_2]; + nnet::relu(layer2_out, layer4_out); // relu_1 + + layer5_t layer5_out[N_LAYER_5]; + nnet::dense(layer4_out, layer5_out, w5, b5); // Dense_2 + + layer7_t layer7_out[N_LAYER_5]; + nnet::relu(layer5_out, layer7_out); // relu_2 + + layer8_t layer8_out[N_LAYER_8]; + nnet::dense(layer7_out, layer8_out, w8, b8); // Dense_3 + + layer10_t layer10_out[N_LAYER_8]; + nnet::relu(layer8_out, layer10_out); // relu_3 + + layer11_t layer11_out[N_LAYER_11]; + nnet::dense(layer10_out, layer11_out, w11, b11); // Dense_4 + + layer13_t layer13_out[N_LAYER_11]; + nnet::relu(layer11_out, layer13_out); // relu_4 + + layer14_t layer14_out[N_LAYER_14]; + nnet::dense(layer13_out, layer14_out, w14, b14); // Dense_5 + + layer16_t layer16_out[N_LAYER_14]; + nnet::relu(layer14_out, layer16_out); // relu_5 - layer3_t layer3_out[N_LAYER_3]; - layer3_t logits3[N_LAYER_3]; - nnet::compute_layer(layer2_out, logits3, w3, b3); - nnet::relu(logits3, layer3_out); + layer17_t layer17_out[N_LAYER_17]; + nnet::dense(layer16_out, layer17_out, w17, b17); // Dense_6 - result_t logits4[N_OUTPUTS]; - nnet::compute_layer(layer3_out, logits4, w4, b4); - result_t res[N_OUTPUTS]; - nnet::sigmoid(logits4, res); + result_t layer19_out[N_LAYER_17]; + nnet::sigmoid(layer17_out, layer19_out); // jetID_output - return res[0]; + result_t layer20_out[N_LAYER_20]; + nnet::dense(layer16_out, layer20_out, w20, b20); // pT_output + + // Return both pT correction and the NN ID + Tau_NN_Result nn_out; + nn_out.nn_pt_correction = layer20_out[0]; + nn_out.nn_id = layer19_out[0]; + + return nn_out; } + /* +// Uncomment for debugging purposes void TauNNIdHW::print() { for (unsigned i0 = 0; i0 < fNParticles_; i0++) { input_t pPt = input_t(fPt_.get()[i0]); @@ -78,30 +107,43 @@ void TauNNIdHW::print() { fprintf(file_, "\n"); } */ -result_t TauNNIdHW::compute(const l1t::PFCandidate &iSeed, std::vector &iParts) { + +Tau_NN_Result TauNNIdHW::compute(const l1t::PFCandidate &iSeed, std::vector &iParts) { + // Initialize the input vector for (unsigned i0 = 0; i0 < fNParticles_; i0++) { fPt_.get()[i0] = 0.; fEta_.get()[i0] = 0.; fPhi_.get()[i0] = 0.; fId_.get()[i0] = 0.; } + + // Sort the candidates by pT std::sort(iParts.begin(), iParts.end(), [](l1t::PFCandidate i, l1t::PFCandidate j) { return (pt_t(i.pt()) > pt_t(j.pt())); }); + + // Compute the values w.r.t to the seeds for (unsigned int i0 = 0; i0 < iParts.size(); i0++) { if (i0 >= fNParticles_) break; + fPt_.get()[i0] = pt_t(iParts[i0].pt()); fEta_.get()[i0] = etaphi_t(iSeed.eta() - iParts[i0].eta()); etaphi_t lDPhi = etaphi_t(iSeed.phi()) - etaphi_t(iParts[i0].phi()); etaphi_t lMPI = 3.1415; + if (lDPhi > lMPI) lDPhi = lDPhi - lMPI; if (lDPhi < -lMPI) lDPhi = lDPhi + lMPI; + fPhi_.get()[i0] = lDPhi; fId_.get()[i0] = id_t(iParts[i0].id()); } + + // Set the inputs SetNNVectorVar(); + + // Return the N outputs with the inputs return EvaluateNN(); } diff --git a/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py b/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py index 98fe13e76b47d..facae0439020f 100644 --- a/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py +++ b/L1Trigger/Phase2L1ParticleFlow/test/make_l1ct_binaryFiles_cfg.py @@ -37,7 +37,8 @@ "drop l1tPFClusters_*_*_*", "drop l1tPFTracks_*_*_*", "drop l1tPFCandidates_*_*_*", - "drop l1tTkPrimaryVertexs_*_*_*") + "drop l1tTkPrimaryVertexs_*_*_*"), + skipEvents = cms.untracked.uint32(0), ) process.load('Configuration.Geometry.GeometryExtended2026D88Reco_cff') @@ -51,6 +52,7 @@ process.load('L1Trigger.Phase2L1ParticleFlow.l1ctLayer1_cff') process.load('L1Trigger.Phase2L1ParticleFlow.l1ctLayer2EG_cff') +process.load('L1Trigger.Phase2L1ParticleFlow.l1pfJetMet_cff') process.load('L1Trigger.L1TTrackMatch.l1tGTTInputProducer_cfi') process.load('L1Trigger.L1TTrackMatch.l1tTrackSelectionProducer_cfi') process.l1tTrackSelectionProducer.processSimulatedTracks = False # these would need stubs, and are not used anyway @@ -58,15 +60,15 @@ from L1Trigger.Phase2L1GMT.gmt_cfi import l1tStandaloneMuons process.l1tSAMuonsGmt = l1tStandaloneMuons.clone() -from L1Trigger.Phase2L1ParticleFlow.l1SeedConePFJetEmulatorProducer_cfi import l1SeedConePFJetEmulatorProducer -from L1Trigger.Phase2L1ParticleFlow.l1tDeregionizerProducer_cfi import l1tDeregionizerProducer from L1Trigger.Phase2L1ParticleFlow.l1tJetFileWriter_cfi import l1tSeededConeJetFileWriter -process.l1tLayer2Deregionizer = l1tDeregionizerProducer.clone() -process.l1tLayer2SeedConeJetsCorrected = l1SeedConePFJetEmulatorProducer.clone(L1PFObjects = cms.InputTag('l1tLayer2Deregionizer', 'Puppi'), - doCorrections = cms.bool(True), - correctorFile = cms.string("L1Trigger/Phase2L1ParticleFlow/data/jecs/jecs_20220308.root"), - correctorDir = cms.string('L1PuppiSC4EmuJets')) -process.l1tLayer2SeedConeJetWriter = l1tSeededConeJetFileWriter.clone(jets = "l1tLayer2SeedConeJetsCorrected") +l1ctLayer2SCJetsProducts = cms.VPSet([cms.PSet(jets = cms.InputTag("l1tSC4PFL1PuppiCorrectedEmulator"), + nJets = cms.uint32(12), + mht = cms.InputTag("l1tSC4PFL1PuppiCorrectedEmulatorMHT"), + nSums = cms.uint32(2)), + cms.PSet(jets = cms.InputTag("l1tSC8PFL1PuppiCorrectedEmulator"), + nJets = cms.uint32(12)) + ]) +process.l1tLayer2SeedConeJetWriter = l1tSeededConeJetFileWriter.clone(collections = l1ctLayer2SCJetsProducts) process.l1tLayer1BarrelTDR = process.l1tLayer1Barrel.clone() process.l1tLayer1BarrelTDR.regionizerAlgo = cms.string("TDR") @@ -130,7 +132,9 @@ process.l1tLayer1HF + process.l1tLayer1 + process.l1tLayer2Deregionizer + - process.l1tLayer2SeedConeJetsCorrected + + process.l1tSC4PFL1PuppiCorrectedEmulator + + process.l1tSC4PFL1PuppiCorrectedEmulatorMHT + + process.l1tSC8PFL1PuppiCorrectedEmulator + # process.l1tLayer2SeedConeJetWriter + process.l1tLayer2EG ) @@ -149,7 +153,7 @@ ##################################################################################################################### ## Layer 2 seeded-cone jets if not args.patternFilesOFF: - process.runPF.insert(process.runPF.index(process.l1tLayer2SeedConeJetsCorrected)+1, process.l1tLayer2SeedConeJetWriter) + process.runPF.insert(process.runPF.index(process.l1tSC8PFL1PuppiCorrectedEmulator)+1, process.l1tLayer2SeedConeJetWriter) process.l1tLayer2SeedConeJetWriter.maxLinesPerFile = _eventsPerFile*54 if not args.dumpFilesOFF: @@ -171,13 +175,24 @@ del process.l1tLayer1HGCalNoTKTM18.regionizerAlgoParameters.nEndcaps del process.l1tLayer1HGCalNoTKTM18.regionizerAlgoParameters.nTkLinks del process.l1tLayer1HGCalNoTKTM18.regionizerAlgoParameters.nCaloLinks + process.l1tLayer1BarrelSerenityTM18 = process.l1tLayer1BarrelSerenity.clone() + process.l1tLayer1BarrelSerenityTM18.regionizerAlgo = "MiddleBufferMultififo" + process.l1tLayer1BarrelSerenityTM18.regionizerAlgoParameters = cms.PSet( + nTrack = process.l1tLayer1BarrelSerenity.regionizerAlgoParameters.nTrack, + nCalo = process.l1tLayer1BarrelSerenity.regionizerAlgoParameters.nCalo, + nEmCalo = process.l1tLayer1BarrelSerenity.regionizerAlgoParameters.nEmCalo, + nMu = process.l1tLayer1BarrelSerenity.regionizerAlgoParameters.nMu, + ) + process.l1tLayer1BarrelSerenityTM18.boards = cms.VPSet(*[cms.PSet(regions = cms.vuint32(*range(18*i,18*i+18))) for i in range(3)]) process.runPF.insert(process.runPF.index(process.l1tLayer1HGCal)+1, process.l1tLayer1HGCalTM18) process.runPF.insert(process.runPF.index(process.l1tLayer1HGCalNoTK)+1, process.l1tLayer1HGCalNoTKTM18) + process.runPF.insert(process.runPF.index(process.l1tLayer1BarrelSerenity)+1, process.l1tLayer1BarrelSerenityTM18) if not args.patternFilesOFF: process.l1tLayer1HGCalTM18.patternWriters = cms.untracked.VPSet(*hgcalTM18WriterConfigs) process.l1tLayer1HGCalNoTKTM18.patternWriters = cms.untracked.VPSet(hgcalNoTKOutputTM18WriterConfig) + process.l1tLayer1BarrelSerenityTM18.patternWriters = cms.untracked.VPSet() if not args.dumpFilesOFF: - for det in "HGCalTM18", "HGCalNoTKTM18": + for det in "HGCalTM18", "HGCalNoTKTM18", "BarrelSerenityTM18": getattr(process, 'l1tLayer1'+det).dumpFileName = cms.untracked.string("TTbar_PU200_"+det+".dump") process.source.fileNames = [ '/store/cmst3/group/l1tr/gpetrucc/12_5_X/NewInputs125X/150223/TTbar_PU200/inputs125X_1.root' ] diff --git a/L1Trigger/TrackFindingTracklet/src/DR.cc b/L1Trigger/TrackFindingTracklet/src/DR.cc index dc7b7204791c6..14afa089a247e 100644 --- a/L1Trigger/TrackFindingTracklet/src/DR.cc +++ b/L1Trigger/TrackFindingTracklet/src/DR.cc @@ -26,8 +26,8 @@ namespace trklet { // read in and organize input tracks and stubs void DR::consume(const StreamsTrack& streamsTrack, const StreamsStub& streamsStub) { const int offsetTrack = region_ * channelAssignment_->numNodesDR(); - auto nonNullTrack = [](int& sum, const FrameTrack& frame) { return sum += (frame.first.isNonnull() ? 1 : 0); }; - auto nonNullStub = [](int& sum, const FrameStub& frame) { return sum += (frame.first.isNonnull() ? 1 : 0); }; + auto nonNullTrack = [](int sum, const FrameTrack& frame) { return sum + (frame.first.isNonnull() ? 1 : 0); }; + auto nonNullStub = [](int sum, const FrameStub& frame) { return sum + (frame.first.isNonnull() ? 1 : 0); }; // count tracks and stubs and reserve corresponding vectors int sizeTracks(0); int sizeStubs(0); @@ -157,4 +157,4 @@ namespace trklet { return same >= channelAssignment_->minIdenticalStubs(); } -} // namespace trklet \ No newline at end of file +} // namespace trklet diff --git a/L1Trigger/TrackFindingTracklet/src/KFin.cc b/L1Trigger/TrackFindingTracklet/src/KFin.cc index d2b0bff2c6dfc..c5cbc3d469648 100644 --- a/L1Trigger/TrackFindingTracklet/src/KFin.cc +++ b/L1Trigger/TrackFindingTracklet/src/KFin.cc @@ -28,8 +28,8 @@ namespace trklet { // read in and organize input tracks and stubs void KFin::consume(const StreamsTrack& streamsTrack, const StreamsStub& streamsStub) { const int offsetTrack = region_ * channelAssignment_->numNodesDR(); - auto nonNullTrack = [](int& sum, const FrameTrack& frame) { return sum += (frame.first.isNonnull() ? 1 : 0); }; - auto nonNullStub = [](int& sum, const FrameStub& frame) { return sum += (frame.first.isNonnull() ? 1 : 0); }; + auto nonNullTrack = [](int sum, const FrameTrack& frame) { return sum + (frame.first.isNonnull() ? 1 : 0); }; + auto nonNullStub = [](int sum, const FrameStub& frame) { return sum + (frame.first.isNonnull() ? 1 : 0); }; // count tracks and stubs and reserve corresponding vectors int sizeTracks(0); int sizeStubs(0); diff --git a/L1Trigger/TrackFindingTracklet/test/AnalyzerDR.cc b/L1Trigger/TrackFindingTracklet/test/AnalyzerDR.cc index 7d7c90d68c78a..fc5e36f397075 100644 --- a/L1Trigger/TrackFindingTracklet/test/AnalyzerDR.cc +++ b/L1Trigger/TrackFindingTracklet/test/AnalyzerDR.cc @@ -200,8 +200,8 @@ namespace trklet { vector> lost; formTracks(lostTracks, lostStubs, lost, offset + channel); nTracks += tracks.size(); - nStubs += accumulate(tracks.begin(), tracks.end(), 0, [](int& sum, const vector& track) { - return sum += (int)track.size(); + nStubs += accumulate(tracks.begin(), tracks.end(), 0, [](int sum, const vector& track) { + return sum + static_cast(track.size()); }); nLost += lost.size(); allTracks += tracks.size(); @@ -289,8 +289,8 @@ namespace trklet { int channel) const { const int offset = channel * setup_->numLayers(); const StreamTrack& streamTrack = streamsTrack[channel]; - const int numTracks = accumulate(streamTrack.begin(), streamTrack.end(), 0, [](int& sum, const FrameTrack& frame) { - return sum += (frame.first.isNonnull() ? 1 : 0); + const int numTracks = accumulate(streamTrack.begin(), streamTrack.end(), 0, [](int sum, const FrameTrack& frame) { + return sum + (frame.first.isNonnull() ? 1 : 0); }); tracks.reserve(numTracks); for (int frame = 0; frame < (int)streamTrack.size(); frame++) { @@ -325,4 +325,4 @@ namespace trklet { } // namespace trklet -DEFINE_FWK_MODULE(trklet::AnalyzerDR); \ No newline at end of file +DEFINE_FWK_MODULE(trklet::AnalyzerDR); diff --git a/L1Trigger/TrackFindingTracklet/test/AnalyzerDRin.cc b/L1Trigger/TrackFindingTracklet/test/AnalyzerDRin.cc index e9f37ab9ec2c9..e91d45c0b06e2 100644 --- a/L1Trigger/TrackFindingTracklet/test/AnalyzerDRin.cc +++ b/L1Trigger/TrackFindingTracklet/test/AnalyzerDRin.cc @@ -201,8 +201,8 @@ namespace trklet { vector> lost; formTracks(lostTracks, lostStubs, lost, offset + channel); nTracks += tracks.size(); - nStubs += accumulate(tracks.begin(), tracks.end(), 0, [](int& sum, const vector& track) { - return sum += (int)track.size(); + nStubs += accumulate(tracks.begin(), tracks.end(), 0, [](int sum, const vector& track) { + return sum + (int)track.size(); }); nLost += lost.size(); allTracks += tracks.size(); @@ -290,8 +290,8 @@ namespace trklet { int channel) const { const int offset = channel * setup_->numLayers(); const StreamTrack& streamTrack = streamsTrack[channel]; - const int numTracks = accumulate(streamTrack.begin(), streamTrack.end(), 0, [](int& sum, const FrameTrack& frame) { - return sum += (frame.first.isNonnull() ? 1 : 0); + const int numTracks = accumulate(streamTrack.begin(), streamTrack.end(), 0, [](int sum, const FrameTrack& frame) { + return sum + (frame.first.isNonnull() ? 1 : 0); }); tracks.reserve(numTracks); for (int frame = 0; frame < (int)streamTrack.size(); frame++) { @@ -326,4 +326,4 @@ namespace trklet { } // namespace trklet -DEFINE_FWK_MODULE(trklet::AnalyzerDRin); \ No newline at end of file +DEFINE_FWK_MODULE(trklet::AnalyzerDRin); diff --git a/L1TriggerConfig/GMTConfigProducers/interface/RecordHelper.h b/L1TriggerConfig/GMTConfigProducers/interface/RecordHelper.h index 8732a7a4486fa..a2ac622ca74ef 100644 --- a/L1TriggerConfig/GMTConfigProducers/interface/RecordHelper.h +++ b/L1TriggerConfig/GMTConfigProducers/interface/RecordHelper.h @@ -13,7 +13,7 @@ */ -#include +#include #include "RelationalAccess/ICursor.h" #include "CoralBase/AttributeList.h" @@ -30,6 +30,7 @@ class FieldHandlerBase { typedef coral::AttributeList AttributeList; /** Construct a new field handler with the C++ field name as its argument */ FieldHandlerBase(const std::string& name) : name_(name) {} + FieldHandlerBase() = delete; /** Return the name of the field handled by this object. */ const std::string& getName() { return name_; } @@ -64,14 +65,16 @@ class FieldHandler : public FieldHandlerBase { FieldHandler(const std::string& fieldName, TSetMethod setter) : FieldHandlerBase(fieldName), setter_(setter) {} + FieldHandler() = delete; + /** Actual data extraction. */ void extractValue(const AttributeList& src, TOutput& dest) override { #ifdef RECORDHELPER_DEBUG std::cout << "Parsing field " << this->getName() << " with type " << typeid(TCField).name(); #endif - typedef typename boost::remove_cv::type>::type TDBFieldT; + typedef typename std::remove_cv::type>::type TDBFieldT; const TDBFieldT& value = src[this->getColumnName()].template data(); - ((dest).*setter_)(TCField(value)); + call(dest, TCField(value)); #ifdef RECORDHELPER_DEBUG std::cout << "=" << TCField(value) << std::endl; @@ -79,9 +82,10 @@ class FieldHandler : public FieldHandlerBase { } protected: + void call(TOutput& dest, const TCField value) { ((dest).*setter_)(value); } /** Points to the setter method used to stuff the field's value into the destination object. */ - TSetMethod setter_; + TSetMethod setter_ = nullptr; }; /** A special handler for bool fields in the GT/GMT DBs. These can't be imported @@ -96,13 +100,15 @@ class ASCIIBoolFieldHandler : public FieldHandler { ASCIIBoolFieldHandler(const std::string& fieldName, typename FieldHandler::TSetMethod setter) : FieldHandler(fieldName, setter) {} + ASCIIBoolFieldHandler() = delete; + /** Extract value as char, then see compare it to '0' to get its truth value. */ void extractValue(const AttributeList& src, TOutput& dest) override { char value = src[this->getColumnName()].template data(); #ifdef RECORDHELPER_DEBUG std::cout << " .. and " << this->getColumnName() << " is (in integers) " << (int)value << std::endl; #endif - ((dest).*(this->setter_))(value != FalseCharacter); + this->call(dest, value != FalseCharacter); } }; diff --git a/L1TriggerScouting/Utilities/BuildFile.xml b/L1TriggerScouting/Utilities/BuildFile.xml new file mode 100644 index 0000000000000..3cf482ccd33ff --- /dev/null +++ b/L1TriggerScouting/Utilities/BuildFile.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/interface/conversion.h b/L1TriggerScouting/Utilities/interface/conversion.h new file mode 100644 index 0000000000000..45b233cbb07b9 --- /dev/null +++ b/L1TriggerScouting/Utilities/interface/conversion.h @@ -0,0 +1,37 @@ +#ifndef L1TriggerScouting_Utilities_conversion_h +#define L1TriggerScouting_Utilities_conversion_h + +#include "L1TriggerScouting/Utilities/interface/scales.h" +#include + +namespace l1ScoutingRun3 { + + inline float _setPhiRange(float phi) { + phi = phi >= M_PI ? phi - 2. * M_PI : phi; + return phi; + } + + namespace ugmt { + + inline float fPt(int hwPt) { return scales::pt_scale * (hwPt - 1); }; + inline float fEta(int hwEta) { return scales::eta_scale * hwEta; }; + inline float fPhi(int hwPhi) { return _setPhiRange(scales::phi_scale * hwPhi); }; + inline float fPtUnconstrained(int hwPtUnconstrained) { + return scales::ptunconstrained_scale * (hwPtUnconstrained - 1); + }; + inline float fEtaAtVtx(int hwEtaAtVtx) { return scales::eta_scale * hwEtaAtVtx; }; + inline float fPhiAtVtx(int hwPhiAtVtx) { return _setPhiRange(scales::phi_scale * hwPhiAtVtx); }; + + } // namespace ugmt + + namespace demux { + + inline float fEt(int hwEt) { return scales::et_scale * hwEt; }; + inline float fEta(int hwEta) { return scales::eta_scale * hwEta; }; + inline float fPhi(int hwPhi) { return _setPhiRange(scales::phi_scale * hwPhi); }; + + } // namespace demux + +} // namespace l1ScoutingRun3 + +#endif \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/interface/convertToL1TFormat.h b/L1TriggerScouting/Utilities/interface/convertToL1TFormat.h new file mode 100644 index 0000000000000..93914e4afea23 --- /dev/null +++ b/L1TriggerScouting/Utilities/interface/convertToL1TFormat.h @@ -0,0 +1,26 @@ +#ifndef L1TriggerScouting_Utilities_convertToL1TFormat_h +#define L1TriggerScouting_Utilities_convertToL1TFormat_h + +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "DataFormats/L1Trigger/interface/Muon.h" +#include "DataFormats/L1Trigger/interface/Jet.h" +#include "DataFormats/L1Trigger/interface/EGamma.h" +#include "DataFormats/L1Trigger/interface/Tau.h" +#include "DataFormats/L1Trigger/interface/EtSum.h" + +#include "L1TriggerScouting/Utilities/interface/conversion.h" + +#include "iostream" + +namespace l1ScoutingRun3 { + + l1t::Muon getL1TMuon(const Muon& muon); + l1t::Jet getL1TJet(const Jet& jet); + l1t::EGamma getL1TEGamma(const EGamma& eGamma); + l1t::Tau getL1TTau(const Tau& scTau); + l1t::EtSum getL1TEtSum(const BxSums& sums, l1t::EtSum::EtSumType); + +} // namespace l1ScoutingRun3 + +#endif // L1TriggerScouting_Utilities_convertToL1TFormat_h \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/interface/printScObjects.h b/L1TriggerScouting/Utilities/interface/printScObjects.h new file mode 100644 index 0000000000000..c2a6257811de5 --- /dev/null +++ b/L1TriggerScouting/Utilities/interface/printScObjects.h @@ -0,0 +1,22 @@ +#ifndef L1TriggerScouting_Utilities_printScObjects_h +#define L1TriggerScouting_Utilities_printScObjects_h + +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "L1TriggerScouting/Utilities/interface/conversion.h" + +#include "iostream" + +namespace l1ScoutingRun3 { + + void printMuon(const Muon& muon, std::ostream& outs = std::cout); + template + void printCaloObject(const T& obj, std::ostream& outs = std::cout); + void printJet(const Jet& jet, std::ostream& outs = std::cout); + void printEGamma(const EGamma& eGamma, std::ostream& outs = std::cout); + void printTau(const Tau& tau, std::ostream& outs = std::cout); + void printBxSums(const BxSums& sums, std::ostream& outs = std::cout); + +} // namespace l1ScoutingRun3 + +#endif // L1TriggerScouting_Utilities_printScObjects_h \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/interface/scales.h b/L1TriggerScouting/Utilities/interface/scales.h new file mode 100644 index 0000000000000..45995518619ff --- /dev/null +++ b/L1TriggerScouting/Utilities/interface/scales.h @@ -0,0 +1,30 @@ +#ifndef L1TriggerScouting_Utilities_scales_h +#define L1TriggerScouting_Utilities_scales_h + +#include +#include + +namespace l1ScoutingRun3 { + + // Scaled used to convert scouting hw values to physical quantities + + namespace ugmt { + struct scales { + static constexpr float pt_scale = 0.5; + static constexpr float ptunconstrained_scale = 1.0; + static constexpr float phi_scale = 2. * M_PI / 576.; + static constexpr float eta_scale = 0.0870 / 8; + static constexpr float phi_range = M_PI; + }; + } // namespace ugmt + + namespace demux { + struct scales { + static constexpr float phi_scale = 2. * M_PI / 144.; + static constexpr float eta_scale = 0.0435; + static constexpr float et_scale = 0.5; + }; + } // namespace demux + +} // namespace l1ScoutingRun3 +#endif // L1TriggerScouting_Utilities_scales_h diff --git a/L1TriggerScouting/Utilities/plugins/BuildFile.xml b/L1TriggerScouting/Utilities/plugins/BuildFile.xml new file mode 100644 index 0000000000000..2e16c87937d04 --- /dev/null +++ b/L1TriggerScouting/Utilities/plugins/BuildFile.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/plugins/DumpScObjects.cc b/L1TriggerScouting/Utilities/plugins/DumpScObjects.cc new file mode 100644 index 0000000000000..bb57a7ed37da6 --- /dev/null +++ b/L1TriggerScouting/Utilities/plugins/DumpScObjects.cc @@ -0,0 +1,235 @@ +#include "FWCore/Framework/interface/MakerMacros.h" + +#include +#include +#include +#include +#include + +#include "FWCore/Framework/interface/stream/EDAnalyzer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/MessageLogger/interface/MessageDrop.h" + +#include "DataFormats/L1Scouting/interface/OrbitCollection.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingMuon.h" +#include "DataFormats/L1Scouting/interface/L1ScoutingCalo.h" +#include "L1TriggerScouting/Utilities/interface/printScObjects.h" +#include "L1TriggerScouting/Utilities/interface/convertToL1TFormat.h" + +using namespace l1ScoutingRun3; + +// ----------------------------- CLASS DECLARATION ---------------------------- +class DumpScObjects : public edm::stream::EDAnalyzer<> { +public: + // constructor and destructor + explicit DumpScObjects(const edm::ParameterSet&); + ~DumpScObjects() override{}; + + // method for analyzing the events + void analyze(const edm::Event&, const edm::EventSetup&) override; + +private: + // dump contenct of BX + void printBx(unsigned bx); + + // the tokens to access the data + edm::EDGetTokenT gmtMuonsToken_; + edm::EDGetTokenT caloJetsToken_; + edm::EDGetTokenT caloEGammasToken_; + edm::EDGetTokenT caloTausToken_; + edm::EDGetTokenT caloEtSumsToken_; + + edm::Handle muonHandle_; + edm::Handle jetHandle_; + edm::Handle eGammaHandle_; + edm::Handle tauHandle_; + edm::Handle etSumHandle_; + + // the min and max BX to be analyzed + unsigned minBx_; + unsigned maxBx_; + + // select collection to be printed + bool checkMuons_; + bool checkJets_; + bool checkEGammas_; + bool checkTaus_; + bool checkEtSums_; + + // dump a specific (ORBIT, BX RANGE) + bool searchEvent_; + unsigned orbitNum_; + unsigned searchStartBx_; + unsigned searchStopBx_; + + // utils + bool skipEmptyBx_; +}; +// ----------------------------------------------------------------------------- + +// -------------------------------- constructor ------------------------------- + +DumpScObjects::DumpScObjects(const edm::ParameterSet& iConfig) + : minBx_(iConfig.getUntrackedParameter("minBx", 0)), + maxBx_(iConfig.getUntrackedParameter("maxBx", 3564)), + + checkMuons_(iConfig.getUntrackedParameter("checkMuons", true)), + checkJets_(iConfig.getUntrackedParameter("checkJets", true)), + checkEGammas_(iConfig.getUntrackedParameter("checkEGammas", true)), + checkTaus_(iConfig.getUntrackedParameter("checkTaus", true)), + checkEtSums_(iConfig.getUntrackedParameter("checkEtSums", true)), + + searchEvent_(iConfig.getUntrackedParameter("searchEvent", false)), + orbitNum_(iConfig.getUntrackedParameter("orbitNumber", 0)), + searchStartBx_(iConfig.getUntrackedParameter("searchStartBx", 0)), + searchStopBx_(iConfig.getUntrackedParameter("searchStopBx", 0)), + + skipEmptyBx_(iConfig.getUntrackedParameter("skipEmptyBx", true)) { + if (checkMuons_) + gmtMuonsToken_ = consumes(iConfig.getParameter("gmtMuonsTag")); + if (checkJets_) + caloJetsToken_ = consumes(iConfig.getParameter("caloJetsTag")); + if (checkEGammas_) + caloEGammasToken_ = consumes(iConfig.getParameter("caloEGammasTag")); + if (checkTaus_) + caloTausToken_ = consumes(iConfig.getParameter("caloTausTag")); + if (checkEtSums_) + caloEtSumsToken_ = consumes(iConfig.getParameter("caloEtSumsTag")); +} +// ----------------------------------------------------------------------------- + +// ----------------------- method called for each orbit ----------------------- +void DumpScObjects::analyze(const edm::Event& iEvent, const edm::EventSetup& evSetup) { + if (checkMuons_) + iEvent.getByToken(gmtMuonsToken_, muonHandle_); + if (checkJets_) + iEvent.getByToken(caloJetsToken_, jetHandle_); + if (checkEGammas_) + iEvent.getByToken(caloEGammasToken_, eGammaHandle_); + if (checkTaus_) + iEvent.getByToken(caloTausToken_, tauHandle_); + if (checkEtSums_) + iEvent.getByToken(caloEtSumsToken_, etSumHandle_); + + // get the orbit number + unsigned currOrbit = iEvent.id().event(); + + // if we are looking for a specific orbit + if (searchEvent_) { + if (currOrbit != orbitNum_) + return; + + // found the orbit + for (unsigned bx = searchStartBx_; bx <= searchStopBx_; bx++) { + printBx(bx); + } + } else { + if (skipEmptyBx_) { + // create a set of non empty BXs + std::set uniqueBx; + + if (checkMuons_) { + for (const unsigned& bx : muonHandle_->getFilledBxs()) { + if ((bx >= minBx_) || (bx <= maxBx_)) + uniqueBx.insert(bx); + } + } + if (checkJets_) { + for (const unsigned& bx : jetHandle_->getFilledBxs()) { + if ((bx >= minBx_) || (bx <= maxBx_)) + uniqueBx.insert(bx); + } + } + if (checkEGammas_) { + for (const unsigned& bx : eGammaHandle_->getFilledBxs()) { + if ((bx >= minBx_) || (bx <= maxBx_)) + uniqueBx.insert(bx); + } + } + if (checkTaus_) { + for (const unsigned& bx : tauHandle_->getFilledBxs()) { + if ((bx >= minBx_) || (bx <= maxBx_)) + uniqueBx.insert(bx); + } + } + if (checkEtSums_) { + for (const unsigned& bx : etSumHandle_->getFilledBxs()) { + if ((bx >= minBx_) || (bx <= maxBx_)) + uniqueBx.insert(bx); + } + } + + // process bx + for (const unsigned& bx : uniqueBx) { + printBx(bx); + } + + } else { + // dump all objects + for (unsigned bx = minBx_; bx <= maxBx_; bx++) { + printBx(bx); + } + } + } +} +// ----------------------------------------------------------------------------- + +void DumpScObjects::printBx(unsigned bx) { + std::cout << "BX = " << bx << " ****" << std::endl; + + if (checkMuons_ && muonHandle_.isValid()) { + int i = 0; + const auto& muons = muonHandle_->bxIterator(bx); + for (const auto& muon : muons) { + std::cout << "--- Muon " << i << " ---\n"; + printMuon(muon); + i++; + } + } + + if (checkJets_ && jetHandle_.isValid()) { + int i = 0; + const auto& jets = jetHandle_->bxIterator(bx); + for (const auto& jet : jets) { + std::cout << "--- Jet " << i << " ---\n"; + printJet(jet); + i++; + } + } + + if (checkEGammas_ && jetHandle_.isValid()) { + int i = 0; + const auto& eGammas = eGammaHandle_->bxIterator(bx); + for (const auto& egamma : eGammas) { + std::cout << "--- E/Gamma " << i << " ---\n"; + printEGamma(egamma); + i++; + } + } + + if (checkTaus_ && tauHandle_.isValid()) { + int i = 0; + const auto& taus = tauHandle_->bxIterator(bx); + for (const auto& tau : taus) { + std::cout << "--- Tau " << i << " ---\n"; + printTau(tau); + i++; + } + } + + if (checkEtSums_ && etSumHandle_.isValid()) { + const auto& sums = etSumHandle_->bxIterator(bx); + for (const auto& sum : sums) { + std::cout << "--- Calo Sums ---\n"; + printBxSums(sum); + } + } +} + +DEFINE_FWK_MODULE(DumpScObjects); diff --git a/L1TriggerScouting/Utilities/src/convertToL1TFormat.cc b/L1TriggerScouting/Utilities/src/convertToL1TFormat.cc new file mode 100644 index 0000000000000..bb2ffda7440ba --- /dev/null +++ b/L1TriggerScouting/Utilities/src/convertToL1TFormat.cc @@ -0,0 +1,144 @@ +#include "L1TriggerScouting/Utilities/interface/convertToL1TFormat.h" + +namespace l1ScoutingRun3 { + + l1t::Muon getL1TMuon(const Muon& muon) { + return l1t::Muon( + math::PtEtaPhiMLorentzVector(ugmt::fPt(muon.hwPt()), ugmt::fEta(muon.hwEta()), ugmt::fPhi(muon.hwPhi()), 0.), + muon.hwPt(), + muon.hwEta(), + muon.hwPhi(), + muon.hwQual(), + muon.hwCharge(), + muon.hwChargeValid(), + 0, + muon.tfMuonIndex(), + 0, + false, + 0, + 0, + 0, + 0, + muon.hwEtaAtVtx(), + muon.hwPhiAtVtx(), + ugmt::fEtaAtVtx(muon.hwEtaAtVtx()), + ugmt::fPhiAtVtx(muon.hwPhiAtVtx()), + muon.hwPtUnconstrained(), + ugmt::fPtUnconstrained(muon.hwPtUnconstrained()), + muon.hwDXY()); + } + + l1t::Jet getL1TJet(const Jet& jet) { + return l1t::Jet( + math::PtEtaPhiMLorentzVector(demux::fEt(jet.hwEt()), demux::fEta(jet.hwEta()), demux::fPhi(jet.hwPhi()), 0.), + jet.hwEt(), + jet.hwEta(), + jet.hwPhi(), + jet.hwIso()); + } + + l1t::EGamma getL1TEGamma(const EGamma& eGamma) { + return l1t::EGamma(math::PtEtaPhiMLorentzVector( + demux::fEt(eGamma.hwEt()), demux::fEta(eGamma.hwEta()), demux::fPhi(eGamma.hwPhi()), 0.), + eGamma.hwEt(), + eGamma.hwEta(), + eGamma.hwPhi(), + 0, + eGamma.hwIso()); + } + + l1t::Tau getL1TTau(const Tau& tau) { + return l1t::Tau( + math::PtEtaPhiMLorentzVector(demux::fEt(tau.hwEt()), demux::fEta(tau.hwEta()), demux::fPhi(tau.hwPhi()), 0.), + tau.hwEt(), + tau.hwEta(), + tau.hwPhi(), + 0, + tau.hwIso()); + } + + l1t::EtSum getL1TEtSum(const BxSums& sums, l1t::EtSum::EtSumType sumType) { + switch (sumType) { + case l1t::EtSum::kTotalEt: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwTotalEt()), 0., 0., 0.), sumType, sums.hwTotalEt(), 0, 0, 0); + case l1t::EtSum::kTotalEtEm: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwTotalEtEm()), 0., 0., 0.), + sumType, + sums.hwTotalEtEm(), + 0, + 0, + 0); + case l1t::EtSum::kTotalHt: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwTotalHt()), 0., 0., 0.), sumType, sums.hwTotalHt(), 0, 0, 0); + case l1t::EtSum::kMissingEt: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwMissEt()), 0., demux::fPhi(sums.hwMissEtPhi()), 0.), + sumType, + sums.hwMissEt(), + 0, + sums.hwMissEtPhi(), + 0); + case l1t::EtSum::kMissingHt: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwMissHt()), 0., demux::fPhi(sums.hwMissHtPhi()), 0.), + sumType, + sums.hwMissHt(), + 0, + sums.hwMissHtPhi(), + 0); + case l1t::EtSum::kMissingEtHF: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwMissEtHF()), 0., demux::fPhi(sums.hwMissEtHFPhi()), 0.), + sumType, + sums.hwMissEtHF(), + 0, + sums.hwMissEtHFPhi(), + 0); + case l1t::EtSum::kMissingHtHF: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwMissHtHF()), 0., demux::fPhi(sums.hwMissHtHFPhi()), 0.), + sumType, + sums.hwMissHtHF(), + 0, + sums.hwMissHtHFPhi(), + 0); + case l1t::EtSum::kAsymEt: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwAsymEt()), 0., 0., 0.), sumType, sums.hwAsymEt(), 0, 0, 0); + case l1t::EtSum::kAsymHt: + return l1t::EtSum( + math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwAsymHt()), 0., 0., 0.), sumType, sums.hwAsymHt(), 0, 0, 0); + case l1t::EtSum::kAsymEtHF: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwAsymEtHF()), 0., 0., 0.), + sumType, + sums.hwAsymEtHF(), + 0, + 0, + 0); + case l1t::EtSum::kAsymHtHF: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(demux::fEt(sums.hwAsymHtHF()), 0., 0., 0.), + sumType, + sums.hwAsymHtHF(), + 0, + 0, + 0); + case l1t::EtSum::kMinBiasHFP0: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), sumType, sums.minBiasHFP0(), 0, 0, 0); + case l1t::EtSum::kMinBiasHFP1: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), sumType, sums.minBiasHFP1(), 0, 0, 0); + case l1t::EtSum::kMinBiasHFM0: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), sumType, sums.minBiasHFM0(), 0, 0, 0); + case l1t::EtSum::kMinBiasHFM1: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), sumType, sums.minBiasHFM1(), 0, 0, 0); + case l1t::EtSum::kCentrality: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), sumType, sums.centrality(), 0, 0, 0); + case l1t::EtSum::kTowerCount: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), sumType, sums.towerCount(), 0, 0, 0); + default: + return l1t::EtSum(math::PtEtaPhiMLorentzVector(0., 0., 0., 0.), l1t::EtSum::kUninitialized, 0, 0, 0, 0); + } + } + +} // namespace l1ScoutingRun3 \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/src/printScObjects.cc b/L1TriggerScouting/Utilities/src/printScObjects.cc new file mode 100644 index 0000000000000..42a9e8e27bb3b --- /dev/null +++ b/L1TriggerScouting/Utilities/src/printScObjects.cc @@ -0,0 +1,71 @@ +#include "L1TriggerScouting/Utilities/interface/printScObjects.h" + +namespace l1ScoutingRun3 { + + void printMuon(const Muon& muon, std::ostream& outs) { + outs << " Pt [GeV/Hw]: " << ugmt::fPt(muon.hwPt()) << "/" << muon.hwPt() << "\n" + << " Eta [rad/Hw]: " << ugmt::fEta(muon.hwEta()) << "/" << muon.hwEta() << "\n" + << " Phi [rad/Hw]: " << ugmt::fPhi(muon.hwPhi()) << "/" << muon.hwPhi() << "\n" + << " Charge/valid: " << muon.hwCharge() << "/" << muon.hwChargeValid() << "\n" + << " PhiVtx [rad/Hw]: " << ugmt::fPhiAtVtx(muon.hwPhiAtVtx()) << "/" << muon.hwPhiAtVtx() << "\n" + << " EtaVtx [rad/Hw]: " << ugmt::fEtaAtVtx(muon.hwEtaAtVtx()) << "/" << muon.hwEtaAtVtx() << "\n" + << " Pt uncon[GeV/Hw]: " << ugmt::fPtUnconstrained(muon.hwPtUnconstrained()) << "/" + << muon.hwPtUnconstrained() << "\n" + << " Dxy: " << muon.hwDXY() << "\n" + << " Qual: " << muon.hwQual() << "\n" + << " TF index: " << muon.tfMuonIndex() << "\n"; + } + + template + void printCaloObject(const T& obj, std::ostream& outs) { + outs << " Et [GeV/Hw]: " << demux::fEt(obj.hwEt()) << "/" << obj.hwEt() << "\n" + << " Eta [rad/Hw]: " << demux::fEta(obj.hwEta()) << "/" << obj.hwEta() << "\n" + << " Phi [rad/Hw]: " << demux::fPhi(obj.hwPhi()) << "/" << obj.hwPhi() << "\n" + << " Iso [Hw]: " << obj.hwIso() << "\n"; + } + + void printJet(const Jet& jet, std::ostream& outs) { printCaloObject(jet, outs); } + void printEGamma(const EGamma& eGamma, std::ostream& outs) { printCaloObject(eGamma, outs); } + void printTau(const Tau& tau, std::ostream& outs) { printCaloObject(tau, outs); } + + void printBxSums(const BxSums& sums, std::ostream& outs) { + outs << "Total ET\n" + << " Et [GeV/Hw]: " << demux::fEt(sums.hwTotalEt()) << "/" << sums.hwTotalEt() << "\n" + << "Total ETEm\n" + << " Et [GeV/Hw]: " << demux::fEt(sums.hwTotalEtEm()) << "/" << sums.hwTotalEtEm() << "\n" + << "Total HT\n" + << " Et [GeV/Hw]: " << demux::fEt(sums.hwTotalHt()) << "/" << sums.hwTotalHt() << "\n" + << "Missing ET\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwMissEt()) << "/" << sums.hwMissEt() << "\n" + << " Phi [Rad/Hw]: " << demux::fPhi(sums.hwMissEtPhi()) << "/" << sums.hwMissEtPhi() << "\n" + << "Missing HT\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwMissHt()) << "/" << sums.hwMissHt() << "\n" + << " Phi [Rad/Hw]: " << demux::fPhi(sums.hwMissHtPhi()) << "/" << sums.hwMissHtPhi() << "\n" + << "Missing ETHF\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwMissEtHF()) << "/" << sums.hwMissEtHF() << "\n" + << " Phi [Rad/Hw]: " << demux::fPhi(sums.hwMissEtHFPhi()) << "/" << sums.hwMissEtHFPhi() << "\n" + << "Missing HTHF\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwMissHtHF()) << "/" << sums.hwMissHtHF() << "\n" + << " Phi [Rad/Hw]: " << demux::fPhi(sums.hwMissHtHFPhi()) << "/" << sums.hwMissHtHFPhi() << "\n" + << "AsymEt\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwAsymEt()) << "/" << sums.hwAsymEt() << "\n" + << "AsymHt\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwAsymHt()) << "/" << sums.hwAsymHt() << "\n" + << "AsymEtHF\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwAsymEtHF()) << "/" << sums.hwAsymEtHF() << "\n" + << "AsymHtHF\n" + << " Et [GeV/Hw] : " << demux::fEt(sums.hwAsymHtHF()) << "/" << sums.hwAsymHtHF() << "\n" + << "MinBiasHFP0\n" + << " Hw: " << sums.minBiasHFP0() << "\n" + << "MinBiasHFM0\n" + << " Hw: " << sums.minBiasHFM0() << "\n" + << "MinBiasHFP1\n" + << " Hw: " << sums.minBiasHFP1() << "\n" + << "MinBiasHFM1\n" + << " Hw: " << sums.minBiasHFM1() << "\n" + << "Centrality\n" + << " Hw: " << sums.centrality() << "\n" + << "Tower Count\n" + << " Hw: " << sums.towerCount() << "\n"; + } +} // namespace l1ScoutingRun3 \ No newline at end of file diff --git a/L1TriggerScouting/Utilities/test/dumpScObjects.py b/L1TriggerScouting/Utilities/test/dumpScObjects.py new file mode 100644 index 0000000000000..957ac3d77e7a2 --- /dev/null +++ b/L1TriggerScouting/Utilities/test/dumpScObjects.py @@ -0,0 +1,54 @@ +import FWCore.ParameterSet.Config as cms +import FWCore.ParameterSet.VarParsing as VarParsing + +options = VarParsing.VarParsing ('analysis') + +options.register ('numOrbits', + -1, + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.int, + "Number of orbits to process") + +options.register ('filePath', + "file:/dev/shm/PoolOutputTest.root", + VarParsing.VarParsing.multiplicity.singleton, + VarParsing.VarParsing.varType.string, + "Sub lumisection number to process") + +options.parseArguments() + +process = cms.Process( "DUMP" ) + + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(options.numOrbits) +) + +process.load("FWCore.MessageService.MessageLogger_cfi") + +process.source = cms.Source("PoolSource", + fileNames = cms.untracked.vstring(options.filePath) +) + +process.dump = cms.EDAnalyzer("DumpScObjects", + gmtMuonsTag = cms.InputTag("GmtUnpacker", "", "SCPU"), + caloJetsTag = cms.InputTag("CaloUnpacker", "", "SCPU"), + caloEGammasTag = cms.InputTag("CaloUnpacker", "", "SCPU"), + caloTausTag = cms.InputTag("CaloUnpacker", "", "SCPU"), + caloEtSumsTag = cms.InputTag("CaloUnpacker", "", "SCPU"), + minBx = cms.untracked.uint32(0), + maxBx = cms.untracked.uint32(3564), + + skipEmptyBx = cms.untracked.bool(True), # don't show empty BX + + #checkMuons = cms.untracked.bool(False), # test removing a collection + + searchEvent = cms.untracked.bool(True), + orbitNumber = cms.untracked.uint32(88981531), + searchStartBx = cms.untracked.uint32(1027-2), + searchStopBx = cms.untracked.uint32(1027+2), +) + +process.p = cms.Path( + process.dump +) \ No newline at end of file diff --git a/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducer.cc b/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducer.cc index 2af04cc18dc03..886a72515be46 100644 --- a/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducer.cc +++ b/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducer.cc @@ -37,8 +37,6 @@ namespace citk { public: PFIsolationSumProducer(const edm::ParameterSet&); - ~PFIsolationSumProducer() override {} - void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) final; void produce(edm::Event&, const edm::EventSetup&) final; diff --git a/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc b/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc index 815977dab6177..db9732eb9a8ba 100644 --- a/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc +++ b/PhysicsTools/IsolationAlgos/plugins/CITKPFIsolationSumProducerForPUPPI.cc @@ -27,8 +27,6 @@ namespace citk { public: PFIsolationSumProducerForPUPPI(const edm::ParameterSet&); - ~PFIsolationSumProducerForPUPPI() override {} - void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) final; void produce(edm::Event&, const edm::EventSetup&) final; diff --git a/PhysicsTools/JetMCAlgos/plugins/ttHFGenFilter.cc b/PhysicsTools/JetMCAlgos/plugins/ttHFGenFilter.cc index 7e86bfaf25a40..d98f1c1314615 100644 --- a/PhysicsTools/JetMCAlgos/plugins/ttHFGenFilter.cc +++ b/PhysicsTools/JetMCAlgos/plugins/ttHFGenFilter.cc @@ -44,14 +44,11 @@ class ttHFGenFilter : public edm::stream::EDFilter<> { public: explicit ttHFGenFilter(const edm::ParameterSet&); - ~ttHFGenFilter() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; bool filter(edm::Event&, const edm::EventSetup&) override; - void endStream() override; virtual bool HasAdditionalBHadron(const std::vector&, const std::vector&, @@ -100,11 +97,6 @@ ttHFGenFilter::ttHFGenFilter(const edm::ParameterSet& iConfig) produces(); } -ttHFGenFilter::~ttHFGenFilter() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -260,44 +252,6 @@ void ttHFGenFilter::FindAllTopMothers(const reco::Candidate* particle, } } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void ttHFGenFilter::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void ttHFGenFilter::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -ttHFGenFilter::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -ttHFGenFilter::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -ttHFGenFilter::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -ttHFGenFilter::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void ttHFGenFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.cc b/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.cc index eeec3a7315009..da4ed564b245a 100644 --- a/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.cc +++ b/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.cc @@ -54,11 +54,6 @@ NanoAODBaseCrossCleaner::NanoAODBaseCrossCleaner(const edm::ParameterSet& params produces("photons"); } -NanoAODBaseCrossCleaner::~NanoAODBaseCrossCleaner() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -130,12 +125,6 @@ void NanoAODBaseCrossCleaner::produce(edm::Event& iEvent, const edm::EventSetup& iEvent.put(std::move(lowPtElectronsTable), "lowPtElectrons"); } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void NanoAODBaseCrossCleaner::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void NanoAODBaseCrossCleaner::endStream() {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void NanoAODBaseCrossCleaner::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; diff --git a/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.h b/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.h index 849218af1a95f..5c628db0c8e55 100644 --- a/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.h +++ b/PhysicsTools/NanoAOD/plugins/NanoAODBaseCrossCleaner.h @@ -48,14 +48,11 @@ class NanoAODBaseCrossCleaner : public edm::stream::EDProducer<> { public: explicit NanoAODBaseCrossCleaner(const edm::ParameterSet&); - ~NanoAODBaseCrossCleaner() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; virtual void objectSelection(const edm::View& jets, const edm::View& muons, const edm::View& eles, @@ -67,11 +64,6 @@ class NanoAODBaseCrossCleaner : public edm::stream::EDProducer<> { std::vector& tauBits, std::vector& photonBits){}; - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- const std::string name_; const std::string doc_; diff --git a/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc b/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc index e79ecf40450c8..e728fcea73d2f 100644 --- a/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc +++ b/PhysicsTools/NanoAOD/plugins/VertexTableProducer.cc @@ -41,6 +41,9 @@ #include "RecoVertex/VertexPrimitives/interface/VertexState.h" #include "DataFormats/Common/interface/ValueMap.h" +#include "DataFormats/PatCandidates/interface/PackedCandidate.h" +#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" + // // class declaration // @@ -48,23 +51,16 @@ class VertexTableProducer : public edm::stream::EDProducer<> { public: explicit VertexTableProducer(const edm::ParameterSet&); - ~VertexTableProducer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- const edm::EDGetTokenT> pvs_; + const edm::EDGetTokenT pfc_; const edm::EDGetTokenT> pvsScore_; const edm::EDGetTokenT> svs_; const StringCutObjectSelector svCut_; @@ -81,6 +77,7 @@ class VertexTableProducer : public edm::stream::EDProducer<> { // VertexTableProducer::VertexTableProducer(const edm::ParameterSet& params) : pvs_(consumes>(params.getParameter("pvSrc"))), + pfc_(consumes(params.getParameter("pfcSrc"))), pvsScore_(consumes>(params.getParameter("pvSrc"))), svs_(consumes>(params.getParameter("svSrc"))), svCut_(params.getParameter("svCut"), true), @@ -99,11 +96,6 @@ VertexTableProducer::VertexTableProducer(const edm::ParameterSet& params) produces>(); } -VertexTableProducer::~VertexTableProducer() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -115,6 +107,9 @@ void VertexTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe const auto& pvsScoreProd = iEvent.get(pvsScore_); auto pvsIn = iEvent.getHandle(pvs_); + //pf candidates collection + auto pfcIn = iEvent.getHandle(pfc_); + auto pvTable = std::make_unique(1, pvName_, true); pvTable->addColumnValue("ndof", (*pvsIn)[0].ndof(), "main primary vertex number of degree of freedom", 8); pvTable->addColumnValue("x", (*pvsIn)[0].position().x(), "main primary vertex position x coordinate", 10); @@ -131,6 +126,31 @@ void VertexTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe pvTable->addColumnValue( "score", pvsScoreProd.get(pvsIn.id(), 0), "main primary vertex score, i.e. sum pt2 of clustered objects", 8); + float pv_sumpt2 = 0.0; + for (const auto& obj : *pfcIn) { + if (obj.charge() == 0) { + continue; + } // skip neutrals + double dz = fabs(obj.dz((*pvsIn)[0].position())); + bool include_pfc = false; + if (dz < 0.2) { + include_pfc = true; + for (size_t j = 1; j < (*pvsIn).size(); j++) { + double newdz = fabs(obj.dz((*pvsIn)[j].position())); + if (newdz < dz) { + include_pfc = false; + break; + } + } // this pf candidate belongs to other PV + } + if (include_pfc) { + float pfc_pt = obj.pt(); + pv_sumpt2 += pfc_pt * pfc_pt; + } + } + pvTable->addColumnValue( + "sumpt2", pv_sumpt2, "sum pt2 of pf charged candidates for the main primary vertex", 10); + auto otherPVsTable = std::make_unique((*pvsIn).size() > 4 ? 3 : (*pvsIn).size() - 1, "Other" + pvName_, false); std::vector pvsz; @@ -195,18 +215,13 @@ void VertexTableProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSe iEvent.put(std::move(selCandSv)); } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void VertexTableProducer::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void VertexTableProducer::endStream() {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void VertexTableProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("pvSrc")->setComment( "std::vector and ValueMap primary vertex input collections"); + desc.add("pfcSrc")->setComment("packedPFCandidates input collections"); desc.add("goodPvCut")->setComment("selection on the primary vertex"); desc.add("svSrc")->setComment( "reco::VertexCompositePtrCandidate compatible secondary vertex input collection"); diff --git a/PhysicsTools/NanoAOD/python/electrons_cff.py b/PhysicsTools/NanoAOD/python/electrons_cff.py index 9168c9d3643a3..8edf323f5fec8 100644 --- a/PhysicsTools/NanoAOD/python/electrons_cff.py +++ b/PhysicsTools/NanoAOD/python/electrons_cff.py @@ -12,6 +12,7 @@ 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer16UL_ID_ISO_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer17UL_ID_ISO_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer18UL_ID_ISO_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff', # Fall17: need to include the modules too to make sure they are run 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Fall17_94X_V2_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V2_cff', @@ -155,7 +156,7 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): mvaNoIso_Fall17V2 = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV2Values"), mvaIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22IsoV1Values"), mvaNoIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1Values"), - mvaHZZIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Summer18ULIdIsoValues"), + mvaHZZIso = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Winter22HZZV1Values"), miniIsoChg = cms.InputTag("isoForEle:miniIsoChg"), miniIsoAll = cms.InputTag("isoForEle:miniIsoAll"), @@ -184,7 +185,8 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): mvaNoIso_Fall17V2_WPL = cms.InputTag("egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wpLoose"), mvaNoIso_WP90 = cms.InputTag("egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp90"), mvaNoIso_WP80 = cms.InputTag("egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp80"), - + mvaIso_WPHZZ = cms.InputTag("egmGsfElectronIDs:mvaEleID-Winter22-HZZ-V1"), + cutBasedID_veto = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-veto"), cutBasedID_loose = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-loose"), cutBasedID_medium = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-RunIIIWinter22-V1-medium"), @@ -217,6 +219,7 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): PFIsoAll = None, PFIsoAll04 = None).\ toModify(slimmedElectronsWithUserData.userIntFromBools, + mvaIso_WPHZZ = None, mvaIso_WP90 = None, mvaIso_WP80 = None, mvaNoIso_WP90 = None, @@ -329,6 +332,7 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): mvaNoIso_WP80 = Var("userInt('mvaNoIso_WP80')",bool,doc="MVA noIso ID WP80, Winter22V1"), mvaNoIso_WP90 = Var("userInt('mvaNoIso_WP90')",bool,doc="MVA noIso ID WP90, Winter22V1"), mvaHZZIso = Var("userFloat('mvaHZZIso')", float,doc="HZZ MVA Iso ID score"), + mvaIso_WPHZZ = Var("userInt('mvaIso_WPHZZ')",bool,doc="MVA Iso ID WPHZZ, Winter22V1"), cutBased = Var("userInt('cutBasedID_veto')+userInt('cutBasedID_loose')+userInt('cutBasedID_medium')+userInt('cutBasedID_tight')", "uint8", doc="cut-based ID RunIII Winter22 (0:fail, 1:veto, 2:loose, 3:medium, 4:tight)"), vidNestedWPBitmap = Var("userInt('VIDNestedWPBitmap')", int, doc=_bitmapVIDForEle_docstring), @@ -378,6 +382,7 @@ def _get_bitmapVIDForEle_docstring(modules,WorkingPoints): mvaIso_WPL = Var("userInt('mvaIso_Fall17V2_WPL')",bool,doc="MVA Iso ID loose WP, Fall17V2"), mvaNoIso = Var("userFloat('mvaNoIso_Fall17V2')",float,doc="MVA noIso ID score, Fall17V2"), mvaNoIso_WP80 = Var("userInt('mvaNoIso_Fall17V2_WP80')",bool,doc="MVA noIso ID WP80, Fall17V2"), + mvaIso_WPHZZ = None, mvaNoIso_WP90 = Var("userInt('mvaNoIso_Fall17V2_WP90')",bool,doc="MVA noIso ID WP90, Fall17V2"), mvaNoIso_WPL = Var("userInt('mvaNoIso_Fall17V2_WPL')",bool,doc="MVA noIso ID loose WP, Fall17V2"), cutBased = Var("userInt('cutBasedID_Fall17V2_veto')+userInt('cutBasedID_Fall17V2_loose')+userInt('cutBasedID_Fall17V2_medium')+userInt('cutBasedID_Fall17V2_tight')", "uint8", doc="cut-based ID Fall17V2 (0:fail, 1:veto, 2:loose, 3:medium, 4:tight)"), diff --git a/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py b/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py index eafbca1c54059..49818f80bd811 100644 --- a/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py +++ b/PhysicsTools/NanoAOD/python/jetsAK4_CHS_cff.py @@ -36,14 +36,14 @@ ) tightJetId = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( - version = cms.string('RUN3WINTER22CHS'), + version = cms.string('RUN3CHSruns2022FGruns2023CD'), quality = cms.string('TIGHT'), ), src = cms.InputTag("updatedJets") ) tightJetIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( - version = cms.string('RUN3WINTER22CHS'), + version = cms.string('RUN3CHSruns2022FGruns2023CD'), quality = cms.string('TIGHTLEPVETO'), ), src = cms.InputTag("updatedJets") @@ -61,9 +61,9 @@ ) run3_jme_Winter22runsBCDEprompt.toModify( - tightJetId.filterParams, version = "RUN3WINTER22CHSrunsBCDEprompt" + tightJetId.filterParams, version = "RUN3CHSruns2022BCDEprompt" ).toModify( - tightJetIdLepVeto.filterParams, version = "RUN3WINTER22CHSrunsBCDEprompt" + tightJetIdLepVeto.filterParams, version = "RUN3CHSruns2022BCDEprompt" ) bJetVars = cms.EDProducer("JetRegressionVarProducer", diff --git a/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py b/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py index f3eac030aa776..9ca6530aea4d3 100644 --- a/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py +++ b/PhysicsTools/NanoAOD/python/jetsAK4_Puppi_cff.py @@ -28,14 +28,14 @@ tightJetPuppiId = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( - version = cms.string('RUN3WINTER22PUPPI'), + version = cms.string('RUN3PUPPIruns2022FGruns2023CD'), quality = cms.string('TIGHT'), ), src = cms.InputTag("updatedJetsPuppi") ) tightJetPuppiIdLepVeto = cms.EDProducer("PatJetIDValueMapProducer", filterParams=cms.PSet( - version = cms.string('RUN3WINTER22PUPPI'), + version = cms.string('RUN3PUPPIruns2022FGruns2023CD'), quality = cms.string('TIGHTLEPVETO'), ), src = cms.InputTag("updatedJetsPuppi") @@ -54,9 +54,9 @@ ) run3_jme_Winter22runsBCDEprompt.toModify( - tightJetPuppiId.filterParams, version = "RUN3WINTER22PUPPIrunsBCDEprompt" + tightJetPuppiId.filterParams, version = "RUN3PUPPIruns2022BCDEprompt" ).toModify( - tightJetPuppiIdLepVeto.filterParams, version = "RUN3WINTER22PUPPIrunsBCDEprompt" + tightJetPuppiIdLepVeto.filterParams, version = "RUN3PUPPIruns2022BCDEprompt" ) #HF shower shape recomputation diff --git a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py index 83a27f46e23da..e9c62ca3102ce 100644 --- a/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py +++ b/PhysicsTools/NanoAOD/python/nanoDQM_cfi.py @@ -106,6 +106,8 @@ Plot1D('mvaNoIso_Fall17V2_WP80', 'mvaNoIso_Fall17V2_WP80', 2, -0.5, 1.5, 'MVA noIso ID WP80, Fall17V2'), Plot1D('mvaNoIso_Fall17V2_WP90', 'mvaNoIso_Fall17V2_WP90', 2, -0.5, 1.5, 'MVA noIso ID WP90, Fall17V2'), Plot1D('mvaNoIso_Fall17V2_WPL', 'mvaNoIso_Fall17V2_WPL', 2, -0.5, 1.5, 'MVA noIso ID loose WP, Fall17V2'), + Plot1D('mvaHZZIso', 'mvaHZZIso', 20, -1, 1, 'HZZ MVA Iso ID score'), + Plot1D('mvaIso_WPHZZ', 'mvaIso_WPHZZ', 2, -0.5, 1.5, 'MVA Iso ID WPHZZ, Winter22V1'), Plot1D('mvaTTH', 'mvaTTH', 20, -1, 1, 'TTH MVA lepton ID score'), Plot1D('pdgId', 'pdgId', 27, -13.5, 13.5, 'PDG code assigned by the event reconstruction (not by MC truth)'), Plot1D('miniPFRelIso_all', 'miniPFRelIso_all', 20, 0, 1, 'mini PF relative isolation, total (with scaled rho*EA PU corrections)'), @@ -622,6 +624,7 @@ Plot1D('npvs', 'npvs', 20, 0, 60, 'total number of reconstructed primary vertices'), Plot1D('npvsGood', 'npvsGood', 20, 0, 60, 'total number of Good primary vertices'), Plot1D('score', 'score', 20, 0, 300000, 'main primary vertex score, i.e. sum pt2 of clustered objects'), + Plot1D('sumpt2', 'sumpt2', 100, 0, 300000, 'main primary vertex sum pt2 of the charged pf candidates'), Plot1D('x', 'x', 20, -0.3, 0.3, 'main primary vertex position x coordinate'), Plot1D('y', 'y', 20, -0.3, 0.3, 'main primary vertex position y coordinate'), Plot1D('z', 'z', 20, -20, 20, 'main primary vertex position z coordinate'), diff --git a/PhysicsTools/NanoAOD/python/vertices_cff.py b/PhysicsTools/NanoAOD/python/vertices_cff.py index ddda0ba422c1e..69d105795d25d 100644 --- a/PhysicsTools/NanoAOD/python/vertices_cff.py +++ b/PhysicsTools/NanoAOD/python/vertices_cff.py @@ -10,6 +10,7 @@ vertexTable = cms.EDProducer("VertexTableProducer", pvSrc = cms.InputTag("offlineSlimmedPrimaryVertices"), goodPvCut = cms.string("!isFake && ndof > 4 && abs(z) <= 24 && position.Rho <= 2"), + pfcSrc = cms.InputTag("packedPFCandidates"), svSrc = cms.InputTag("linkedObjects", "vertices"), svCut = cms.string(""), # careful: adding a cut here would make the collection matching inconsistent with the SV table dlenMin = cms.double(0), diff --git a/PhysicsTools/NanoAOD/scripts/haddnano.py b/PhysicsTools/NanoAOD/scripts/haddnano.py index 1b7ce9831d4e6..ee8c3dec9d166 100755 --- a/PhysicsTools/NanoAOD/scripts/haddnano.py +++ b/PhysicsTools/NanoAOD/scripts/haddnano.py @@ -32,7 +32,7 @@ def zeroFill(tree, brName, brObj, allowNonBool=False): fileHandles = [] goFast = True for fn in files: - print("Adding file" + str(fn)) + print("Adding file", str(fn)) fileHandles.append(ROOT.TFile.Open(fn)) if fileHandles[-1].GetCompressionSettings() != fileHandles[0].GetCompressionSettings(): goFast = False @@ -44,7 +44,7 @@ def zeroFill(tree, brName, brObj, allowNonBool=False): for e in fileHandles[0].GetListOfKeys(): name = e.GetName() - print("Merging" + str(name)) + print("Merging", str(name)) obj = e.ReadObj() cl = ROOT.TClass.GetClass(e.GetClassName()) inputs = ROOT.TList() @@ -53,7 +53,18 @@ def zeroFill(tree, brName, brObj, allowNonBool=False): obj = obj.CloneTree(-1, "fast" if goFast else "") branchNames = set([x.GetName() for x in obj.GetListOfBranches()]) for fh in fileHandles[1:]: + if isTree and obj.GetName() == 'Events' and obj.GetEntries() == 0 : + # Zero-events first file. Skip to avoid messing up branches. + print(" 'Events' tree contsins no events; skipping") + obj = fh.GetListOfKeys().FindObject(name).ReadObj() + obj = obj.CloneTree(-1, "fast" if goFast else "") + branchNames = set([x.GetName() for x in obj.GetListOfBranches()]) + continue otherObj = fh.GetListOfKeys().FindObject(name).ReadObj() + if isTree and obj.GetName() == 'Events' and otherObj.GetEntries() == 0 : + # Zero-events file; skip + print(" 'Events' tree contains no events; skipping") + continue inputs.Add(otherObj) if isTree and obj.GetName() == 'Events': otherObj.SetAutoFlush(0) @@ -61,7 +72,7 @@ def zeroFill(tree, brName, brObj, allowNonBool=False): for x in otherObj.GetListOfBranches()]) missingBranches = list(branchNames - otherBranches) additionalBranches = list(otherBranches - branchNames) - print("missing: " + str(missingBranches) + "\n Additional:" + str(additionalBranches)) + print("missing: " + str(missingBranches) + "\n Additional: " + str(additionalBranches)) for br in missingBranches: # fill "Other" zeroFill(otherObj, br, obj.GetListOfBranches().FindObject(br)) @@ -76,7 +87,7 @@ def zeroFill(tree, brName, brObj, allowNonBool=False): for x in otherObj.GetListOfBranches()]) missingBranches = list(branchNames - otherBranches) additionalBranches = list(otherBranches - branchNames) - print("missing: " + str(missingBranches) + "\n Additional:" + str(additionalBranches)) + print("missing: " + str(missingBranches) + "\n Additional: " + str(additionalBranches)) for br in missingBranches: # fill "Other" zeroFill(otherObj, br, obj.GetListOfBranches( diff --git a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc index 02fee8eabc1dc..e605623065902 100644 --- a/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATElectronSlimmer.cc @@ -26,10 +26,8 @@ namespace pat { class PATElectronSlimmer : public edm::stream::EDProducer<> { public: explicit PATElectronSlimmer(const edm::ParameterSet& iConfig); - ~PATElectronSlimmer() override {} void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) final; - void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) final; private: const edm::EDGetTokenT> src_; @@ -91,8 +89,6 @@ pat::PATElectronSlimmer::PATElectronSlimmer(const edm::ParameterSet& iConfig) produces>(); } -void pat::PATElectronSlimmer::beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup& iSetup) {} - void pat::PATElectronSlimmer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; using namespace std; diff --git a/PhysicsTools/PatAlgos/plugins/PATObjectCrossLinker.cc b/PhysicsTools/PatAlgos/plugins/PATObjectCrossLinker.cc index ef790ad65c14f..eaacd778eaa12 100644 --- a/PhysicsTools/PatAlgos/plugins/PATObjectCrossLinker.cc +++ b/PhysicsTools/PatAlgos/plugins/PATObjectCrossLinker.cc @@ -46,14 +46,11 @@ class PATObjectCrossLinker : public edm::stream::EDProducer<> { public: explicit PATObjectCrossLinker(const edm::ParameterSet&); - ~PATObjectCrossLinker() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; template void matchOneToMany(const C1& refProdOne, @@ -85,11 +82,6 @@ class PATObjectCrossLinker : public edm::stream::EDProducer<> { template void matchVertexToMany(const C1& refProdVtx, C2& itemsVtx, const std::string& nameVtx, C3& itemsMany); - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- const edm::EDGetTokenT> jets_; const edm::EDGetTokenT> muons_; @@ -135,11 +127,6 @@ PATObjectCrossLinker::PATObjectCrossLinker(const edm::ParameterSet& params) } } -PATObjectCrossLinker::~PATObjectCrossLinker() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -369,12 +356,6 @@ void PATObjectCrossLinker::produce(edm::Event& iEvent, const edm::EventSetup& iS iEvent.put(std::move(vertices), "vertices"); } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void PATObjectCrossLinker::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void PATObjectCrossLinker::endStream() {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void PATObjectCrossLinker::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; diff --git a/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc b/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc index 997405760ed77..677ff575cc4e0 100644 --- a/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc +++ b/PhysicsTools/PatAlgos/plugins/PATPhotonSlimmer.cc @@ -28,10 +28,8 @@ namespace pat { class PATPhotonSlimmer : public edm::stream::EDProducer<> { public: explicit PATPhotonSlimmer(const edm::ParameterSet& iConfig); - ~PATPhotonSlimmer() override {} void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; - void beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup&) final; private: const edm::EDGetTokenT> src_; @@ -86,8 +84,6 @@ pat::PATPhotonSlimmer::PATPhotonSlimmer(const edm::ParameterSet& iConfig) produces>(); } -void pat::PATPhotonSlimmer::beginLuminosityBlock(const edm::LuminosityBlock&, const edm::EventSetup& iSetup) {} - void pat::PATPhotonSlimmer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { using namespace edm; using namespace std; diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 152e545547686..360e6e4160f1f 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -307,7 +307,8 @@ def _add_deepFlavour(process): 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer17UL_ID_ISO_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Summer18UL_ID_ISO_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff', - 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff' + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff' ] switchOnVIDElectronIdProducer(process,DataFormat.MiniAOD, task) process.egmGsfElectronIDs.physicsObjectSrc = cms.InputTag("reducedEgamma","reducedGedGsfElectrons") diff --git a/PhysicsTools/PythonAnalysis/test/BuildFile.xml b/PhysicsTools/PythonAnalysis/test/BuildFile.xml index 0c04ef39142f7..ca00df05a0690 100644 --- a/PhysicsTools/PythonAnalysis/test/BuildFile.xml +++ b/PhysicsTools/PythonAnalysis/test/BuildFile.xml @@ -129,3 +129,12 @@ + + + + + + + + + diff --git a/PhysicsTools/PythonAnalysis/test/testTorch.cc b/PhysicsTools/PythonAnalysis/test/testTorch.cc new file mode 100644 index 0000000000000..ae38f0f790393 --- /dev/null +++ b/PhysicsTools/PythonAnalysis/test/testTorch.cc @@ -0,0 +1,64 @@ +// Based on https://github.com/Maverobot/libtorch_examples/blob/master/src/simple_optimization_example.cpp +#include +#include +#include + +constexpr double kLearningRate = 0.001; +constexpr int kMaxIterations = 100000; + +void native_run(double minimal) { + // Initial x value + auto x = torch::randn({1, 1}, torch::requires_grad(true)); + + for (size_t t = 0; t < kMaxIterations; t++) { + // Expression/value to be minimized + auto y = (x - minimal) * (x - minimal); + if (y.item() < 1e-3) { + break; + } + // Calculate gradient + y.backward(); + + // Step x value without considering gradient + torch::NoGradGuard no_grad_guard; + x -= kLearningRate * x.grad(); + + // Reset the gradient of variable x + x.mutable_grad().reset(); + } + + std::cout << "[native] Actual minimal x value: " << minimal << ", calculated optimal x value: " << x.item() + << std::endl; +} + +void optimizer_run(double minimal) { + // Initial x value + std::vector x; + x.push_back(torch::randn({1, 1}, torch::requires_grad(true))); + auto opt = torch::optim::SGD(x, torch::optim::SGDOptions(kLearningRate)); + + for (size_t t = 0; t < kMaxIterations; t++) { + // Expression/value to be minimized + auto y = (x[0] - minimal) * (x[0] - minimal); + if (y.item() < 1e-3) { + break; + } + // Calculate gradient + y.backward(); + + // Step x value without considering gradient + opt.step(); + // Reset the gradient of variable x + opt.zero_grad(); + } + + std::cout << "[optimizer] Actual minimal x value: " << minimal + << ", calculated optimal x value: " << x[0].item() << std::endl; +} + +// optimize y = (x - 10)^2 +int main(int argc, char* argv[]) { + native_run(0.01); + optimizer_run(0.01); + return 0; +} diff --git a/PhysicsTools/PythonAnalysis/test/time_serie_prediction.cpp b/PhysicsTools/PythonAnalysis/test/time_serie_prediction.cpp new file mode 100644 index 0000000000000..efe4b7fb6c1ea --- /dev/null +++ b/PhysicsTools/PythonAnalysis/test/time_serie_prediction.cpp @@ -0,0 +1,32 @@ +#include +#include + +struct Net : torch::nn::Module { + Net(int64_t N, int64_t M) : linear(register_module("linear", torch::nn::Linear(N, M))) { + another_bias = register_parameter("b", torch::randn(M)); + } + torch::Tensor forward(torch::Tensor input) { return linear(input) + another_bias; } + torch::nn::Linear linear; + torch::Tensor another_bias; +}; + +int main(int /*argc*/, char* /*argv*/[]) { + // Use GPU when present, CPU otherwise. + Net net(4, 5); + + torch::Device device(torch::kCPU); + if (torch::cuda::is_available()) { + device = torch::Device(torch::kCUDA); + std::cout << "CUDA is available! Training on GPU." << std::endl; + } + + net.to(device); + + for (const auto& pair : net.named_parameters()) { + std::cout << pair.key() << ": " << pair.value() << std::endl; + } + + std::cout << net.forward(torch::ones({2, 4})) << std::endl; + + return 0; +} diff --git a/PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h b/PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h index a97f0c9d7c88f..039625b269f5e 100644 --- a/PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h +++ b/PhysicsTools/SelectorUtils/interface/PFJetIDSelectionFunctor.h @@ -37,10 +37,10 @@ class PFJetIDSelectionFunctor : public Selector { SUMMER18PUPPI, RUN2UL16CHS, RUN2UL16PUPPI, - RUN3WINTER22CHSrunsBCDEprompt, - RUN3WINTER22PUPPIrunsBCDEprompt, - RUN3WINTER22CHS, - RUN3WINTER22PUPPI, + RUN3CHSrunsBCDEprompt, + RUN3PUPPIrunsBCDEprompt, + RUN3CHSruns2022FGruns2023CD, + RUN3PUPPIruns2022FGruns2023CD, RUN2ULCHS, RUN2ULPUPPI, N_VERSIONS @@ -80,16 +80,17 @@ class PFJetIDSelectionFunctor : public Selector { version_ = RUN2ULCHS; else if (versionStr == "RUN2ULPUPPI") version_ = RUN2ULPUPPI; - else if (versionStr == "RUN3WINTER22CHSrunsBCDEprompt") - version_ = RUN3WINTER22CHSrunsBCDEprompt; - else if (versionStr == "RUN3WINTER22PUPPIrunsBCDEprompt") - version_ = RUN3WINTER22PUPPIrunsBCDEprompt; - else if (versionStr == "RUN3WINTER22CHS") - version_ = RUN3WINTER22CHS; - else if (versionStr == "RUN3WINTER22PUPPI") - version_ = RUN3WINTER22PUPPI; + else if (versionStr == "RUN3CHSrunsBCDEprompt") + version_ = RUN3CHSrunsBCDEprompt; + else if (versionStr == "RUN3PUPPIrunsBCDEprompt") + version_ = RUN3PUPPIrunsBCDEprompt; + else if (versionStr == "RUN3CHSruns2022FGruns2023CD") + version_ = RUN3CHSruns2022FGruns2023CD; + else if (versionStr == "RUN3PUPPIruns2022FGruns2023CD") + version_ = RUN3PUPPIruns2022FGruns2023CD; else - version_ = RUN3WINTER22PUPPI; //set RUN3WINTER22PUPPI as default //this is extremely unsafe + version_ = + RUN3PUPPIruns2022FGruns2023CD; //set RUN3PUPPIruns2022FGruns2023CD as default //this is extremely unsafe if (qualityStr == "LOOSE") quality_ = LOOSE; @@ -131,22 +132,23 @@ class PFJetIDSelectionFunctor : public Selector { static edm::ParameterSetDescription getDescription() { edm::ParameterSetDescription desc; - desc.ifValue(edm::ParameterDescription("version", "RUN3WINTER22PUPPI", true, edm::Comment("")), - edm::allowedValues("FIRSTDATA", - "RUNIISTARTUP", - "WINTER16", - "WINTER17", - "WINTER17PUPPI", - "SUMMER18", - "SUMMER18PUPPI", - "RUN2UL16CHS", - "RUN2UL16PUPPI", - "RUN2ULCHS", - "RUN2ULPUPPI", - "RUN3WINTER22CHSrunsBCDEprompt", - "RUN3WINTER22PUPPIrunsBCDEprompt", - "RUN3WINTER22CHS", - "RUN3WINTER22PUPPI")); + desc.ifValue( + edm::ParameterDescription("version", "RUN3PUPPIruns2022FGruns2023CD", true, edm::Comment("")), + edm::allowedValues("FIRSTDATA", + "RUNIISTARTUP", + "WINTER16", + "WINTER17", + "WINTER17PUPPI", + "SUMMER18", + "SUMMER18PUPPI", + "RUN2UL16CHS", + "RUN2UL16PUPPI", + "RUN2ULCHS", + "RUN2ULPUPPI", + "RUN3CHSrunsBCDEprompt", + "RUN3PUPPIrunsBCDEprompt", + "RUN3CHSruns2022FGruns2023CD", + "RUN3PUPPIruns2022FGruns2023CD")); desc.ifValue(edm::ParameterDescription("quality", "TIGHT", true, edm::Comment("")), edm::allowedValues("LOOSE", "TIGHT", "TIGHTLEPVETO")); desc.addOptional>("cutsToIgnore")->setComment(""); @@ -211,9 +213,9 @@ class PFJetIDSelectionFunctor : public Selector { bool operator()(const pat::Jet &jet, pat::strbitset &ret) override { if (version_ == FIRSTDATA || version_ == RUNIISTARTUP || version_ == WINTER16 || version_ == WINTER17 || version_ == WINTER17PUPPI || version_ == SUMMER18 || version_ == SUMMER18PUPPI || version_ == RUN2UL16CHS || - version_ == RUN2UL16PUPPI || version_ == RUN3WINTER22CHSrunsBCDEprompt || - version_ == RUN3WINTER22PUPPIrunsBCDEprompt || version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI || - version_ == RUN2ULCHS || version_ == RUN2ULPUPPI) { + version_ == RUN2UL16PUPPI || version_ == RUN3CHSrunsBCDEprompt || version_ == RUN3PUPPIrunsBCDEprompt || + version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD || version_ == RUN2ULCHS || + version_ == RUN2ULPUPPI) { if (jet.currentJECLevel() == "Uncorrected" || !jet.jecSetsAvailable()) return firstDataCuts(jet, ret, version_); else @@ -231,9 +233,9 @@ class PFJetIDSelectionFunctor : public Selector { bool operator()(const reco::PFJet &jet, pat::strbitset &ret) { if (version_ == FIRSTDATA || version_ == RUNIISTARTUP || version_ == WINTER16 || version_ == WINTER17 || version_ == WINTER17PUPPI || version_ == SUMMER18 || version_ == SUMMER18PUPPI || version_ == RUN2UL16CHS || - version_ == RUN2UL16PUPPI || version_ == RUN3WINTER22CHSrunsBCDEprompt || - version_ == RUN3WINTER22PUPPIrunsBCDEprompt || version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI || - version_ == RUN2ULCHS || version_ == RUN2ULPUPPI) { + version_ == RUN2UL16PUPPI || version_ == RUN3CHSrunsBCDEprompt || version_ == RUN3PUPPIrunsBCDEprompt || + version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD || version_ == RUN2ULCHS || + version_ == RUN2ULPUPPI) { return firstDataCuts(jet, ret, version_); } else { return false; @@ -380,13 +382,13 @@ class PFJetIDSelectionFunctor : public Selector { float etaB = 2.4; // Cuts for |eta| < 2.6 for Summer18 if (version_ == SUMMER18 || version_ == SUMMER18PUPPI || version_ == RUN2ULCHS || version_ == RUN2ULPUPPI || - version_ == RUN3WINTER22CHSrunsBCDEprompt || version_ == RUN3WINTER22PUPPIrunsBCDEprompt || - version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI) + version_ == RUN3CHSrunsBCDEprompt || version_ == RUN3PUPPIrunsBCDEprompt || + version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD) etaB = 2.6; if ((version_ != WINTER17 && version_ != WINTER17PUPPI && version_ != SUMMER18 && version_ != SUMMER18PUPPI && - version_ != RUN2UL16CHS && version_ != RUN2UL16PUPPI && version_ != RUN3WINTER22CHSrunsBCDEprompt && - version_ != RUN3WINTER22PUPPIrunsBCDEprompt && version_ != RUN3WINTER22CHS && version_ != RUN3WINTER22PUPPI && - version_ != RUN2ULCHS && version_ != RUN2ULPUPPI) || + version_ != RUN2UL16CHS && version_ != RUN2UL16PUPPI && version_ != RUN3CHSrunsBCDEprompt && + version_ != RUN3PUPPIrunsBCDEprompt && version_ != RUN3CHSruns2022FGruns2023CD && + version_ != RUN3PUPPIruns2022FGruns2023CD && version_ != RUN2ULCHS && version_ != RUN2ULPUPPI) || quality_ != TIGHT) { if (ignoreCut(indexCEF_) || (cef < cut(indexCEF_, double()) || std::abs(jet.eta()) > etaB)) passCut(ret, indexCEF_); @@ -593,8 +595,8 @@ class PFJetIDSelectionFunctor : public Selector { (nneutrals < cut(indexNNeutrals_FW_U_, int()) || std::abs(jet.eta()) <= 3.0)) passCut(ret, indexNNeutrals_FW_U_); - } else if ((version_ == SUMMER18) || (version_ == RUN2ULCHS) || (version_ == RUN3WINTER22CHSrunsBCDEprompt) || - (version_ == RUN3WINTER22CHS)) { + } else if ((version_ == SUMMER18) || (version_ == RUN2ULCHS) || (version_ == RUN3CHSrunsBCDEprompt) || + (version_ == RUN3CHSruns2022FGruns2023CD)) { // Cuts for |eta| <= 2.6 for SUMMER18 scenario if (ignoreCut(indexNConstituents_) || (nconstituents > cut(indexNConstituents_, int()) || std::abs(jet.eta()) > 2.6)) @@ -606,6 +608,8 @@ class PFJetIDSelectionFunctor : public Selector { if (quality_ == TIGHTLEPVETO) { if (ignoreCut(indexMUF_) || (muf < cut(indexMUF_, double()) || std::abs(jet.eta()) > 2.6)) passCut(ret, indexMUF_); + if (ignoreCut(indexCEF_) || (cef < cut(indexCEF_, double()) || std::abs(jet.eta()) > 2.6)) //edw + passCut(ret, indexCEF_); } // Cuts for 2.6 <= |eta| <= 2.7 for SUMMER18 scenario @@ -647,8 +651,8 @@ class PFJetIDSelectionFunctor : public Selector { passCut(ret, indexNNeutrals_FW_); } - else if ((version_ == SUMMER18PUPPI) || (version_ == RUN2ULPUPPI) || - (version_ == RUN3WINTER22PUPPIrunsBCDEprompt) || (version_ == RUN3WINTER22PUPPI)) { + else if ((version_ == SUMMER18PUPPI) || (version_ == RUN2ULPUPPI) || (version_ == RUN3PUPPIrunsBCDEprompt) || + (version_ == RUN3PUPPIruns2022FGruns2023CD)) { // Cuts for |eta| <= 2.6 for SUMMER18PUPPI scenario if (ignoreCut(indexNConstituents_) || (nconstituents > cut(indexNConstituents_, int()) || std::abs(jet.eta()) > 2.6)) @@ -660,6 +664,8 @@ class PFJetIDSelectionFunctor : public Selector { if (quality_ == TIGHTLEPVETO) { if (ignoreCut(indexMUF_) || (muf < cut(indexMUF_, double()) || std::abs(jet.eta()) > 2.6)) passCut(ret, indexMUF_); + if (ignoreCut(indexCEF_) || (cef < cut(indexCEF_, double()) || std::abs(jet.eta()) > 2.6)) //edw + passCut(ret, indexCEF_); } // Cuts for 2.6 <= |eta| <= 2.7 for SUMMER18PUPPI scenario @@ -709,8 +715,8 @@ class PFJetIDSelectionFunctor : public Selector { push_back("NHF"); if ((version_ != WINTER17 && version_ != WINTER17PUPPI && version_ != SUMMER18 && version_ != SUMMER18PUPPI && version_ != RUN2UL16CHS && version_ != RUN2UL16PUPPI && version_ != RUN2ULCHS && version_ != RUN2ULPUPPI && - version_ != RUN3WINTER22CHSrunsBCDEprompt && version_ != RUN3WINTER22PUPPIrunsBCDEprompt && - version_ != RUN3WINTER22CHS && version_ != RUN3WINTER22PUPPI) || + version_ != RUN3CHSrunsBCDEprompt && version_ != RUN3PUPPIrunsBCDEprompt && + version_ != RUN3CHSruns2022FGruns2023CD && version_ != RUN3PUPPIruns2022FGruns2023CD) || quality_ != TIGHT) push_back("CEF"); push_back("NEF"); @@ -775,8 +781,7 @@ class PFJetIDSelectionFunctor : public Selector { push_back("MUF"); } } - if ((version_ == SUMMER18) || (version_ == RUN2ULCHS) || (version_ == RUN3WINTER22CHSrunsBCDEprompt) || - (version_ == RUN3WINTER22CHS)) { + if ((version_ == SUMMER18) || (version_ == RUN2ULCHS)) { push_back("NHF_TR"); push_back("NEF_TR"); push_back("NCH_TR"); @@ -793,8 +798,41 @@ class PFJetIDSelectionFunctor : public Selector { push_back("CEF_TR"); } } - if ((version_ == SUMMER18PUPPI) || (version_ == RUN2ULPUPPI) || (version_ == RUN3WINTER22PUPPIrunsBCDEprompt) || - (version_ == RUN3WINTER22PUPPI)) { + if (version_ == RUN3CHSrunsBCDEprompt) { + push_back("NHF_TR"); + push_back("NEF_TR"); + push_back("NCH_TR"); + push_back("NEF_EC_U"); + push_back("nNeutrals_EC"); + push_back("NEF_FW"); + push_back("NHF_FW"); + push_back("nNeutrals_FW"); + + if (quality_ == TIGHTLEPVETO) { + push_back("CEF"); + push_back("MUF"); + push_back("MUF_TR"); + push_back("CEF_TR"); + } + } + if (version_ == RUN3CHSruns2022FGruns2023CD) { + push_back("NHF_TR"); + push_back("NEF_TR"); + push_back("NCH_TR"); + push_back("NHF_EC"); + push_back("NEF_EC_U"); + push_back("nNeutrals_EC"); + push_back("NEF_FW"); + push_back("nNeutrals_FW"); + + if (quality_ == TIGHTLEPVETO) { + push_back("CEF"); + push_back("MUF"); + push_back("MUF_TR"); + push_back("CEF_TR"); + } + } + if ((version_ == SUMMER18PUPPI) || (version_ == RUN2ULPUPPI)) { push_back("NHF_TR"); push_back("NEF_TR"); push_back("NHF_EC"); @@ -809,11 +847,24 @@ class PFJetIDSelectionFunctor : public Selector { push_back("CEF_TR"); } } + if ((version_ == RUN3PUPPIrunsBCDEprompt) || (version_ == RUN3PUPPIruns2022FGruns2023CD)) { + push_back("NHF_TR"); + push_back("NEF_TR"); + push_back("NHF_EC"); + push_back("NEF_FW"); + push_back("nNeutrals_FW_L"); + if (quality_ == TIGHTLEPVETO) { + push_back("CEF"); + push_back("MUF"); + push_back("MUF_TR"); + push_back("CEF_TR"); + } + } if ((version_ == WINTER17 || version_ == WINTER17PUPPI || version_ == SUMMER18 || version_ == SUMMER18PUPPI || version_ == RUN2UL16CHS || version_ == RUN2UL16PUPPI || version_ == RUN2ULCHS || version_ == RUN2ULPUPPI || - version_ == RUN3WINTER22CHSrunsBCDEprompt || version_ == RUN3WINTER22PUPPIrunsBCDEprompt || - version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI) && + version_ == RUN3CHSrunsBCDEprompt || version_ == RUN3PUPPIrunsBCDEprompt || + version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD) && quality_ == LOOSE) { edm::LogWarning("BadJetIDVersion") << "The LOOSE operating point is only supported for the WINTER16 JetID version -- defaulting to TIGHT"; @@ -843,13 +894,13 @@ class PFJetIDSelectionFunctor : public Selector { set("NHF", 0.9); if (version_ != WINTER17 && version_ != WINTER17PUPPI && version_ != SUMMER18 && version_ != SUMMER18PUPPI && version_ != RUN2UL16CHS && version_ != RUN2UL16PUPPI && version_ != RUN2ULCHS && version_ != RUN2ULPUPPI && - version_ != RUN3WINTER22CHSrunsBCDEprompt && version_ != RUN3WINTER22PUPPIrunsBCDEprompt && - version_ != RUN3WINTER22CHS && version_ != RUN3WINTER22PUPPI) + version_ != RUN3CHSrunsBCDEprompt && version_ != RUN3PUPPIrunsBCDEprompt && + version_ != RUN3CHSruns2022FGruns2023CD && version_ != RUN3PUPPIruns2022FGruns2023CD) set("CEF", 0.99); - if (version_ == RUN3WINTER22CHSrunsBCDEprompt || version_ == RUN3WINTER22PUPPIrunsBCDEprompt || - version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI) + if (version_ == RUN3CHSrunsBCDEprompt || version_ == RUN3PUPPIrunsBCDEprompt || + version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD) set("CHF", 0.01); - if (version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI) + if (version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD) set("NHF", 0.99); set("NEF", 0.9); set("NCH", 0); @@ -911,32 +962,54 @@ class PFJetIDSelectionFunctor : public Selector { set("NEF_FW", 0.90); set("nNeutrals_FW_L", 2); set("nNeutrals_FW_U", 999999); - } else if (version_ == RUN2ULCHS || version_ == RUN3WINTER22CHSrunsBCDEprompt || version_ == RUN3WINTER22CHS) { + } else if (version_ == RUN2ULCHS) { set("NHF_TR", 0.9); set("NEF_TR", 0.99); set("NCH_TR", 0); set("NEF_EC_L", 0.01); set("NEF_EC_U", 0.99); - set("nNeutrals_EC", 2); + set("nNeutrals_EC", 1); set("NHF_FW", 0.2); set("NEF_FW", 0.90); set("nNeutrals_FW", 10); - } else if (version_ == RUN2ULPUPPI || version_ == RUN3WINTER22PUPPIrunsBCDEprompt) { + } else if (version_ == RUN3CHSrunsBCDEprompt) { set("NHF_TR", 0.9); set("NEF_TR", 0.99); - set("NHF_EC", 0.9999); - set("NHF_FW", -1.0); + set("NCH_TR", 0); + set("NEF_EC_U", 0.99); + set("nNeutrals_EC", 1); + set("NHF_FW", 0.2); set("NEF_FW", 0.90); + set("nNeutrals_FW", 10); + } else if (version_ == RUN3CHSruns2022FGruns2023CD) { + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); + set("NCH_TR", 0); + set("NEF_EC_U", 0.99); + set("NHF_EC", 0.99); + set("nNeutrals_EC", 1); + set("NEF_FW", 0.4); + set("nNeutrals_FW", 10); + } else if (version_ == RUN2ULPUPPI) { + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); + set("NHF_EC", 0.99); + set("NHF_FW", -1.0); + set("NEF_FW", 0.4); set("nNeutrals_FW_L", 2); set("nNeutrals_FW_U", 999999); - } else if (version_ == RUN3WINTER22PUPPI) { + } else if (version_ == RUN3PUPPIrunsBCDEprompt) { set("NHF_TR", 0.9); set("NEF_TR", 0.99); set("NHF_EC", 0.9999); - set("NHF_FW", -1.0); set("NEF_FW", 0.90); + set("nNeutrals_FW_L", 2); + } else if (version_ == RUN3PUPPIruns2022FGruns2023CD) { + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); + set("NHF_EC", 0.99); + set("NEF_FW", 0.4); set("nNeutrals_FW_L", 1); - set("nNeutrals_FW_U", 999999); } } else if (quality_ == TIGHTLEPVETO) { set("CHF", 0.0); @@ -954,10 +1027,10 @@ class PFJetIDSelectionFunctor : public Selector { set("NEF_FW", 0.90); set("nNeutrals_FW", 10); } - if (version_ == RUN3WINTER22CHSrunsBCDEprompt || version_ == RUN3WINTER22PUPPIrunsBCDEprompt || - version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI) { + if (version_ == RUN3CHSrunsBCDEprompt || version_ == RUN3PUPPIrunsBCDEprompt || + version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD) { set("CHF", 0.01); - } else if (version_ == RUN3WINTER22CHS || version_ == RUN3WINTER22PUPPI) { + } else if (version_ == RUN3CHSruns2022FGruns2023CD || version_ == RUN3PUPPIruns2022FGruns2023CD) { set("NHF", 0.99); } else if (version_ == WINTER17PUPPI) { set("NHF_EC", 0.99); @@ -1024,7 +1097,7 @@ class PFJetIDSelectionFunctor : public Selector { set("NEF_FW", 0.90); set("nNeutrals_FW_L", 2); set("nNeutrals_FW_U", 999999); - } else if (version_ == RUN2ULCHS || version_ == RUN3WINTER22CHSrunsBCDEprompt || version_ == RUN3WINTER22CHS) { + } else if (version_ == RUN2ULCHS) { set("NHF_TR", 0.9); set("NEF_TR", 0.99); set("MUF_TR", 0.8); @@ -1032,11 +1105,33 @@ class PFJetIDSelectionFunctor : public Selector { set("CEF_TR", 0.8); set("NEF_EC_L", 0.01); set("NEF_EC_U", 0.99); - set("nNeutrals_EC", 2); + set("nNeutrals_EC", 1); + set("NHF_FW", 0.2); + set("NEF_FW", 0.90); + set("nNeutrals_FW", 10); + } else if (version_ == RUN3CHSrunsBCDEprompt) { + set("MUF_TR", 0.8); + set("CEF_TR", 0.8); + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); + set("NCH_TR", 0); + set("NEF_EC_U", 0.99); + set("nNeutrals_EC", 1); set("NHF_FW", 0.2); set("NEF_FW", 0.90); set("nNeutrals_FW", 10); - } else if (version_ == RUN2ULPUPPI || version_ == RUN3WINTER22PUPPIrunsBCDEprompt) { + } else if (version_ == RUN3CHSruns2022FGruns2023CD) { + set("MUF_TR", 0.8); + set("CEF_TR", 0.8); + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); + set("NCH_TR", 0); + set("NEF_EC_U", 0.99); + set("NHF_EC", 0.99); + set("nNeutrals_EC", 1); + set("NEF_FW", 0.4); + set("nNeutrals_FW", 10); + } else if (version_ == RUN2ULPUPPI) { set("NHF_TR", 0.9); set("NEF_TR", 0.99); set("MUF_TR", 0.8); @@ -1046,16 +1141,22 @@ class PFJetIDSelectionFunctor : public Selector { set("NEF_FW", 0.90); set("nNeutrals_FW_L", 2); set("nNeutrals_FW_U", 999999); - } else if (version_ == RUN3WINTER22PUPPI) { - set("NHF_TR", 0.9); - set("NEF_TR", 0.99); + } else if (version_ == RUN3PUPPIrunsBCDEprompt) { set("MUF_TR", 0.8); set("CEF_TR", 0.8); + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); set("NHF_EC", 0.9999); - set("NHF_FW", -1.0); set("NEF_FW", 0.90); + set("nNeutrals_FW_L", 2); + } else if (version_ == RUN3PUPPIruns2022FGruns2023CD) { + set("MUF_TR", 0.8); + set("CEF_TR", 0.8); + set("NHF_TR", 0.9); + set("NEF_TR", 0.99); + set("NHF_EC", 0.99); + set("NEF_FW", 0.4); set("nNeutrals_FW_L", 1); - set("nNeutrals_FW_U", 999999); } } } @@ -1066,8 +1167,8 @@ class PFJetIDSelectionFunctor : public Selector { indexNHF_ = index_type(&bits_, "NHF"); if ((version_ != WINTER17 && version_ != WINTER17PUPPI && version_ != SUMMER18 && version_ != SUMMER18PUPPI && version_ != RUN2UL16CHS && version_ != RUN2UL16PUPPI && version_ != RUN2ULCHS && version_ != RUN2ULPUPPI && - version_ != RUN3WINTER22CHSrunsBCDEprompt && version_ != RUN3WINTER22PUPPIrunsBCDEprompt && - version_ != RUN3WINTER22CHS && version_ != RUN3WINTER22PUPPI) || + version_ != RUN3CHSrunsBCDEprompt && version_ != RUN3PUPPIrunsBCDEprompt && + version_ != RUN3CHSruns2022FGruns2023CD && version_ != RUN3PUPPIruns2022FGruns2023CD) || quality_ != TIGHT) indexCEF_ = index_type(&bits_, "CEF"); @@ -1108,8 +1209,8 @@ class PFJetIDSelectionFunctor : public Selector { indexMUF_ = index_type(&bits_, "MUF"); } } - if ((version_ == SUMMER18) || (version_ == RUN2ULCHS) || (version_ == RUN3WINTER22CHSrunsBCDEprompt) || - (version_ == RUN3WINTER22CHS)) { + if ((version_ == SUMMER18) || (version_ == RUN2ULCHS) || (version_ == RUN3CHSrunsBCDEprompt) || + (version_ == RUN3CHSruns2022FGruns2023CD)) { indexNHF_TR_ = index_type(&bits_, "NHF_TR"); indexNEF_TR_ = index_type(&bits_, "NEF_TR"); indexNCH_TR_ = index_type(&bits_, "NCH_TR"); @@ -1125,8 +1226,8 @@ class PFJetIDSelectionFunctor : public Selector { indexCEF_TR_ = index_type(&bits_, "CEF_TR"); } } - if ((version_ == SUMMER18PUPPI) || (version_ == RUN2ULPUPPI) || (version_ == RUN3WINTER22PUPPIrunsBCDEprompt) || - (version_ == RUN3WINTER22PUPPI)) { + if ((version_ == SUMMER18PUPPI) || (version_ == RUN2ULPUPPI) || (version_ == RUN3PUPPIrunsBCDEprompt) || + (version_ == RUN3PUPPIruns2022FGruns2023CD)) { indexNHF_TR_ = index_type(&bits_, "NHF_TR"); indexNEF_TR_ = index_type(&bits_, "NEF_TR"); indexNHF_EC_ = index_type(&bits_, "NHF_EC"); diff --git a/RecoEcal/EgammaClusterProducers/src/InterestingDetIdCollectionProducer.cc b/RecoEcal/EgammaClusterProducers/src/InterestingDetIdCollectionProducer.cc index bb422be344b55..1e7cf14b6a960 100644 --- a/RecoEcal/EgammaClusterProducers/src/InterestingDetIdCollectionProducer.cc +++ b/RecoEcal/EgammaClusterProducers/src/InterestingDetIdCollectionProducer.cc @@ -32,7 +32,7 @@ The following classes of "interesting id" are considered #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Frameworkfwd.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/ESGetToken.h" @@ -47,13 +47,12 @@ The following classes of "interesting id" are considered #include -class InterestingDetIdCollectionProducer : public edm::stream::EDProducer<> { +class InterestingDetIdCollectionProducer : public edm::global::EDProducer<> { public: //! ctor explicit InterestingDetIdCollectionProducer(const edm::ParameterSet&); - void beginRun(edm::Run const&, const edm::EventSetup&) final; //! producer - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: // ----------member data --------------------------- @@ -66,10 +65,8 @@ class InterestingDetIdCollectionProducer : public edm::stream::EDProducer<> { std::string interestingDetIdCollection_; int minimalEtaSize_; int minimalPhiSize_; - const CaloTopology* caloTopology_; int severityLevel_; - const EcalSeverityLevelAlgo* severity_; bool keepNextToDead_; bool keepNextToBoundary_; }; @@ -81,8 +78,8 @@ InterestingDetIdCollectionProducer::InterestingDetIdCollectionProducer(const edm recHitsToken_ = consumes(iConfig.getParameter("recHitsLabel")); basicClustersToken_ = consumes(iConfig.getParameter("basicClustersLabel")); - caloTopologyToken_ = esConsumes(); - sevLVToken_ = esConsumes(); + caloTopologyToken_ = esConsumes(); + sevLVToken_ = esConsumes(); nextToDeadToken_ = esConsumes(); interestingDetIdCollection_ = iConfig.getParameter("interestingDetIdCollection"); @@ -100,19 +97,17 @@ InterestingDetIdCollectionProducer::InterestingDetIdCollectionProducer(const edm keepNextToBoundary_ = iConfig.getParameter("keepNextToBoundary"); } -void InterestingDetIdCollectionProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) { - edm::ESHandle theCaloTopology = iSetup.getHandle(caloTopologyToken_); - caloTopology_ = &(*theCaloTopology); - - edm::ESHandle sevLv = iSetup.getHandle(sevLVToken_); - severity_ = sevLv.product(); -} - // ------------ method called to produce the data ------------ -void InterestingDetIdCollectionProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void InterestingDetIdCollectionProducer::produce(edm::StreamID, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { using namespace edm; using namespace std; + auto const& caloTopology = iSetup.getData(caloTopologyToken_); + + auto const& severity = iSetup.getData(sevLVToken_); + // take BasicClusters Handle pClusters; iEvent.getByToken(basicClustersToken_, pClusters); @@ -155,7 +150,7 @@ void InterestingDetIdCollectionProducer::produce(edm::Event& iEvent, const edm:: if (eMaxId.null()) continue; - const CaloSubdetectorTopology* topology = caloTopology_->getSubdetectorTopology(eMaxId.det(), eMaxId.subdetId()); + const CaloSubdetectorTopology* topology = caloTopology.getSubdetectorTopology(eMaxId.det(), eMaxId.subdetId()); xtalsToStore = topology->getWindow(eMaxId, minimalEtaSize_, minimalPhiSize_); @@ -172,7 +167,7 @@ void InterestingDetIdCollectionProducer::produce(edm::Event& iEvent, const edm:: indexToStore.push_back(it->id()); } // add hits for severities above a threshold - if (severityLevel_ >= 0 && severity_->severityLevel(*it) >= severityLevel_) { + if (severityLevel_ >= 0 && severity.severityLevel(*it) >= severityLevel_) { indexToStore.push_back(it->id()); } if (keepNextToDead_) { diff --git a/RecoEcal/EgammaClusterProducers/src/InterestingDetIdFromSuperClusterProducer.cc b/RecoEcal/EgammaClusterProducers/src/InterestingDetIdFromSuperClusterProducer.cc index a9bc0b3f692b4..223a7cd9434d9 100644 --- a/RecoEcal/EgammaClusterProducers/src/InterestingDetIdFromSuperClusterProducer.cc +++ b/RecoEcal/EgammaClusterProducers/src/InterestingDetIdFromSuperClusterProducer.cc @@ -31,7 +31,7 @@ The following classes of "interesting id" are considered #include "FWCore/Framework/interface/Event.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/MakerMacros.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/Utilities/interface/ESGetToken.h" @@ -46,13 +46,12 @@ The following classes of "interesting id" are considered #include -class InterestingDetIdFromSuperClusterProducer : public edm::stream::EDProducer<> { +class InterestingDetIdFromSuperClusterProducer : public edm::global::EDProducer<> { public: //! ctor explicit InterestingDetIdFromSuperClusterProducer(const edm::ParameterSet&); - void beginRun(edm::Run const&, const edm::EventSetup&) final; //! producer - void produce(edm::Event&, const edm::EventSetup&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; private: // ----------member data --------------------------- @@ -64,10 +63,8 @@ class InterestingDetIdFromSuperClusterProducer : public edm::stream::EDProducer< std::string interestingDetIdCollection_; int minimalEtaSize_; int minimalPhiSize_; - const CaloTopology* caloTopology_; int severityLevel_; - const EcalSeverityLevelAlgo* severity_; bool keepNextToDead_; bool keepNextToBoundary_; }; @@ -79,8 +76,8 @@ InterestingDetIdFromSuperClusterProducer::InterestingDetIdFromSuperClusterProduc recHitsToken_ = consumes(iConfig.getParameter("recHitsLabel")); superClustersToken_ = consumes(iConfig.getParameter("superClustersLabel")); - caloTopologyToken_ = esConsumes(); - severityLevelToken_ = esConsumes(); + caloTopologyToken_ = esConsumes(); + severityLevelToken_ = esConsumes(); interestingDetIdCollection_ = iConfig.getParameter("interestingDetIdCollection"); minimalEtaSize_ = iConfig.getParameter("etaSize"); @@ -99,19 +96,16 @@ InterestingDetIdFromSuperClusterProducer::InterestingDetIdFromSuperClusterProduc } } -void InterestingDetIdFromSuperClusterProducer::beginRun(edm::Run const& run, const edm::EventSetup& iSetup) { - edm::ESHandle theCaloTopology = iSetup.getHandle(caloTopologyToken_); - caloTopology_ = &(*theCaloTopology); - - edm::ESHandle sevLv = iSetup.getHandle(severityLevelToken_); - severity_ = sevLv.product(); -} - // ------------ method called to produce the data ------------ -void InterestingDetIdFromSuperClusterProducer::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void InterestingDetIdFromSuperClusterProducer::produce(edm::StreamID, + edm::Event& iEvent, + const edm::EventSetup& iSetup) const { using namespace edm; using namespace std; + auto const& caloTopology = iSetup.getData(caloTopologyToken_); + + auto const& severity = iSetup.getData(severityLevelToken_); // take BasicClusters Handle pClusters; iEvent.getByToken(superClustersToken_, pClusters); @@ -154,7 +148,7 @@ void InterestingDetIdFromSuperClusterProducer::produce(edm::Event& iEvent, const if (eMaxId.null()) continue; - const CaloSubdetectorTopology* topology = caloTopology_->getSubdetectorTopology(eMaxId.det(), eMaxId.subdetId()); + const CaloSubdetectorTopology* topology = caloTopology.getSubdetectorTopology(eMaxId.det(), eMaxId.subdetId()); xtalsToStore = topology->getWindow(eMaxId, minimalEtaSize_, minimalPhiSize_); std::vector > xtalsInClus = (*clusIt)->hitsAndFractions(); @@ -173,7 +167,7 @@ void InterestingDetIdFromSuperClusterProducer::produce(edm::Event& iEvent, const indexToStore.push_back(it->id()); } // add hits for severities above a threshold - if (severityLevel_ >= 0 && severity_->severityLevel(*it) >= severityLevel_) { + if (severityLevel_ >= 0 && severity.severityLevel(*it) >= severityLevel_) { indexToStore.push_back(it->id()); } if (keepNextToDead_) { diff --git a/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc b/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc index 719daa05c9c7d..094d50be492e7 100644 --- a/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc +++ b/RecoEgamma/EgammaElectronAlgos/src/GsfElectronAlgo.cc @@ -1181,11 +1181,11 @@ void GsfElectronAlgo::createElectron(reco::GsfElectronCollection& electrons, dr04.hcalRecHitSumEtBc[id] = eventData.hadIsolation04Bc.getHcalEtSumBc(&ele, id + 1, hcalCuts); } - dr03.ecalRecHitSumEt = eventData.ecalBarrelIsol03.getEtSum(&ele); - dr03.ecalRecHitSumEt += eventData.ecalEndcapIsol03.getEtSum(&ele); + dr03.ecalRecHitSumEt = eventData.ecalBarrelIsol03.getEtSum(&ele, thresholds); + dr03.ecalRecHitSumEt += eventData.ecalEndcapIsol03.getEtSum(&ele, thresholds); - dr04.ecalRecHitSumEt = eventData.ecalBarrelIsol04.getEtSum(&ele); - dr04.ecalRecHitSumEt += eventData.ecalEndcapIsol04.getEtSum(&ele); + dr04.ecalRecHitSumEt = eventData.ecalBarrelIsol04.getEtSum(&ele, thresholds); + dr04.ecalRecHitSumEt += eventData.ecalEndcapIsol04.getEtSum(&ele, thresholds); } dr03.pre7DepthHcal = false; diff --git a/RecoEgamma/EgammaElectronProducers/plugins/ElectronSeedProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/ElectronSeedProducer.cc index 5ad841ea3729f..5fc5eb39adb2d 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/ElectronSeedProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/ElectronSeedProducer.cc @@ -37,14 +37,14 @@ class ElectronSeedProducer : public edm::stream::EDProducer<> { public: explicit ElectronSeedProducer(const edm::ParameterSet&); - void beginRun(const edm::Run&, const edm::EventSetup&) override; void produce(edm::Event&, const edm::EventSetup&) final; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: reco::SuperClusterRefVector filterClusters(math::XYZPoint const& beamSpotPosition, - const edm::Handle& superClusters) const; + const edm::Handle& superClusters, + HcalPFCuts const* hcalCuts) const; edm::EDGetTokenT superClusters_[2]; std::vector> initialSeeds_; @@ -62,8 +62,7 @@ class ElectronSeedProducer : public edm::stream::EDProducer<> { std::unique_ptr hgcClusterTools_; edm::ESGetToken hcalCutsToken_; - bool cutsFromDB; - HcalPFCuts const* hcalCuts = nullptr; + bool cutsFromDB_; }; using namespace reco; @@ -111,9 +110,9 @@ ElectronSeedProducer::ElectronSeedProducer(const edm::ParameterSet& conf) } //Retrieve HCAL PF thresholds - from config or from DB - cutsFromDB = conf.getParameter("usePFThresholdsFromDB"); - if (cutsFromDB) { - hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); + cutsFromDB_ = conf.getParameter("usePFThresholdsFromDB"); + if (cutsFromDB_) { + hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); } ElectronSeedGenerator::Tokens esg_tokens; @@ -129,15 +128,14 @@ ElectronSeedProducer::ElectronSeedProducer(const edm::ParameterSet& conf) produces(); } -void ElectronSeedProducer::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { - if (cutsFromDB) { - hcalCuts = &iSetup.getData(hcalCutsToken_); - } -} - void ElectronSeedProducer::produce(edm::Event& e, const edm::EventSetup& iSetup) { LogDebug("ElectronSeedProducer") << "[ElectronSeedProducer::produce] entering "; + HcalPFCuts const* hcalCuts = nullptr; + if (cutsFromDB_) { + hcalCuts = &iSetup.getData(hcalCutsToken_); + } + std::vector initialSeedCollections; std::unique_ptr initialSeedCollectionPtr = nullptr; //created on the fly @@ -162,7 +160,7 @@ void ElectronSeedProducer::produce(edm::Event& e, const edm::EventSetup& iSetup) // loop over barrel + endcap for (unsigned int i = 0; i < 2; i++) { - auto clusterRefs = filterClusters(beamSpotPosition, e.getHandle(superClusters_[i])); + auto clusterRefs = filterClusters(beamSpotPosition, e.getHandle(superClusters_[i]), hcalCuts); matcher_->run(e, clusterRefs, initialSeedCollections, *seeds); } @@ -185,7 +183,9 @@ void ElectronSeedProducer::produce(edm::Event& e, const edm::EventSetup& iSetup) //=============================== SuperClusterRefVector ElectronSeedProducer::filterClusters( - math::XYZPoint const& beamSpotPosition, const edm::Handle& superClusters) const { + math::XYZPoint const& beamSpotPosition, + const edm::Handle& superClusters, + HcalPFCuts const* hcalCuts) const { SuperClusterRefVector sclRefs; for (unsigned int i = 0; i < superClusters->size(); ++i) { diff --git a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc index fe5bd008f18d7..0651579540b9c 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/GsfElectronProducer.cc @@ -132,7 +132,6 @@ class GsfElectronProducer : public edm::stream::EDProducer tfSessions_; edm::ESGetToken hcalCutsToken_; - bool cutsFromDB; - HcalPFCuts const* hcalCuts = nullptr; + bool cutsFromDB_; }; void GsfElectronProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { @@ -406,12 +404,6 @@ namespace { } }; // namespace -void GsfElectronProducer::beginRun(const edm::Run& run, const edm::EventSetup& setup) { - if (cutsFromDB) { - hcalCuts = &setup.getData(hcalCutsToken_); - } -} - GsfElectronProducer::GsfElectronProducer(const edm::ParameterSet& cfg, const GsfElectronAlgo::HeavyObjectCache* gcache) : cutsCfg_{makeCutsConfiguration(cfg.getParameter("preselection"))}, ecalSeedingParametersChecked_(false), @@ -424,9 +416,9 @@ GsfElectronProducer::GsfElectronProducer(const edm::ParameterSet& cfg, const Gsf } //Retrieve HCAL PF thresholds - from config or from DB - cutsFromDB = cfg.getParameter("usePFThresholdsFromDB"); - if (cutsFromDB) { - hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); + cutsFromDB_ = cfg.getParameter("usePFThresholdsFromDB"); + if (cutsFromDB_) { + hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); } inputCfg_.gsfElectronCores = consumes(cfg.getParameter("gsfElectronCoresTag")); @@ -745,6 +737,11 @@ bool GsfElectronProducer::isPreselected(GsfElectron const& ele) const { // ------------ method called to produce the data ------------ void GsfElectronProducer::produce(edm::Event& event, const edm::EventSetup& setup) { + HcalPFCuts const* hcalCuts = nullptr; + if (cutsFromDB_) { + hcalCuts = &setup.getData(hcalCutsToken_); + } + // check configuration if (!ecalSeedingParametersChecked_) { ecalSeedingParametersChecked_ = true; diff --git a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc index 6492ecdd1b94b..76ee75fc6f02e 100644 --- a/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc +++ b/RecoEgamma/EgammaElectronProducers/plugins/LowPtGsfElectronSeedProducer.cc @@ -66,8 +66,6 @@ class LowPtGsfElectronSeedProducer final static void globalEndJob(lowptgsfeleseed::HeavyObjectCache const*) {} - void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - void produce(edm::Event&, const edm::EventSetup&) override; static void fillDescriptions(edm::ConfigurationDescriptions&); @@ -184,7 +182,7 @@ LowPtGsfElectronSeedProducer::LowPtGsfElectronSeedProducer(const edm::ParameterS trajectoryFitterToken_{esConsumes(conf.getParameter("Fitter"))}, trajectorySmootherToken_{esConsumes(conf.getParameter("Smoother"))}, builderToken_{esConsumes(conf.getParameter("TTRHBuilder"))}, - magToken_{esConsumes()}, + magToken_{esConsumes()}, ecalClusterToolsESGetTokens_{consumesCollector()}, passThrough_(conf.getParameter("PassThrough")), usePfTracks_(conf.getParameter("UsePfTracks")), @@ -202,15 +200,10 @@ LowPtGsfElectronSeedProducer::LowPtGsfElectronSeedProducer(const edm::ParameterS produces >(); // indexed by edm::Ref.index() } -////////////////////////////////////////////////////////////////////////////////////////// -// -void LowPtGsfElectronSeedProducer::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const& setup) { - field_ = setup.getHandle(magToken_); -} - ////////////////////////////////////////////////////////////////////////////////////////// // void LowPtGsfElectronSeedProducer::produce(edm::Event& event, const edm::EventSetup& setup) { + field_ = setup.getHandle(magToken_); // Products auto seeds = std::make_unique(); auto ecalPreIds = std::make_unique(); diff --git a/RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h b/RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h index fc508e58ffdbd..56c79505c41fc 100644 --- a/RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h +++ b/RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h @@ -22,6 +22,8 @@ #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h" +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" class EgammaRecHitIsolation { public: @@ -36,11 +38,19 @@ class EgammaRecHitIsolation { const EcalSeverityLevelAlgo*, DetId::Detector detector); - double getEtSum(const reco::Candidate* emObject) const { return getSum_(emObject, true); } - double getEnergySum(const reco::Candidate* emObject) const { return getSum_(emObject, false); } + double getEtSum(const reco::Candidate* emObject, EcalPFRecHitThresholds const& thresholds) const { + return getSum_(emObject, true, &thresholds); + } + double getEnergySum(const reco::Candidate* emObject, EcalPFRecHitThresholds const& thresholds) const { + return getSum_(emObject, false, &thresholds); + } - double getEtSum(const reco::SuperCluster* emObject) const { return getSum_(emObject, true); } - double getEnergySum(const reco::SuperCluster* emObject) const { return getSum_(emObject, false); } + double getEtSum(const reco::SuperCluster* emObject, EcalPFRecHitThresholds const& thresholds) const { + return getSum_(emObject, true, &thresholds); + } + double getEnergySum(const reco::SuperCluster* emObject, EcalPFRecHitThresholds const& thresholds) const { + return getSum_(emObject, false, &thresholds); + } void setUseNumCrystals(bool b = true) { useNumCrystals_ = b; } void setVetoClustered(bool b = true) { vetoClustered_ = b; } @@ -61,8 +71,8 @@ class EgammaRecHitIsolation { ~EgammaRecHitIsolation(); private: - double getSum_(const reco::Candidate*, bool returnEt) const; - double getSum_(const reco::SuperCluster*, bool returnEt) const; + double getSum_(const reco::Candidate*, bool returnEt, const EcalPFRecHitThresholds* thresholds) const; + double getSum_(const reco::SuperCluster*, bool returnEt, const EcalPFRecHitThresholds* thresholds) const; double extRadius_; double intRadius_; diff --git a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc b/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc deleted file mode 100644 index 0537893cef3f3..0000000000000 --- a/RecoEgamma/EgammaIsolationAlgos/plugins/EgammaEcalRecHitIsolationProducer.cc +++ /dev/null @@ -1,193 +0,0 @@ -//***************************************************************************** -// File: EgammaEcalRecHitIsolationProducer.cc -// ---------------------------------------------------------------------------- -// OrigAuth: Matthias Mozer, adapted from EgammaHcalIsolationProducer by S. Harper -// Institute: IIHE-VUB, RAL -//============================================================================= -//***************************************************************************** - -#include "DataFormats/Candidate/interface/Candidate.h" -#include "DataFormats/Candidate/interface/CandAssociation.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/DetId/interface/DetId.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h" -#include "DataFormats/RecoCandidate/interface/RecoCandidate.h" -#include "FWCore/Framework/interface/ConsumesCollector.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/EventSetup.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/Framework/interface/global/EDProducer.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "FWCore/Utilities/interface/ESGetToken.h" -#include "Geometry/CaloGeometry/interface/CaloGeometry.h" -#include "Geometry/Records/interface/CaloGeometryRecord.h" -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaRecHitIsolation.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" -#include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgoRcd.h" - -class EgammaEcalRecHitIsolationProducer : public edm::global::EDProducer<> { -public: - explicit EgammaEcalRecHitIsolationProducer(const edm::ParameterSet&); - - void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; - -private: - const edm::EDGetTokenT> emObjectProducer_; - const edm::EDGetTokenT ecalBarrelRecHitCollection_; - const edm::EDGetTokenT ecalEndcapRecHitCollection_; - - double egIsoPtMinBarrel_; //minimum Et noise cut - double egIsoEMinBarrel_; //minimum E noise cut - double egIsoPtMinEndcap_; //minimum Et noise cut - double egIsoEMinEndcap_; //minimum E noise cut - double egIsoConeSizeOut_; //outer cone size - double egIsoConeSizeInBarrel_; //inner cone size - double egIsoConeSizeInEndcap_; //inner cone size - double egIsoJurassicWidth_; // exclusion strip width for jurassic veto - - bool useIsolEt_; //switch for isolEt rather than isolE - bool tryBoth_; // use rechits from barrel + endcap - bool subtract_; // subtract SC energy (allows veto cone of zero size) - - bool useNumCrystals_; // veto on number of crystals - bool vetoClustered_; // veto all clusterd rechits - - edm::ESGetToken sevLvToken_; - edm::ESGetToken caloGeometrytoken_; -}; - -#include "FWCore/Framework/interface/MakerMacros.h" -DEFINE_FWK_MODULE(EgammaEcalRecHitIsolationProducer); - -EgammaEcalRecHitIsolationProducer::EgammaEcalRecHitIsolationProducer(const edm::ParameterSet& config) - //inputs - : emObjectProducer_{consumes(config.getParameter("emObjectProducer"))}, - ecalBarrelRecHitCollection_{consumes(config.getParameter("ecalBarrelRecHitCollection"))}, - ecalEndcapRecHitCollection_{consumes(config.getParameter("ecalEndcapRecHitCollection"))} { - //vetos - egIsoPtMinBarrel_ = config.getParameter("etMinBarrel"); - egIsoEMinBarrel_ = config.getParameter("eMinBarrel"); - egIsoPtMinEndcap_ = config.getParameter("etMinEndcap"); - egIsoEMinEndcap_ = config.getParameter("eMinEndcap"); - egIsoConeSizeInBarrel_ = config.getParameter("intRadiusBarrel"); - egIsoConeSizeInEndcap_ = config.getParameter("intRadiusEndcap"); - egIsoConeSizeOut_ = config.getParameter("extRadius"); - egIsoJurassicWidth_ = config.getParameter("jurassicWidth"); - - // options - useIsolEt_ = config.getParameter("useIsolEt"); - tryBoth_ = config.getParameter("tryBoth"); - subtract_ = config.getParameter("subtract"); - useNumCrystals_ = config.getParameter("useNumCrystals"); - vetoClustered_ = config.getParameter("vetoClustered"); - - //EventSetup Tokens - sevLvToken_ = esConsumes(); - caloGeometrytoken_ = esConsumes(); - - //register your products - produces>(); -} - -// ------------ method called to produce the data ------------ -void EgammaEcalRecHitIsolationProducer::produce(edm::StreamID, - edm::Event& iEvent, - const edm::EventSetup& iSetup) const { - // Get the filtered objects - auto emObjectHandle = iEvent.getHandle(emObjectProducer_); - - // Next get Ecal hits barrel - auto ecalBarrelRecHitHandle = iEvent.getHandle(ecalBarrelRecHitCollection_); - - // Next get Ecal hits endcap - auto ecalEndcapRecHitHandle = iEvent.getHandle(ecalEndcapRecHitCollection_); - - edm::ESHandle sevlv = iSetup.getHandle(sevLvToken_); - const EcalSeverityLevelAlgo* sevLevel = sevlv.product(); - - //Get Calo Geometry - edm::ESHandle pG = iSetup.getHandle(caloGeometrytoken_); - const CaloGeometry* caloGeom = pG.product(); - - //reco::CandViewDoubleAssociations* isoMap = new reco::CandViewDoubleAssociations( reco::CandidateBaseRefProd( emObjectHandle ) ); - auto isoMap = std::make_unique>(); - edm::ValueMap::Filler filler(*isoMap); - std::vector retV(emObjectHandle->size(), 0); - - EgammaRecHitIsolation ecalBarrelIsol(egIsoConeSizeOut_, - egIsoConeSizeInBarrel_, - egIsoJurassicWidth_, - egIsoPtMinBarrel_, - egIsoEMinBarrel_, - caloGeom, - *ecalBarrelRecHitHandle, - sevLevel, - DetId::Ecal); - ecalBarrelIsol.setUseNumCrystals(useNumCrystals_); - ecalBarrelIsol.setVetoClustered(vetoClustered_); - - EgammaRecHitIsolation ecalEndcapIsol(egIsoConeSizeOut_, - egIsoConeSizeInEndcap_, - egIsoJurassicWidth_, - egIsoPtMinEndcap_, - egIsoEMinEndcap_, - caloGeom, - *ecalEndcapRecHitHandle, - sevLevel, - DetId::Ecal); - ecalEndcapIsol.setUseNumCrystals(useNumCrystals_); - ecalEndcapIsol.setVetoClustered(vetoClustered_); - - for (size_t i = 0; i < emObjectHandle->size(); ++i) { - //i need to know if its in the barrel/endcap so I get the supercluster handle to find out the detector eta - //this might not be the best way, are we guaranteed that eta<1.5 is barrel - //this can be safely replaced by another method which determines where the emobject is - //then we either get the isolation Et or isolation Energy depending on user selection - double isoValue = 0.; - - reco::SuperClusterRef superClus = emObjectHandle->at(i).get(); - - if (tryBoth_) { //barrel + endcap - if (useIsolEt_) - isoValue = - ecalBarrelIsol.getEtSum(&(emObjectHandle->at(i))) + ecalEndcapIsol.getEtSum(&(emObjectHandle->at(i))); - else - isoValue = ecalBarrelIsol.getEnergySum(&(emObjectHandle->at(i))) + - ecalEndcapIsol.getEnergySum(&(emObjectHandle->at(i))); - } else if (fabs(superClus->eta()) < 1.479) { //barrel - if (useIsolEt_) - isoValue = ecalBarrelIsol.getEtSum(&(emObjectHandle->at(i))); - else - isoValue = ecalBarrelIsol.getEnergySum(&(emObjectHandle->at(i))); - } else { //endcap - if (useIsolEt_) - isoValue = ecalEndcapIsol.getEtSum(&(emObjectHandle->at(i))); - else - isoValue = ecalEndcapIsol.getEnergySum(&(emObjectHandle->at(i))); - } - - //we subtract off the electron energy here as well - double subtractVal = 0; - - if (useIsolEt_) - subtractVal = superClus.get()->rawEnergy() * sin(2 * atan(exp(-superClus.get()->eta()))); - else - subtractVal = superClus.get()->rawEnergy(); - - if (subtract_) - isoValue -= subtractVal; - - retV[i] = isoValue; - //all done, isolation is now in the map - - } //end of loop over em objects - - filler.insert(emObjectHandle, retV.begin(), retV.end()); - filler.fill(); - - iEvent.put(std::move(isoMap)); -} - -//define this as a plug-in -//DEFINE_FWK_MODULE(EgammaRecHitIsolation,Producer); diff --git a/RecoEgamma/EgammaIsolationAlgos/src/EgammaRecHitIsolation.cc b/RecoEgamma/EgammaIsolationAlgos/src/EgammaRecHitIsolation.cc index 0e706fd61b8d3..0eebf9ee20fbd 100644 --- a/RecoEgamma/EgammaIsolationAlgos/src/EgammaRecHitIsolation.cc +++ b/RecoEgamma/EgammaIsolationAlgos/src/EgammaRecHitIsolation.cc @@ -64,7 +64,9 @@ EgammaRecHitIsolation::EgammaRecHitIsolation(double extRadius, EgammaRecHitIsolation::~EgammaRecHitIsolation() {} -double EgammaRecHitIsolation::getSum_(const reco::Candidate* emObject, bool returnEt) const { +double EgammaRecHitIsolation::getSum_(const reco::Candidate* emObject, + bool returnEt, + const EcalPFRecHitThresholds* thresholds) const { double energySum = 0.; if (!caloHits_.empty()) { //Take the SC position @@ -96,6 +98,10 @@ double EgammaRecHitIsolation::getSum_(const reco::Candidate* emObject, bool retu float phiDiff = reco::deltaPhi(phi, phiclus); float energy = j->energy(); + float rhThres = (thresholds != nullptr) ? (*thresholds)[j->detid()] : 0.f; + if (energy <= rhThres) + continue; + if (useNumCrystals_) { if (fabs(etaclus) < 1.479) { // Barrel num crystals, crystal width = 0.0174 if (fabs(etaDiff) < 0.0174 * etaSlice_) @@ -174,7 +180,9 @@ double EgammaRecHitIsolation::getSum_(const reco::Candidate* emObject, bool retu return energySum; } -double EgammaRecHitIsolation::getSum_(const reco::SuperCluster* sc, bool returnEt) const { +double EgammaRecHitIsolation::getSum_(const reco::SuperCluster* sc, + bool returnEt, + const EcalPFRecHitThresholds* thresholds) const { double energySum = 0.; if (!caloHits_.empty()) { //Take the SC position @@ -205,6 +213,10 @@ double EgammaRecHitIsolation::getSum_(const reco::SuperCluster* sc, bool returnE double phiDiff = reco::deltaPhi(phi, phiclus); double energy = j->energy(); + float rhThres = (thresholds != nullptr) ? (*thresholds)[j->detid()] : 0.f; + if (energy <= rhThres) + continue; + if (useNumCrystals_) { if (fabs(etaclus) < 1.479) { // Barrel num crystals, crystal width = 0.0174 if (fabs(etaDiff) < 0.0174 * etaSlice_) diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc index 4ff69ebeefc2d..3822137823132 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConversionTrackCandidateProducer.cc @@ -43,7 +43,8 @@ #include "RecoTracker/Record/interface/NavigationSchoolRecord.h" #include "TrackingTools/DetLayers/interface/NavigationSchool.h" #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronHcalHelper.h" - +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" #include class ConversionTrackCandidateProducer : public edm::stream::EDProducer<> { @@ -77,6 +78,8 @@ class ConversionTrackCandidateProducer : public edm::stream::EDProducer<> { const edm::ESGetToken navToken_; const edm::ESGetToken theCaloGeomToken_; const edm::ESGetToken sevlvToken_; + const edm::ESGetToken ecalPFRechitThresholdsToken_; + const EcalPFRecHitThresholds* thresholds = nullptr; double hOverEConeSize_; double maxHOverE_; @@ -153,7 +156,7 @@ ConversionTrackCandidateProducer::ConversionTrackCandidateProducer(const edm::Pa navToken_(esConsumes(edm::ESInputTag("", "SimpleNavigationSchool"))), theCaloGeomToken_(esConsumes()), sevlvToken_(esConsumes()), - + ecalPFRechitThresholdsToken_{esConsumes()}, theTrajectoryBuilder_(createBaseCkfTrajectoryBuilder( config.getParameter("TrajectoryBuilderPSet"), consumesCollector())), outInSeedFinder_{config, consumesCollector()}, @@ -291,6 +294,8 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: validEndcapSCHandle = false; } + thresholds = &theEventSetup.getData(ecalPFRechitThresholdsToken_); + // get the geometry from the event setup: theCaloGeom_ = theEventSetup.getHandle(theCaloGeomToken_); @@ -339,7 +344,7 @@ void ConversionTrackCandidateProducer::produce(edm::Event& theEvent, const edm:: auto const refprodOutInTrackC = theEvent.put(std::move(outInTrackCandidate_p), OutInTrackCandidateCollection_); //std::cout << "ConversionTrackCandidateProducer refprodOutInTrackC size " << (*(refprodOutInTrackC.product())).size() << "\n"; // - //std::cout << "ConversionTrackCandidateProducer Putting in the event " << (*inOutTrackCandidate_p).size() << " In Out track Candidates " << "\n"; + //std::cout << "ConversionTrackCandidateProducer Putting in the event " << (*inOutTrackCandidate_p).size() << " In Out track Candidates " << "\n"; auto const refprodInOutTrackC = theEvent.put(std::move(inOutTrackCandidate_p), InOutTrackCandidateCollection_); //std::cout << "ConversionTrackCandidateProducer refprodInOutTrackC size " << (*(refprodInOutTrackC.product())).size() << "\n"; @@ -401,7 +406,7 @@ void ConversionTrackCandidateProducer::buildCollections(bool isBarrel, ecalIso.doSeverityChecks(&ecalRecHits, severitiesexclEE_); } - double ecalIsolation = ecalIso.getEtSum(sc); + double ecalIsolation = ecalIso.getEtSum(sc, *thresholds); if (ecalIsolation > ecalIsoCut_offset_ + ecalIsoCut_slope_ * scEt) continue; diff --git a/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc index 1a83e3cc068ad..71d0581f0296d 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/ConvertedPhotonProducer.cc @@ -48,7 +48,6 @@ class ConvertedPhotonProducer : public edm::stream::EDProducer<> { public: ConvertedPhotonProducer(const edm::ParameterSet& ps); - void beginRun(edm::Run const&, const edm::EventSetup& es) final; void produce(edm::Event& evt, const edm::EventSetup& es) override; private: @@ -79,8 +78,8 @@ class ConvertedPhotonProducer : public edm::stream::EDProducer<> { edm::EDGetTokenT generalTrackProducer_; edm::ESGetToken hcalCutsToken_; - bool cutsFromDB; - HcalPFCuts const* hcalCuts = nullptr; + bool cutsFromDB_; + HcalPFCuts const* hcalCuts_ = nullptr; // Register the product edm::EDPutTokenT convertedPhotonCollectionPutToken_; @@ -146,9 +145,8 @@ ConvertedPhotonProducer::ConvertedPhotonProducer(const edm::ParameterSet& config scIslandEndcapProducer_{consumes(config.getParameter("scIslandEndcapProducer"))}, hbheRecHits_{consumes(config.getParameter("hbheRecHits"))}, caloGeomToken_{esConsumes()}, - mFToken_{esConsumes()}, - transientTrackToken_{esConsumes( - edm::ESInputTag("", "TransientTrackBuilder"))}, + mFToken_{esConsumes()}, + transientTrackToken_{esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))}, vertexFinder_{config}, algoName_{config.getParameter("AlgorithmName")}, @@ -166,9 +164,9 @@ ConvertedPhotonProducer::ConvertedPhotonProducer(const edm::ParameterSet& config // instantiate the Track Pair Finder algorithm likelihoodCalc_.setWeightsFile(edm::FileInPath{likelihoodWeights_.c_str()}.fullPath().c_str()); - cutsFromDB = config.getParameter("usePFThresholdsFromDB"); - if (cutsFromDB) { - hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); + cutsFromDB_ = config.getParameter("usePFThresholdsFromDB"); + if (cutsFromDB_) { + hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); } ElectronHcalHelper::Configuration cfgCone; @@ -188,18 +186,16 @@ ConvertedPhotonProducer::ConvertedPhotonProducer(const edm::ParameterSet& config hcalHelper_ = std::make_unique(cfgCone, consumesCollector()); } -void ConvertedPhotonProducer::beginRun(edm::Run const& r, edm::EventSetup const& theEventSetup) { +void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { magneticField_ = &theEventSetup.getData(mFToken_); // Transform Track into TransientTrack (needed by the Vertex fitter) transientTrackBuilder_ = &theEventSetup.getData(transientTrackToken_); - if (cutsFromDB) { - hcalCuts = &theEventSetup.getData(hcalCutsToken_); + if (cutsFromDB_) { + hcalCuts_ = &theEventSetup.getData(hcalCutsToken_); } -} -void ConvertedPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { // // create empty output collections // @@ -357,7 +353,7 @@ void ConvertedPhotonProducer::buildCollections( continue; const reco::CaloCluster* pClus = &(*aClus); auto const* sc = dynamic_cast(pClus); - double HoE = hcalHelper.hcalESum(*sc, 0, hcalCuts) / sc->energy(); + double HoE = hcalHelper.hcalESum(*sc, 0, hcalCuts_) / sc->energy(); if (HoE >= maxHOverE_) continue; ///// diff --git a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc index 6d7d08dddeba4..20547ad868f5c 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/GEDPhotonProducer.cc @@ -89,7 +89,6 @@ class GEDPhotonProducer : public edm::stream::EDProducer initializeGlobalCache(const edm::ParameterSet&); @@ -99,8 +98,8 @@ class GEDPhotonProducer : public edm::stream::EDProducer hcalCutsToken_; - bool cutsFromDB; - HcalPFCuts const* hcalCuts = nullptr; + bool cutsFromDB_; + HcalPFCuts const* hcalCuts_ = nullptr; class RecoStepInfo { public: @@ -289,9 +288,9 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config, const Cach hcalHelperCone_(nullptr), hcalHelperBc_(nullptr) { //Retrieve HCAL PF thresholds - from config or from DB - cutsFromDB = config.getParameter("usePFThresholdsFromDB"); - if (cutsFromDB) { - hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); + cutsFromDB_ = config.getParameter("usePFThresholdsFromDB"); + if (cutsFromDB_) { + hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); } if (recoStep_.isFinal()) { @@ -485,12 +484,6 @@ GEDPhotonProducer::GEDPhotonProducer(const edm::ParameterSet& config, const Cach } } -void GEDPhotonProducer::beginRun(const edm::Run& run, const edm::EventSetup& eventSetup) { - if (cutsFromDB) { - hcalCuts = &eventSetup.getData(hcalCutsToken_); - } -} - std::unique_ptr GEDPhotonProducer::initializeGlobalCache(const edm::ParameterSet& config) { // this method is supposed to create, initialize and return a CacheData instance return std::make_unique(config); @@ -505,6 +498,10 @@ void GEDPhotonProducer::endStream() { void GEDPhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& eventSetup) { using namespace edm; + if (cutsFromDB_) { + hcalCuts_ = &eventSetup.getData(hcalCutsToken_); + } + auto outputPhotonCollection_p = std::make_unique(); edm::ValueMap pfEGCandToPhotonMap; @@ -819,7 +816,7 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, reco::Photon::FiducialFlags fiducialFlags; reco::Photon::IsolationVariables isolVarR03, isolVarR04; if (!EcalTools::isHGCalDet(thedet)) { - photonIsoCalculator_->calculate(&newCandidate, evt, es, fiducialFlags, isolVarR04, isolVarR03, hcalCuts); + photonIsoCalculator_->calculate(&newCandidate, evt, es, fiducialFlags, isolVarR04, isolVarR03, hcalCuts_); } newCandidate.setFiducialVolumeFlags(fiducialFlags); newCandidate.setIsolationVariables(isolVarR04, isolVarR03); @@ -835,10 +832,10 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, showerShape.sigmaIetaIeta = sigmaIetaIeta; for (uint id = 0; id < showerShape.hcalOverEcal.size(); ++id) { showerShape.hcalOverEcal[id] = - (hcalHelperCone != nullptr) ? hcalHelperCone->hcalESum(*scRef, id + 1, hcalCuts) / scRef->energy() : 0.f; + (hcalHelperCone != nullptr) ? hcalHelperCone->hcalESum(*scRef, id + 1, hcalCuts_) / scRef->energy() : 0.f; showerShape.hcalOverEcalBc[id] = - (hcalHelperBc != nullptr) ? hcalHelperBc->hcalESum(*scRef, id + 1, hcalCuts) / scRef->energy() : 0.f; + (hcalHelperBc != nullptr) ? hcalHelperBc->hcalESum(*scRef, id + 1, hcalCuts_) / scRef->energy() : 0.f; } showerShape.invalidHcal = (hcalHelperBc != nullptr) ? !hcalHelperBc->hasActiveHcal(*scRef) : false; if (hcalHelperBc != nullptr) @@ -950,9 +947,9 @@ void GEDPhotonProducer::fillPhotonCollection(edm::Event& evt, full5x5_showerShape.effSigmaRR = sigmaRR; for (uint id = 0; id < full5x5_showerShape.hcalOverEcal.size(); ++id) { full5x5_showerShape.hcalOverEcal[id] = - (hcalHelperCone != nullptr) ? hcalHelperCone->hcalESum(*scRef, id + 1, hcalCuts) / full5x5_e5x5 : 0.f; + (hcalHelperCone != nullptr) ? hcalHelperCone->hcalESum(*scRef, id + 1, hcalCuts_) / full5x5_e5x5 : 0.f; full5x5_showerShape.hcalOverEcalBc[id] = - (hcalHelperBc != nullptr) ? hcalHelperBc->hcalESum(*scRef, id + 1, hcalCuts) / full5x5_e5x5 : 0.f; + (hcalHelperBc != nullptr) ? hcalHelperBc->hcalESum(*scRef, id + 1, hcalCuts_) / full5x5_e5x5 : 0.f; } full5x5_showerShape.pre7DepthHcal = false; newCandidate.full5x5_setShowerShapeVariables(full5x5_showerShape); diff --git a/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc b/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc index c44344a383ea2..7fed2882a787c 100644 --- a/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc +++ b/RecoEgamma/EgammaPhotonProducers/src/PhotonProducer.cc @@ -49,7 +49,6 @@ class PhotonProducer : public edm::stream::EDProducer<> { public: PhotonProducer(const edm::ParameterSet& ps); - void beginRun(const edm::Run&, const edm::EventSetup&) override; void produce(edm::Event& evt, const edm::EventSetup& es) override; private: @@ -57,6 +56,7 @@ class PhotonProducer : public edm::stream::EDProducer<> { edm::EventSetup const& es, const edm::Handle& photonCoreHandle, const CaloTopology* topology, + const HcalPFCuts* hcalCuts, const EcalRecHitCollection* ecalBarrelHits, const EcalRecHitCollection* ecalEndcapHits, ElectronHcalHelper const& hcalHelperCone, @@ -116,8 +116,7 @@ class PhotonProducer : public edm::stream::EDProducer<> { bool hcalRun2EffDepth_; edm::ESGetToken hcalCutsToken_; - bool cutsFromDB; - HcalPFCuts const* hcalCuts = nullptr; + bool cutsFromDB_; }; #include "FWCore/Framework/interface/MakerMacros.h" @@ -147,9 +146,9 @@ PhotonProducer::PhotonProducer(const edm::ParameterSet& config) posCalculator_ = PositionCalc(posCalcParameters); //Retrieve HCAL PF thresholds - from config or from DB - cutsFromDB = config.getParameter("usePFThresholdsFromDB"); - if (cutsFromDB) { - hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); + cutsFromDB_ = config.getParameter("usePFThresholdsFromDB"); + if (cutsFromDB_) { + hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); } //AA @@ -254,13 +253,11 @@ PhotonProducer::PhotonProducer(const edm::ParameterSet& config) produces(PhotonCollection_); } -void PhotonProducer::beginRun(const edm::Run& run, const edm::EventSetup& theEventSetup) { - if (cutsFromDB) { +void PhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { + HcalPFCuts const* hcalCuts = nullptr; + if (cutsFromDB_) { hcalCuts = &theEventSetup.getData(hcalCutsToken_); } -} - -void PhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEventSetup) { using namespace edm; // nEvt_++; @@ -326,6 +323,7 @@ void PhotonProducer::produce(edm::Event& theEvent, const edm::EventSetup& theEve theEventSetup, photonCoreHandle, topology, + hcalCuts, &barrelRecHits, &endcapRecHits, *hcalHelperCone_, @@ -351,6 +349,7 @@ void PhotonProducer::fillPhotonCollection(edm::Event& evt, edm::EventSetup const& es, const edm::Handle& photonCoreHandle, const CaloTopology* topology, + const HcalPFCuts* hcalCuts, const EcalRecHitCollection* ecalBarrelHits, const EcalRecHitCollection* ecalEndcapHits, ElectronHcalHelper const& hcalHelperCone, diff --git a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py index 92b3c3339d8b0..641f493656177 100644 --- a/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py +++ b/RecoEgamma/EgammaTools/python/egammaObjectModificationsInMiniAOD_cff.py @@ -11,6 +11,7 @@ import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff as ele_RunIIIWinter22_iso_v1 import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff as ele_RunIIIWinter22_noIso_v1 +import RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff as ele_Winter22_HZZ_V1 #photon mva ids import RecoEgamma.PhotonIdentification.Identification.mvaPhotonID_Spring16_nonTrig_V1_cff as pho_spring16_nt_v1 @@ -49,7 +50,8 @@ def setup_mva(val_pset,cat_pset,prod_name,mva_name): ele_fall17_noIso_v2, ele_summer18UL_hzz, ele_RunIIIWinter22_iso_v1, - ele_RunIIIWinter22_noIso_v1 + ele_RunIIIWinter22_noIso_v1, + ele_Winter22_HZZ_V1 ]: setup_mva(egamma_modifications[0].electron_config, diff --git a/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py b/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py index 991e11b123d3a..dbc65a274d42a 100644 --- a/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py +++ b/RecoEgamma/ElectronIdentification/python/ElectronMVAValueMapProducer_cfi.py @@ -48,6 +48,10 @@ import mvaEleID_Summer18UL_ID_ISO_producer_config mvaConfigsForEleProducer.append( mvaEleID_Summer18UL_ID_ISO_producer_config ) +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff \ + import mvaEleID_Winter22_HZZ_V1_producer_config +mvaConfigsForEleProducer.append( mvaEleID_Winter22_HZZ_V1_producer_config ) + electronMVAValueMapProducer = cms.EDProducer('ElectronMVAValueMapProducer', src = cms.InputTag('slimmedElectrons'), mvaConfigurations = mvaConfigsForEleProducer diff --git a/RecoEgamma/ElectronIdentification/python/FWLite.py b/RecoEgamma/ElectronIdentification/python/FWLite.py index 998c190783e40..d42d090967bfa 100644 --- a/RecoEgamma/ElectronIdentification/python/FWLite.py +++ b/RecoEgamma/ElectronIdentification/python/FWLite.py @@ -100,6 +100,8 @@ def passed(self, ele, mva, category, wp): import mvaSpring16WeightFiles_V1 as mvaSpring16GPWeightFiles_V1 from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_HZZ_V1_cff \ import mvaSpring16WeightFiles_V1 as mvaSpring16HZZWeightFiles_V1 +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff \ + import mvaWeightFiles as mvaWinter22HZZWeightFiles_V1 from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_GeneralPurpose_V1_cff \ import workingPoints as mvaSpring16GP_V1_workingPoints @@ -113,6 +115,8 @@ def passed(self, ele, mva, category, wp): import workingPoints as RunIIIWinter22_iso_V1_workingPoints from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff \ import workingPoints as RunIIIWinter22_noIso_V1_workingPoints +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff \ + import workingPoints as Winter22_HZZ_V1_workingPoints # Dictionary with the relecant e/gmma MVAs @@ -129,6 +133,8 @@ def passed(self, ele, mva, category, wp): EleMVA_6CategoriesCuts, mvaSpring16HZZWeightFiles_V1, mvaVariablesFile), "Spring16GPV1" : ElectronMVAID("ElectronMVAEstimatorRun2","Spring16GeneralPurposeV1", EleMVA_3CategoriesCuts, mvaSpring16GPWeightFiles_V1, mvaVariablesFile), + "Winter22HZZV1" : ElectronMVAID("ElectronMVAEstimatorRun2","Winter22HZZV1", + EleMVA_6CategoriesCuts, mvaWinter22HZZWeightFiles_V1, mvaVariablesFileRun3), } working_points = { @@ -144,5 +150,7 @@ def passed(self, ele, mva, category, wp): mvaSpring16HZZ_V1_workingPoints, logistic_transform=True), "Spring16GPV1" : WorkingPoints("ElectronMVAEstimatorRun2","Spring16GeneralPurposeV1", mvaSpring16GP_V1_workingPoints, logistic_transform=True), + "Winter22HZZV1" : WorkingPoints("ElectronMVAEstimatorRun2","Winter22HZZV1", + Winter22_HZZ_V1_workingPoints), } diff --git a/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_Winter22_HZZ_V1_cff.py b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_Winter22_HZZ_V1_cff.py new file mode 100644 index 0000000000000..30046434ceed4 --- /dev/null +++ b/RecoEgamma/ElectronIdentification/python/Identification/mvaElectronID_Winter22_HZZ_V1_cff.py @@ -0,0 +1,49 @@ +import FWCore.ParameterSet.Config as cms +from RecoEgamma.ElectronIdentification.Identification.mvaElectronID_tools import * +from os import path + +mvaTag = "Winter22HZZV1" + +weightFileDir = "RecoEgamma/ElectronIdentification/data/MVAWeightFiles/Winter22HZZV1" + +mvaWeightFiles = cms.vstring( + path.join(weightFileDir, "EB1_5.weights.xml.gz"), # EB1_5 + path.join(weightFileDir, "EB2_5.weights.xml.gz"), # EB2_5 + path.join(weightFileDir, "EE_5.weights.xml.gz"), # EE_5 + path.join(weightFileDir, "EB1_10.weights.xml.gz"), # EB1_10 + path.join(weightFileDir, "EB2_10.weights.xml.gz"), # EB2_10 + path.join(weightFileDir, "EE_10.weights.xml.gz"), # EE_10 + ) + +categoryCuts = cms.vstring( + "pt < 10. && abs(superCluster.eta) < 0.800", + "pt < 10. && abs(superCluster.eta) >= 0.800 && abs(superCluster.eta) < 1.479", + "pt < 10. && abs(superCluster.eta) >= 1.479", + "pt >= 10. && abs(superCluster.eta) < 0.800", + "pt >= 10. && abs(superCluster.eta) >= 0.800 && abs(superCluster.eta) < 1.479", + "pt >= 10. && abs(superCluster.eta) >= 1.479", +) + +mvaEleID_Winter22_HZZ_V1_container = EleMVARaw_WP( + idName = "mvaEleID-Winter22-HZZ-V1", mvaTag = mvaTag, + cutCategory0 = "1.633973689084034", # EB1_5 + cutCategory1 = "1.5499076306249353", # EB2_5 + cutCategory2 = "2.0629564440753247", # EE_5 + cutCategory3 = "0.3685228146685872", # EB1_10 + cutCategory4 = "0.2662407818935475", # EB2_10 + cutCategory5 = "-0.5444837363886459", # EE_10 + ) + + +mvaEleID_Winter22_HZZ_V1_producer_config = cms.PSet( + mvaName = cms.string(mvaClassName), + mvaTag = cms.string(mvaTag), + nCategories = cms.int32(6), + categoryCuts = categoryCuts, + weightFileNames = mvaWeightFiles, + variableDefinition = cms.string(mvaVariablesFileRun3) + ) + +mvaEleID_Winter22_HZZ_V1 = configureVIDMVAEleID( mvaEleID_Winter22_HZZ_V1_container ) + +mvaEleID_Winter22_HZZ_V1.isPOGApproved = cms.untracked.bool(True) diff --git a/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py b/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py index 21c837a167eaf..35a9a769e85c5 100644 --- a/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py +++ b/RecoEgamma/ElectronIdentification/test/testElectronMVARun3_cfg.py @@ -53,6 +53,7 @@ #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V1_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_iso_V1_cff', 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_RunIIIWinter22_noIso_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Winter22_HZZ_V1_cff', ] #add them to the VID producer @@ -71,6 +72,7 @@ "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-iso-V1-wp90", "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp80", "egmGsfElectronIDs:mvaEleID-RunIIIWinter22-noIso-V1-wp90", + "egmGsfElectronIDs:mvaEleID-Winter22-HZZ-V1", #"egmGsfElectronIDs:mvaEleID-Fall17-noIso-V2-wp90", #"egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wpHZZ", # "egmGsfElectronIDs:mvaEleID-Fall17-iso-V2-wp80", @@ -104,7 +106,8 @@ "RunIIIWinter22isoV1wp80", "RunIIIWinter22isoV1wp90", "RunIIIWinter22noIsoV1wp80", - "RunIIIWinter22noIsoV1wp90", + "RunIIIWinter22noIsoV1wp90", + "Winter22isoV1wpHZZ", ), eleMVAValMaps = cms.vstring( #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16GeneralPurposeV1Values", @@ -121,6 +124,8 @@ "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22IsoV1RawValues", "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1Values", "electronMVAValueMapProducer:ElectronMVAEstimatorRun2RunIIIWinter22NoIsoV1RawValues", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Winter22HZZV1Values", + "electronMVAValueMapProducer:ElectronMVAEstimatorRun2Winter22HZZV1RawValues", ), eleMVAValMapLabels = cms.vstring( #"Spring16GPV1Vals", @@ -136,6 +141,8 @@ "RunIIIWinter22NoIsoV1RawVals", "RunIIIWinter22IsoV1Vals", "RunIIIWinter22IsoV1RawVals", + "Winter22HZZV1Vals", + "Winter22HZZV1RawVals", ), eleMVACats = cms.vstring( #"electronMVAValueMapProducer:ElectronMVAEstimatorRun2Fall17NoIsoV1Categories", diff --git a/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h b/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h index c7997deb86031..85204bd35ebb1 100644 --- a/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h +++ b/RecoEgamma/PhotonIdentification/interface/PhotonIsolationCalculator.h @@ -24,6 +24,8 @@ #include "Geometry/CaloTopology/interface/CaloTowerConstituentsMap.h" #include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHcalIsolation.h" +#include "CondFormats/EcalObjects/interface/EcalPFRecHitThresholds.h" +#include "CondFormats/DataRecord/interface/EcalPFRecHitThresholdsRcd.h" class EcalSeverityLevelAlgo; class EcalSeverityLevelAlgoRcd; @@ -105,6 +107,7 @@ class PhotonIsolationCalculator { edm::ESGetToken hcalSevLvlComputerToken_; edm::ESGetToken towerMapToken_; edm::ESGetToken ecalSevLvlToken_; + edm::ESGetToken ecalPFRechitThresholdsToken_; edm::EDGetToken trackInputTag_; edm::EDGetToken beamSpotProducerTag_; diff --git a/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc b/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc index 470fbf3a71109..096fdb2545c5f 100644 --- a/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc +++ b/RecoEgamma/PhotonIdentification/src/PhotonIsolationCalculator.cc @@ -49,8 +49,7 @@ void PhotonIsolationCalculator::setup(const edm::ParameterSet& conf, hcalSevLvlComputerToken_ = decltype(hcalSevLvlComputerToken_){iC.esConsumes()}; towerMapToken_ = decltype(towerMapToken_){iC.esConsumes()}; ecalSevLvlToken_ = iC.esConsumes(); - - // gsfRecoInputTag_ = conf.getParameter("GsfRecoCollection"); + ecalPFRechitThresholdsToken_ = iC.esConsumes(); modulePhiBoundary_ = conf.getParameter("modulePhiBoundary"); moduleEtaBoundary_ = conf.getParameter>("moduleEtaBoundary"); // @@ -500,6 +499,8 @@ double PhotonIsolationCalculator::calculateEcalRecHitIso(const reco::Photon* pho iEvent.getByToken(barrelecalCollection_, ecalhitsCollEB); + auto const& thresholds = iSetup.getData(ecalPFRechitThresholdsToken_); + const EcalRecHitCollection* rechitsCollectionEE_ = ecalhitsCollEE.product(); const EcalRecHitCollection* rechitsCollectionEB_ = ecalhitsCollEB.product(); @@ -514,7 +515,7 @@ double PhotonIsolationCalculator::calculateEcalRecHitIso(const reco::Photon* pho phoIsoEB.setUseNumCrystals(useNumXtals); phoIsoEB.doSeverityChecks(ecalhitsCollEB.product(), severityExclEB_); phoIsoEB.doFlagChecks(flagsEB_); - double ecalIsolEB = phoIsoEB.getEtSum(photon); + double ecalIsolEB = phoIsoEB.getEtSum(photon, thresholds); EgammaRecHitIsolation phoIsoEE( RCone, RConeInner, etaSlice, etMin, eMin, geoHandle, *rechitsCollectionEE_, sevLevel, DetId::Ecal); @@ -524,7 +525,7 @@ double PhotonIsolationCalculator::calculateEcalRecHitIso(const reco::Photon* pho phoIsoEE.doSeverityChecks(ecalhitsCollEE.product(), severityExclEE_); phoIsoEE.doFlagChecks(flagsEE_); - double ecalIsolEE = phoIsoEE.getEtSum(photon); + double ecalIsolEE = phoIsoEE.getEtSum(photon, thresholds); // delete phoIso; double ecalIsol = ecalIsolEB + ecalIsolEE; diff --git a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py index 20c353ae16718..8dd03b2e2ad5c 100644 --- a/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py +++ b/RecoHI/Configuration/python/Reconstruction_hiPF_cff.py @@ -48,10 +48,13 @@ cms.PSet( importerName = cms.string("SuperClusterImporter"), source_eb = cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALBarrel"), source_ee = cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALEndcapWithPreshower"), - source_towers = cms.InputTag("towerMaker"), maximumHoverE = cms.double(0.5), minSuperClusterPt = cms.double(10.0), minPTforBypass = cms.double(100.0), + hbheRecHitsTag = cms.InputTag("hbhereco"), + maxSeverityHB = cms.int32(9), + maxSeverityHE = cms.int32(9), + usePFThresholdsFromDB = cms.bool(True), superClustersArePF = cms.bool(True) ), # all secondary track importers cms.PSet( importerName = cms.string("GeneralTracksImporter"), diff --git a/RecoJets/JetProducers/plugins/FixedGridRhoProducerFastjetFromRecHit.cc b/RecoJets/JetProducers/plugins/FixedGridRhoProducerFastjetFromRecHit.cc index 0281ebfdfa13c..0767ec0ee4460 100644 --- a/RecoJets/JetProducers/plugins/FixedGridRhoProducerFastjetFromRecHit.cc +++ b/RecoJets/JetProducers/plugins/FixedGridRhoProducerFastjetFromRecHit.cc @@ -37,7 +37,6 @@ class FixedGridRhoProducerFastjetFromRecHit : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); private: - void beginRun(edm::Run const &, edm::EventSetup const &) override; void produce(edm::Event &, const edm::EventSetup &) override; std::array getHitP4(const DetId &detId, const double hitE, const CaloGeometry &caloGeometry) const; bool passedHcalNoiseCut(const HBHERecHit &hit, const HcalPFCuts *) const; @@ -82,7 +81,7 @@ FixedGridRhoProducerFastjetFromRecHit::FixedGridRhoProducerFastjetFromRecHit(con << "skipHCAL and skipECAL both can't be True. Please make at least one of them False."; } if (cutsFromDB_) { - hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); + hcalCutsToken_ = esConsumes(edm::ESInputTag("", "withTopo")); } produces(); } @@ -107,13 +106,11 @@ void FixedGridRhoProducerFastjetFromRecHit::fillDescriptions(edm::ConfigurationD FixedGridRhoProducerFastjetFromRecHit::~FixedGridRhoProducerFastjetFromRecHit() = default; -void FixedGridRhoProducerFastjetFromRecHit::beginRun(edm::Run const &r, edm::EventSetup const &es) { +void FixedGridRhoProducerFastjetFromRecHit::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { if (cutsFromDB_) { - paramPF_ = &es.getData(hcalCutsToken_); + paramPF_ = &iSetup.getData(hcalCutsToken_); } -} -void FixedGridRhoProducerFastjetFromRecHit::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { std::vector inputs; auto const &thresholds = iSetup.getData(ecalPFRecHitThresholdsToken_); auto const &caloGeometry = iSetup.getData(caloGeometryToken_); diff --git a/RecoLocalCalo/EcalRecProducers/plugins/EcalDetIdToBeRecoveredProducer.cc b/RecoLocalCalo/EcalRecProducers/plugins/EcalDetIdToBeRecoveredProducer.cc index 5bc751776abd4..765bc264bb38f 100644 --- a/RecoLocalCalo/EcalRecProducers/plugins/EcalDetIdToBeRecoveredProducer.cc +++ b/RecoLocalCalo/EcalRecProducers/plugins/EcalDetIdToBeRecoveredProducer.cc @@ -38,7 +38,6 @@ class EcalDetIdToBeRecoveredProducer : public edm::stream::EDProducer<> { public: explicit EcalDetIdToBeRecoveredProducer(const edm::ParameterSet& ps); void produce(edm::Event& evt, const edm::EventSetup& es) final; - void beginRun(edm::Run const& run, const edm::EventSetup& es) final; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: @@ -82,9 +81,9 @@ class EcalDetIdToBeRecoveredProducer : public edm::stream::EDProducer<> { }; EcalDetIdToBeRecoveredProducer::EcalDetIdToBeRecoveredProducer(const edm::ParameterSet& ps) { - ecalMappingToken_ = esConsumes(); - channelStatusToken_ = esConsumes(); - ttMapToken_ = esConsumes(); + ecalMappingToken_ = esConsumes(); + channelStatusToken_ = esConsumes(); + ttMapToken_ = esConsumes(); // SRP collections ebSrFlagToken_ = consumes(ps.getParameter("ebSrFlagCollection")); eeSrFlagToken_ = consumes(ps.getParameter("eeSrFlagCollection")); @@ -119,16 +118,6 @@ EcalDetIdToBeRecoveredProducer::EcalDetIdToBeRecoveredProducer(const edm::Parame produces>(scDetIdCollection_); } -void EcalDetIdToBeRecoveredProducer::beginRun(edm::Run const& run, const edm::EventSetup& es) { - edm::ESHandle pEcalMapping = es.getHandle(ecalMappingToken_); - ecalMapping_ = pEcalMapping.product(); - - edm::ESHandle pChStatus = es.getHandle(channelStatusToken_); - chStatus_ = pChStatus.product(); - - ttMap_ = es.getHandle(ttMapToken_); -} - // fuction return true if "coll" have "item" template bool include(const CollT& coll, const ItemT& item) { @@ -137,6 +126,10 @@ bool include(const CollT& coll, const ItemT& item) { } void EcalDetIdToBeRecoveredProducer::produce(edm::Event& ev, const edm::EventSetup& es) { + ecalMapping_ = &es.getData(ecalMappingToken_); + chStatus_ = &es.getData(channelStatusToken_); + ttMap_ = es.getHandle(ttMapToken_); + std::vector> ebDetIdColls; std::vector> eeDetIdColls; std::vector> ttColls; diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc index aa0e41bd82b6c..5fdc4fbd3a93a 100644 --- a/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc +++ b/RecoLocalCalo/HGCalRecProducers/plugins/EERecHitGPU.cc @@ -25,7 +25,6 @@ class EERecHitGPU : public edm::stream::EDProducer<> { public: explicit EERecHitGPU(const edm::ParameterSet &ps); ~EERecHitGPU() override; - void beginRun(edm::Run const &, edm::EventSetup const &) override; void produce(edm::Event &, const edm::EventSetup &) override; @@ -106,8 +105,6 @@ void EERecHitGPU::assert_sizes_constants_(const HGCConstantVectorData &vd) { "weights", HGCeeUncalibRecHitConstantData::ee_weights, vdata_.weights_.size()); } -void EERecHitGPU::beginRun(edm::Run const &, edm::EventSetup const &setup) {} - void EERecHitGPU::produce(edm::Event &event, const edm::EventSetup &setup) { cms::cuda::ScopedContextProduce ctx{event.streamID()}; diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc index b9c08de83d519..cc2d206fe67bc 100644 --- a/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEBRecHitGPU.cc @@ -25,7 +25,6 @@ class HEBRecHitGPU : public edm::stream::EDProducer<> { public: explicit HEBRecHitGPU(const edm::ParameterSet &ps); ~HEBRecHitGPU() override; - void beginRun(edm::Run const &, edm::EventSetup const &) override; void produce(edm::Event &, const edm::EventSetup &) override; @@ -88,8 +87,6 @@ void HEBRecHitGPU::assert_sizes_constants_(const HGCConstantVectorData &vd) { edm::LogError("WrongSize") << this->assert_error_message_("weights", vdata_.fCPerMIP_.size()); } -void HEBRecHitGPU::beginRun(edm::Run const &, edm::EventSetup const &setup) {} - void HEBRecHitGPU::produce(edm::Event &event, const edm::EventSetup &setup) { cms::cuda::ScopedContextProduce ctx{event.streamID()}; diff --git a/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc index 7ceedccb5d28e..eeb1dc0209817 100644 --- a/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc +++ b/RecoLocalCalo/HGCalRecProducers/plugins/HEFRecHitGPU.cc @@ -25,7 +25,6 @@ class HEFRecHitGPU : public edm::stream::EDProducer<> { public: explicit HEFRecHitGPU(const edm::ParameterSet &ps); ~HEFRecHitGPU() override; - void beginRun(edm::Run const &, edm::EventSetup const &) override; void produce(edm::Event &, const edm::EventSetup &) override; @@ -108,8 +107,6 @@ void HEFRecHitGPU::assert_sizes_constants_(const HGCConstantVectorData &vd) { "weights", HGChefUncalibRecHitConstantData::hef_weights, vdata_.weights_.size()); } -void HEFRecHitGPU::beginRun(edm::Run const &, edm::EventSetup const &setup) {} - void HEFRecHitGPU::produce(edm::Event &event, const edm::EventSetup &setup) { cms::cuda::ScopedContextProduce ctx{event.streamID()}; diff --git a/RecoLocalCalo/HcalRecProducers/src/HFPreReconstructor.cc b/RecoLocalCalo/HcalRecProducers/src/HFPreReconstructor.cc index 4dc732c7666fd..ff751d2e830e5 100644 --- a/RecoLocalCalo/HcalRecProducers/src/HFPreReconstructor.cc +++ b/RecoLocalCalo/HcalRecProducers/src/HFPreReconstructor.cc @@ -60,7 +60,6 @@ class HFPreReconstructor : public edm::stream::EDProducer<> { typedef std::pair PmtAnodeId; typedef std::pair QIE10InfoWithId; - void beginRun(const edm::Run&, const edm::EventSetup&) override; void produce(edm::Event&, const edm::EventSetup&) override; // Module configuration parameters @@ -202,8 +201,6 @@ void HFPreReconstructor::fillInfos(const edm::Event& e, const edm::EventSetup& e } } -void HFPreReconstructor::beginRun(const edm::Run& r, const edm::EventSetup& es) {} - // ------------ method called to produce the data ------------ void HFPreReconstructor::produce(edm::Event& e, const edm::EventSetup& eventSetup) { // Process the input data diff --git a/RecoLocalFastTime/FTLCommonAlgos/src/MTDTimeCalib.cc b/RecoLocalFastTime/FTLCommonAlgos/src/MTDTimeCalib.cc index 6a4932e4c3a1d..d798435d55230 100644 --- a/RecoLocalFastTime/FTLCommonAlgos/src/MTDTimeCalib.cc +++ b/RecoLocalFastTime/FTLCommonAlgos/src/MTDTimeCalib.cc @@ -39,15 +39,12 @@ float MTDTimeCalib::getTimeCalib(const MTDDetId& id) const { const RectangularMTDTopology& topo = static_cast(topoproxy.specificTopology()); BTLDetId::CrysLayout btlL = MTDTopologyMode::crysLayoutFromTopoMode(topo_->getMTDTopologyMode()); - if (btlL == BTLDetId::CrysLayout::tile) { - time_calib -= btlLightCollTime_; //simply remove the offset introduced at sim level - } else if (btlL == BTLDetId::CrysLayout::bar || btlL == BTLDetId::CrysLayout::barphiflat || - btlL == BTLDetId::CrysLayout::v2) { + if (static_cast(btlL) >= static_cast(BTLDetId::CrysLayout::barphiflat)) { //for bars in phi time_calib -= 0.5 * topo.pitch().first * btlLightCollSlope_; //time offset for bar time is L/2v - } else if (btlL == BTLDetId::CrysLayout::barzflat) { - //for bars in z - time_calib -= 0.5 * topo.pitch().second * btlLightCollSlope_; //time offset for bar time is L/2v + } else { + throw cms::Exception("MTDTimeCalib") + << "BTL topology mode " << static_cast(btlL) << " unsupported! Aborting"; } } else if (id.mtdSubDetector() == MTDDetId::ETL) { time_calib += etlTimeOffset_; diff --git a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelPhase2DigiToClusterCUDA.cc b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelPhase2DigiToClusterCUDA.cc index 260b288b581db..e68c8074d8535 100644 --- a/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelPhase2DigiToClusterCUDA.cc +++ b/RecoLocalTracker/SiPixelClusterizer/plugins/SiPixelPhase2DigiToClusterCUDA.cc @@ -69,6 +69,7 @@ class SiPixelPhase2DigiToClusterCUDA : public edm::stream::EDProducer(gpuClustering::maxNumDigis, ctx.stream()); auto yDigis = cms::cuda::make_host_unique(gpuClustering::maxNumDigis, ctx.stream()); @@ -126,20 +127,23 @@ void SiPixelPhase2DigiToClusterCUDA::acquire(const edm::Event& iEvent, const GeomDetUnit* genericDet = geom_->idToDetUnit(detIdObject); auto const gind = genericDet->index(); for (auto const& px : *DSViter) { - moduleIds[nDigis] = uint16_t(gind); + moduleIds[nDigis_] = uint16_t(gind); - xDigis[nDigis] = uint16_t(px.row()); - yDigis[nDigis] = uint16_t(px.column()); - adcDigis[nDigis] = uint16_t(px.adc()); + xDigis[nDigis_] = uint16_t(px.row()); + yDigis[nDigis_] = uint16_t(px.column()); + adcDigis[nDigis_] = uint16_t(px.adc()); - packedData[nDigis] = uint32_t(px.packedData()); + packedData[nDigis_] = uint32_t(px.packedData()); - rawIds[nDigis] = uint32_t(detid); + rawIds[nDigis_] = uint32_t(detid); - nDigis++; + nDigis_++; } } + if (nDigis_ == 0) + return; + gpuAlgo_.makePhase2ClustersAsync(clusterThresholds_, moduleIds.get(), xDigis.get(), @@ -147,13 +151,22 @@ void SiPixelPhase2DigiToClusterCUDA::acquire(const edm::Event& iEvent, adcDigis.get(), packedData.get(), rawIds.get(), - nDigis, + nDigis_, ctx.stream()); } void SiPixelPhase2DigiToClusterCUDA::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { cms::cuda::ScopedContextProduce ctx{ctxState_}; + if (nDigis_ == 0) { + ctx.emplace(iEvent, digiPutToken_, nDigis_, ctx.stream()); + ctx.emplace(iEvent, clusterPutToken_, pixelTopology::Phase2::numberOfModules, ctx.stream()); + if (includeErrors_) { + ctx.emplace(iEvent, digiErrorPutToken_, SiPixelDigiErrorsCUDA{}); + } + return; + } + auto tmp = gpuAlgo_.getResults(); ctx.emplace(iEvent, digiPutToken_, std::move(tmp.first)); ctx.emplace(iEvent, clusterPutToken_, std::move(tmp.second)); diff --git a/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS.sh b/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS.sh new file mode 100755 index 0000000000000..80b93b2230b07 --- /dev/null +++ b/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS.sh @@ -0,0 +1,5 @@ + #!/bin/bash -ex +TEST_DIR=$CMSSW_BASE/src/RecoPPS/Local/test +echo "test dir: $TEST_DIR" + +cmsRun ${TEST_DIR}/2023_lhcinfo_test_recoCTPPS_cfg.py diff --git a/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS_cfg.py b/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS_cfg.py index 790d9e66b512d..f15d42b838374 100644 --- a/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS_cfg.py +++ b/RecoPPS/Local/test/2023_lhcinfo_test_recoCTPPS_cfg.py @@ -3,7 +3,7 @@ process = cms.Process('RECODQM', Run3) -process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(-1) ) +process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(50) ) process.verbosity = cms.untracked.PSet( input = cms.untracked.int32(-1) ) # minimum of logs @@ -31,7 +31,7 @@ from Configuration.AlCa.GlobalTag import GlobalTag -process.GlobalTag.globaltag = "130X_dataRun3_Prompt_forLHCInfo_Candidate_2023_08_08_10_52_01" +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run3_data') # local RP reconstruction chain with standard settings process.load("RecoPPS.Configuration.recoCTPPS_cff") diff --git a/RecoPPS/Local/test/BuildFile.xml b/RecoPPS/Local/test/BuildFile.xml index 7f53a44b17c3a..eb1c199017400 100644 --- a/RecoPPS/Local/test/BuildFile.xml +++ b/RecoPPS/Local/test/BuildFile.xml @@ -1 +1,2 @@ + diff --git a/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc b/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc index 73809feb4aae5..43c3a0a5b2663 100644 --- a/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc +++ b/RecoPPS/ProtonReconstruction/plugins/CTPPSProtonProducer.cc @@ -189,7 +189,7 @@ void CTPPSProtonProducer::fillDescriptions(edm::ConfigurationDescriptions &descr desc.add("multiRPAlgorithm", "chi2") ->setComment("algorithm for multi-RP reco, options include chi2, newton, anal-iter"); - descriptions.add("ctppsProtons", desc); + descriptions.add("ctppsProtonsDefault", desc); } //---------------------------------------------------------------------------------------------------- diff --git a/RecoPPS/ProtonReconstruction/python/ctppsProtons_cff.py b/RecoPPS/ProtonReconstruction/python/ctppsProtons_cff.py index 2a564e400b589..25f6dba850683 100644 --- a/RecoPPS/ProtonReconstruction/python/ctppsProtons_cff.py +++ b/RecoPPS/ProtonReconstruction/python/ctppsProtons_cff.py @@ -1,17 +1,6 @@ import FWCore.ParameterSet.Config as cms -# import default alignment settings -from CalibPPS.ESProducers.ctppsAlignment_cff import * +from RecoPPS.ProtonReconstruction.ctppsProtons_cfi import * # import default optics settings from CalibPPS.ESProducers.ctppsOpticalFunctions_cff import * - -# import and adjust proton-reconstructions settings -from RecoPPS.ProtonReconstruction.ctppsProtons_cfi import * - - -ctppsProtons.pixelDiscardBXShiftedTracks = True -ctppsProtons.default_time = -999. - -from Configuration.Eras.Modifier_run3_common_cff import run3_common -run3_common.toModify(ctppsProtons, useNewLHCInfo = True) \ No newline at end of file diff --git a/RecoPPS/ProtonReconstruction/python/ctppsProtons_cfi.py b/RecoPPS/ProtonReconstruction/python/ctppsProtons_cfi.py new file mode 100644 index 0000000000000..9421ed546ddd2 --- /dev/null +++ b/RecoPPS/ProtonReconstruction/python/ctppsProtons_cfi.py @@ -0,0 +1,12 @@ +# import and adjust proton-reconstructions settings +from RecoPPS.ProtonReconstruction.ctppsProtonsDefault_cfi import ctppsProtonsDefault as _ctppsProtonsDefault +ctppsProtons = _ctppsProtonsDefault.clone( + pixelDiscardBXShiftedTracks = True, + default_time = -999. +) + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsProtons, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsProtons, useNewLHCInfo = False) diff --git a/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h b/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h index dded4580d0e1a..9003ce1c527b7 100644 --- a/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h +++ b/RecoParticleFlow/PFClusterProducer/interface/PFClusterParamsSoA.h @@ -1,5 +1,5 @@ -#ifndef RecoParticleFlow_PFClusterProducer_interface_PFRecHitHBHEParamsSoA_h -#define RecoParticleFlow_PFClusterProducer_interface_PFRecHitHBHEParamsSoA_h +#ifndef RecoParticleFlow_PFClusterProducer_interface_PFClusterParamsSoA_h +#define RecoParticleFlow_PFClusterProducer_interface_PFClusterParamsSoA_h #include "DataFormats/SoATemplate/interface/SoACommon.h" #include "DataFormats/SoATemplate/interface/SoALayout.h" @@ -9,12 +9,12 @@ namespace reco { GENERATE_SOA_LAYOUT(PFClusterParamsSoALayout, SOA_SCALAR(int32_t, nNeigh), - SOA_SCALAR(float, seedPt2ThresholdEB), - SOA_SCALAR(float, seedPt2ThresholdEE), - SOA_COLUMN(float, seedEThresholdEB_vec), - SOA_COLUMN(float, seedEThresholdEE_vec), - SOA_COLUMN(float, topoEThresholdEB_vec), - SOA_COLUMN(float, topoEThresholdEE_vec), + SOA_SCALAR(float, seedPt2ThresholdHB), + SOA_SCALAR(float, seedPt2ThresholdHE), + SOA_COLUMN(float, seedEThresholdHB_vec), + SOA_COLUMN(float, seedEThresholdHE_vec), + SOA_COLUMN(float, topoEThresholdHB_vec), + SOA_COLUMN(float, topoEThresholdHE_vec), SOA_SCALAR(float, showerSigma2), SOA_SCALAR(float, minFracToKeep), SOA_SCALAR(float, minFracTot), @@ -23,8 +23,8 @@ namespace reco { SOA_SCALAR(float, stoppingTolerance), SOA_SCALAR(float, minFracInCalc), SOA_SCALAR(float, minAllowedNormalization), - SOA_COLUMN(float, recHitEnergyNormInvEB_vec), - SOA_COLUMN(float, recHitEnergyNormInvEE_vec), + SOA_COLUMN(float, recHitEnergyNormInvHB_vec), + SOA_COLUMN(float, recHitEnergyNormInvHE_vec), SOA_SCALAR(float, barrelTimeResConsts_corrTermLowE), SOA_SCALAR(float, barrelTimeResConsts_threshLowE), SOA_SCALAR(float, barrelTimeResConsts_noiseTerm), diff --git a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc index 36204501d432d..4027bb340a168 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/LegacyPFClusterProducer.cc @@ -22,6 +22,9 @@ #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Utilities/interface/EDPutToken.h" +#include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h" +#include "CondTools/Hcal/interface/HcalPFCutsHandler.h" + #include "DataFormats/Common/interface/Handle.h" #include "DataFormats/DetId/interface/DetId.h" #include "DataFormats/ParticleFlowReco/interface/PFRecHitHostCollection.h" @@ -39,7 +42,9 @@ class LegacyPFClusterProducer : public edm::stream::EDProducer<> { InputPFRecHitSoA_Token_{consumes(config.getParameter("PFRecHitsLabelIn"))}, pfClusParamsToken_(esConsumes(config.getParameter("pfClusterParams"))), legacyPfClustersToken_(produces()), - recHitsLabel_(consumes(config.getParameter("recHitsSource"))) { + recHitsLabel_(consumes(config.getParameter("recHitsSource"))), + hcalCutsToken_(esConsumes(edm::ESInputTag("", "withTopo"))), + cutsFromDB_(config.getParameter("usePFThresholdsFromDB")) { edm::ConsumesCollector cc = consumesCollector(); //setup pf cluster builder if requested @@ -65,6 +70,7 @@ class LegacyPFClusterProducer : public edm::stream::EDProducer<> { desc.add("PFRecHitsLabelIn"); desc.add("pfClusterParams"); desc.add("recHitsSource"); + desc.add("usePFThresholdsFromDB", true); { edm::ParameterSetDescription pfClusterBuilder; pfClusterBuilder.add("maxIterations", 5); @@ -180,6 +186,8 @@ class LegacyPFClusterProducer : public edm::stream::EDProducer<> { const edm::ESGetToken pfClusParamsToken_; const edm::EDPutTokenT legacyPfClustersToken_; const edm::EDGetTokenT recHitsLabel_; + const edm::ESGetToken hcalCutsToken_; + const bool cutsFromDB_; // the actual algorithm std::unique_ptr positionCalc_; std::unique_ptr allCellsPositionCalc_; @@ -188,6 +196,8 @@ class LegacyPFClusterProducer : public edm::stream::EDProducer<> { void LegacyPFClusterProducer::produce(edm::Event& event, const edm::EventSetup& setup) { const reco::PFRecHitHostCollection& pfRecHits = event.get(InputPFRecHitSoA_Token_); + HcalPFCuts const* paramPF = cutsFromDB_ ? &setup.getData(hcalCutsToken_) : nullptr; + auto const& pfClusterSoA = event.get(pfClusterSoAToken_).const_view(); auto const& pfRecHitFractionSoA = event.get(pfRecHitFractionSoAToken_).const_view(); @@ -221,11 +231,9 @@ void LegacyPFClusterProducer::produce(edm::Event& event, const edm::EventSetup& // Now PFRecHitFraction of this PFCluster is set. Now compute calculateAndSetPosition (energy, position etc) if (nTopoSeeds[pfClusterSoA[i].topoId()] == 1 && allCellsPositionCalc_) { - allCellsPositionCalc_->calculateAndSetPosition( - temp, nullptr); // temporarily use nullptr until we can properly set GT thresholds + allCellsPositionCalc_->calculateAndSetPosition(temp, paramPF); } else { - positionCalc_->calculateAndSetPosition( - temp, nullptr); // temporarily use nullptr until we can properly set GT thresholds + positionCalc_->calculateAndSetPosition(temp, paramPF); } out.emplace_back(std::move(temp)); } diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc index 8a5da486752ce..36d4b025c3a48 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterParamsESProducer.cc @@ -35,17 +35,17 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { if (thresholds.size() != kMaxDepth_barrel) throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_barrel << ") for \"\" vector of det = \"" << det << "\""; - view.seedPt2ThresholdEB() = seedPt2Threshold; + view.seedPt2ThresholdHB() = seedPt2Threshold; for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.seedEThresholdEB_vec()[idx] = thresholds[idx]; + view.seedEThresholdHB_vec()[idx] = thresholds[idx]; } } else if (det == "HCAL_ENDCAP") { if (thresholds.size() != kMaxDepth_endcap) throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_endcap << ") for \"\" vector of det = \"" << det << "\""; - view.seedPt2ThresholdEE() = seedPt2Threshold; + view.seedPt2ThresholdHE() = seedPt2Threshold; for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.seedEThresholdEE_vec()[idx] = thresholds[idx]; + view.seedEThresholdHE_vec()[idx] = thresholds[idx]; } } else { throw cms::Exception("Configuration") << "Unknown detector when parsing seedFinder: " << det; @@ -63,14 +63,14 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_barrel << ") for \"\" vector of det = \"" << det << "\""; for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.topoEThresholdEB_vec()[idx] = thresholds[idx]; + view.topoEThresholdHB_vec()[idx] = thresholds[idx]; } } else if (det == "HCAL_ENDCAP") { if (thresholds.size() != kMaxDepth_endcap) throw cms::Exception("Configuration") << "Invalid size (" << thresholds.size() << " != " << kMaxDepth_endcap << ") for \"\" vector of det = \"" << det << "\""; for (size_t idx = 0; idx < thresholds.size(); ++idx) { - view.topoEThresholdEE_vec()[idx] = thresholds[idx]; + view.topoEThresholdHE_vec()[idx] = thresholds[idx]; } } else { throw cms::Exception("Configuration") << "Unknown detector when parsing initClusteringStep: " << det; @@ -99,7 +99,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { << "Invalid size (" << recHitNorms.size() << " != " << kMaxDepth_barrel << ") for \"\" vector of det = \"" << det << "\""; for (size_t idx = 0; idx < recHitNorms.size(); ++idx) { - view.recHitEnergyNormInvEB_vec()[idx] = 1. / recHitNorms[idx]; + view.recHitEnergyNormInvHB_vec()[idx] = 1. / recHitNorms[idx]; } } else if (det == "HCAL_ENDCAP") { if (recHitNorms.size() != kMaxDepth_endcap) @@ -107,7 +107,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { << "Invalid size (" << recHitNorms.size() << " != " << kMaxDepth_endcap << ") for \"\" vector of det = \"" << det << "\""; for (size_t idx = 0; idx < recHitNorms.size(); ++idx) { - view.recHitEnergyNormInvEE_vec()[idx] = 1. / recHitNorms[idx]; + view.recHitEnergyNormInvHE_vec()[idx] = 1. / recHitNorms[idx]; } } else { throw cms::Exception("Configuration") << "Unknown detector when parsing recHitEnergyNorms: " << det; diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc index e4291f8e705c8..bde6db46b08d9 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducer.cc @@ -18,6 +18,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { public: PFClusterSoAProducer(edm::ParameterSet const& config) : pfClusParamsToken(esConsumes(config.getParameter("pfClusterParams"))), + topologyToken_(esConsumes(config.getParameter("topology"))), inputPFRecHitSoA_Token_{consumes(config.getParameter("pfRecHits"))}, outputPFClusterSoA_Token_{produces()}, outputPFRHFractionSoA_Token_{produces()}, @@ -26,6 +27,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void produce(device::Event& event, device::EventSetup const& setup) override { const reco::PFClusterParamsDeviceCollection& params = setup.getData(pfClusParamsToken); + const reco::PFRecHitHCALTopologyDeviceCollection& topology = setup.getData(topologyToken_); const reco::PFRecHitHostCollection& pfRecHits = event.get(inputPFRecHitSoA_Token_); const int nRH = pfRecHits->size(); @@ -36,7 +38,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { PFClusterProducerKernel kernel(event.queue(), pfRecHits); kernel.execute( - event.queue(), params, pfClusteringVars, pfClusteringEdgeVars, pfRecHits, pfClusters, pfrhFractions); + event.queue(), params, topology, pfClusteringVars, pfClusteringEdgeVars, pfRecHits, pfClusters, pfrhFractions); if (synchronise_) alpaka::wait(event.queue()); @@ -49,6 +51,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { edm::ParameterSetDescription desc; desc.add("pfRecHits"); desc.add("pfClusterParams"); + desc.add("topology"); desc.add("synchronise"); desc.add("pfRecHitFractionAllocation", 120); descriptions.addWithDefaultLabel(desc); @@ -56,6 +59,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { private: const device::ESGetToken pfClusParamsToken; + const device::ESGetToken topologyToken_; const edm::EDGetTokenT inputPFRecHitSoA_Token_; const device::EDPutToken outputPFClusterSoA_Token_; const device::EDPutToken outputPFRHFractionSoA_Token_; diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc index 6b0f4dc27d88b..ea7816ce0cb87 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.dev.cc @@ -88,14 +88,16 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // Processing single seed clusters // Device function designed to be called by all threads of a given block template >> - ALPAKA_FN_ACC static void hcalFastCluster_singleSeed(const TAcc& acc, - reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, - int topoId, // from selection - int nRHTopo, // from selection - reco::PFRecHitDeviceCollection::ConstView pfRecHits, - reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, - reco::PFClusterDeviceCollection::View clusterView, - reco::PFRecHitFractionDeviceCollection::View fracView) { + ALPAKA_FN_ACC static void hcalFastCluster_singleSeed( + const TAcc& acc, + reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, + int topoId, // from selection + int nRHTopo, // from selection + reco::PFRecHitDeviceCollection::ConstView pfRecHits, + reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, + reco::PFClusterDeviceCollection::View clusterView, + reco::PFRecHitFractionDeviceCollection::View fracView) { int tid = alpaka::getIdx(acc)[0u]; // thread index is rechit number // Declaration of shared variables int& i = alpaka::declareSharedVar(acc); @@ -119,13 +121,17 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { clusterEnergy = seedEnergy; tol = pfClusParams.stoppingTolerance(); // stopping tolerance * tolerance scaling - if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) - rhENormInv = pfClusParams.recHitEnergyNormInvEB_vec()[pfRecHits[i].depth() - 1]; - else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) - rhENormInv = pfClusParams.recHitEnergyNormInvEE_vec()[pfRecHits[i].depth() - 1]; - else { - rhENormInv = 0.; - printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + if (topology.cutsFromDB()) { + rhENormInv = (1.f / topology[pfRecHits[i].denseId()].noiseThreshold()); + } else { + if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) + rhENormInv = pfClusParams.recHitEnergyNormInvHB_vec()[pfRecHits[i].depth() - 1]; + else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) + rhENormInv = pfClusParams.recHitEnergyNormInvHE_vec()[pfRecHits[i].depth() - 1]; + else { + rhENormInv = 0.; + printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + } } iter = 0; @@ -161,7 +167,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos.z - rhPos.z) * (clusterPos.z - rhPos.z); d2 = dist2 / pfClusParams.showerSigma2(); - fraction = clusterEnergy * rhENormInv * expf(-0.5 * d2); + fraction = clusterEnergy * rhENormInv * expf(-0.5f * d2); // For single seed clusters, rechit fraction is either 1 (100%) or -1 (not included) if (fraction > pfClusParams.minFracTot() && d2 < cutoffDistance) @@ -253,6 +259,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { ALPAKA_FN_ACC static void hcalFastCluster_multiSeedParallel( const TAcc& acc, reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, // from selection int nSeeds, // from selection int nRHTopo, // from selection @@ -289,12 +296,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { notDone = true; int i = pfClusteringVars[topoSeedBegin].topoSeedList(); - if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) - rhENormInv = pfClusParams.recHitEnergyNormInvEB_vec()[pfRecHits[i].depth() - 1]; - else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) - rhENormInv = pfClusParams.recHitEnergyNormInvEE_vec()[pfRecHits[i].depth() - 1]; - else - printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + + if (topology.cutsFromDB()) { + rhENormInv = (1.f / topology[pfRecHits[i].denseId()].noiseThreshold()); + } else { + if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) + rhENormInv = pfClusParams.recHitEnergyNormInvHB_vec()[pfRecHits[i].depth() - 1]; + else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) + rhENormInv = pfClusParams.recHitEnergyNormInvHE_vec()[pfRecHits[i].depth() - 1]; + else { + rhENormInv = 0.; + printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + } + } } alpaka::syncBlockThreads(acc); // all threads call sync @@ -391,7 +405,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos[s].z - rhThreadPos.z) * (clusterPos[s].z - rhThreadPos.z); float d2 = dist2 / pfClusParams.showerSigma2(); - float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5 * d2); + float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5f * d2); rhFracSum[tid] += fraction; } @@ -406,7 +420,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos[s].z - rhThreadPos.z) * (clusterPos[s].z - rhThreadPos.z); float d2 = dist2 / pfClusParams.showerSigma2(); - float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5 * d2); + float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5f * d2); if (rhFracSum[tid] > pfClusParams.minFracTot()) { float fracpct = fraction / rhFracSum[tid]; @@ -531,6 +545,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC static void hcalFastCluster_exotic(const TAcc& acc, reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, int nSeeds, int nRHTopo, @@ -572,12 +587,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { notDone = true; int i = pfClusteringVars[topoSeedBegin].topoSeedList(); - if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) - rhENormInv = pfClusParams.recHitEnergyNormInvEB_vec()[pfRecHits[i].depth() - 1]; - else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) - rhENormInv = pfClusParams.recHitEnergyNormInvEE_vec()[pfRecHits[i].depth() - 1]; - else - printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + + if (topology.cutsFromDB()) { + rhENormInv = (1.f / topology[pfRecHits[i].denseId()].noiseThreshold()); + } else { + if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) + rhENormInv = pfClusParams.recHitEnergyNormInvHB_vec()[pfRecHits[i].depth() - 1]; + else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) + rhENormInv = pfClusParams.recHitEnergyNormInvHE_vec()[pfRecHits[i].depth() - 1]; + else { + rhENormInv = 0.; + printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + } + } } alpaka::syncBlockThreads(acc); // all threads call sync @@ -651,7 +673,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos[s].z - rhThreadPos.z) * (clusterPos[s].z - rhThreadPos.z); float d2 = dist2 / pfClusParams.showerSigma2(); - float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5 * d2); + float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5f * d2); rhFracSum[tid] += fraction; } @@ -669,7 +691,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos[s].z - rhThreadPos.z) * (clusterPos[s].z - rhThreadPos.z); float d2 = dist2 / pfClusParams.showerSigma2(); - float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5 * d2); + float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5f * d2); if (rhFracSum[tid] > pfClusParams.minFracTot()) { float fracpct = fraction / rhFracSum[tid]; @@ -798,6 +820,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { ALPAKA_FN_ACC static void hcalFastCluster_multiSeedIterative( const TAcc& acc, reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, int topoId, int nSeeds, int nRHTopo, @@ -831,12 +854,19 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { notDone = true; int i = pfClusteringVars[topoSeedBegin].topoSeedList(); - if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) - rhENormInv = pfClusParams.recHitEnergyNormInvEB_vec()[pfRecHits[i].depth() - 1]; - else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) - rhENormInv = pfClusParams.recHitEnergyNormInvEE_vec()[pfRecHits[i].depth() - 1]; - else - printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + + if (topology.cutsFromDB()) { + rhENormInv = (1.f / topology[pfRecHits[i].denseId()].noiseThreshold()); + } else { + if (pfRecHits[i].layer() == PFLayer::HCAL_BARREL1) + rhENormInv = pfClusParams.recHitEnergyNormInvHB_vec()[pfRecHits[i].depth() - 1]; + else if (pfRecHits[i].layer() == PFLayer::HCAL_ENDCAP) + rhENormInv = pfClusParams.recHitEnergyNormInvHE_vec()[pfRecHits[i].depth() - 1]; + else { + rhENormInv = 0.; + printf("Rechit %d has invalid layer %d!\n", i, pfRecHits[i].layer()); + } + } } alpaka::syncBlockThreads(acc); // all threads call sync @@ -910,7 +940,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos[s].z - rhThreadPos.z) * (clusterPos[s].z - rhThreadPos.z); float d2 = dist2 / pfClusParams.showerSigma2(); - float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5 * d2); + float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5f * d2); rhFracSum[tid] += fraction; } @@ -928,7 +958,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { (clusterPos[s].z - rhThreadPos.z) * (clusterPos[s].z - rhThreadPos.z); float d2 = dist2 / pfClusParams.showerSigma2(); - float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5 * d2); + float fraction = clusterEnergy[s] * rhENormInv * expf(-0.5f * d2); if (rhFracSum[tid] > pfClusParams.minFracTot()) { float fracpct = fraction / rhFracSum[tid]; @@ -1057,6 +1087,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { ALPAKA_FN_ACC void operator()(const TAcc& acc, reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, const reco::PFRecHitHostCollection::ConstView pfRecHits, reco::PFClusterDeviceCollection::View clusterView, reco::PFRecHitFractionDeviceCollection::View fracView, @@ -1082,15 +1113,28 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { int depthOffset = pfRecHits[i].depth() - 1; float energy = pfRecHits[i].energy(); Position3 pos = Position3{pfRecHits[i].x(), pfRecHits[i].y(), pfRecHits[i].z()}; + float seedThreshold = 9999.; + float topoThreshold = 9999.; + + if (topology.cutsFromDB()) { + seedThreshold = topology[pfRecHits[i].denseId()].seedThreshold(); + topoThreshold = topology[pfRecHits[i].denseId()].noiseThreshold(); + } else { + if (layer == PFLayer::HCAL_BARREL1) { + seedThreshold = pfClusParams.seedEThresholdHB_vec()[depthOffset]; + topoThreshold = pfClusParams.topoEThresholdHB_vec()[depthOffset]; + } else if (layer == PFLayer::HCAL_ENDCAP) { + seedThreshold = pfClusParams.seedEThresholdHE_vec()[depthOffset]; + topoThreshold = pfClusParams.topoEThresholdHE_vec()[depthOffset]; + } + } // cmssdt.cern.ch/lxr/source/DataFormats/ParticleFlowReco/interface/PFRecHit.h#0108 float pt2 = energy * energy * (pos.x * pos.x + pos.y * pos.y) / (pos.x * pos.x + pos.y * pos.y + pos.z * pos.z); // Seeding threshold test - if ((layer == PFLayer::HCAL_BARREL1 && energy > pfClusParams.seedEThresholdEB_vec()[depthOffset] && - pt2 > pfClusParams.seedPt2ThresholdEB()) || - (layer == PFLayer::HCAL_ENDCAP && energy > pfClusParams.seedEThresholdEE_vec()[depthOffset] && - pt2 > pfClusParams.seedPt2ThresholdEE())) { + if ((layer == PFLayer::HCAL_BARREL1 && energy > seedThreshold && pt2 > pfClusParams.seedPt2ThresholdHB()) || + (layer == PFLayer::HCAL_ENDCAP && energy > seedThreshold && pt2 > pfClusParams.seedPt2ThresholdHE())) { pfClusteringVars[i].pfrh_isSeed() = 1; for (int k = 0; k < 4; k++) { // Does this seed candidate have a higher energy than four neighbours if (pfRecHits[i].neighbours()(k) < 0) @@ -1104,8 +1148,9 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { alpaka::atomicAdd(acc, nSeeds, 1u); } // Topo clustering threshold test - if ((layer == PFLayer::HCAL_ENDCAP && energy > pfClusParams.topoEThresholdEE_vec()[depthOffset]) || - (layer == PFLayer::HCAL_BARREL1 && energy > pfClusParams.topoEThresholdEB_vec()[depthOffset])) { + + if ((layer == PFLayer::HCAL_ENDCAP && energy > topoThreshold) || + (layer == PFLayer::HCAL_BARREL1 && energy > topoThreshold)) { pfClusteringVars[i].pfrh_passTopoThresh() = true; pfClusteringVars[i].pfrh_topoId() = i; } else { @@ -1306,6 +1351,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { ALPAKA_FN_ACC void operator()(const TAcc& acc, const reco::PFRecHitHostCollection::ConstView pfRecHits, const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, reco::PFClusterDeviceCollection::View clusterView, reco::PFRecHitFractionDeviceCollection::View fracView) const { @@ -1339,14 +1385,14 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { if (nSeeds == 1) { // Single seed cluster hcalFastCluster_singleSeed( - acc, pfClusParams, topoId, nRHTopo, pfRecHits, pfClusteringVars, clusterView, fracView); + acc, pfClusParams, topology, topoId, nRHTopo, pfRecHits, pfClusteringVars, clusterView, fracView); } else if (nSeeds <= 100 && nRHTopo - nSeeds < threadsPerBlockForClustering) { hcalFastCluster_multiSeedParallel( - acc, pfClusParams, topoId, nSeeds, nRHTopo, pfRecHits, pfClusteringVars, clusterView, fracView); + acc, pfClusParams, topology, topoId, nSeeds, nRHTopo, pfRecHits, pfClusteringVars, clusterView, fracView); } } else if (nSeeds <= 400 && nRHTopo - nSeeds <= 1500) { hcalFastCluster_multiSeedIterative( - acc, pfClusParams, topoId, nSeeds, nRHTopo, pfRecHits, pfClusteringVars, clusterView, fracView); + acc, pfClusParams, topology, topoId, nSeeds, nRHTopo, pfRecHits, pfClusteringVars, clusterView, fracView); } else { if constexpr (debug) { if (once_per_block(acc)) @@ -1367,6 +1413,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { ALPAKA_FN_ACC void operator()(const TAcc& acc, const reco::PFRecHitHostCollection::ConstView pfRecHits, const reco::PFClusterParamsDeviceCollection::ConstView pfClusParams, + const reco::PFRecHitHCALTopologyDeviceCollection::ConstView topology, reco::PFClusteringVarsDeviceCollection::View pfClusteringVars, reco::PFClusterDeviceCollection::View clusterView, reco::PFRecHitFractionDeviceCollection::View fracView, @@ -1385,6 +1432,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { if (nRHTopo > 0 && nSeeds > 400 && nRHTopo - nSeeds > 1500) { hcalFastCluster_exotic(acc, pfClusParams, + topology, topoId, nSeeds, nRHTopo, @@ -1420,6 +1468,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void PFClusterProducerKernel::execute(Queue& queue, const reco::PFClusterParamsDeviceCollection& params, + const reco::PFRecHitHCALTopologyDeviceCollection& topology, reco::PFClusteringVarsDeviceCollection& pfClusteringVars, reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars, const reco::PFRecHitHostCollection& pfRecHits, @@ -1435,6 +1484,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { SeedingTopoThresh{}, pfClusteringVars.view(), params.view(), + topology.view(), pfRecHits.view(), pfClusters.view(), pfrhFractions.view(), @@ -1489,6 +1539,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { FastCluster{}, pfRecHits.view(), params.view(), + topology.view(), pfClusteringVars.view(), pfClusters.view(), pfrhFractions.view()); @@ -1499,6 +1550,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { FastClusterExotic{}, pfRecHits.view(), params.view(), + topology.view(), pfClusteringVars.view(), pfClusters.view(), pfrhFractions.view(), diff --git a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h index 8ebafbd366efe..715d484f3120e 100644 --- a/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h +++ b/RecoParticleFlow/PFClusterProducer/plugins/alpaka/PFClusterSoAProducerKernel.h @@ -8,6 +8,8 @@ #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusterParamsDeviceCollection.h" #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringVarsDeviceCollection.h" #include "RecoParticleFlow/PFClusterProducer/interface/alpaka/PFClusteringEdgeVarsDeviceCollection.h" +#include "RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h" +#include "RecoParticleFlow/PFRecHitProducer/interface/alpaka/PFRecHitTopologyDeviceCollection.h" #include "HeterogeneousCore/AlpakaInterface/interface/config.h" namespace ALPAKA_ACCELERATOR_NAMESPACE { @@ -40,6 +42,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void execute(Queue& queue, const reco::PFClusterParamsDeviceCollection& params, + const reco::PFRecHitHCALTopologyDeviceCollection& topology, reco::PFClusteringVarsDeviceCollection& pfClusteringVars, reco::PFClusteringEdgeVarsDeviceCollection& pfClusteringEdgeVars, const reco::PFRecHitHostCollection& pfRecHits, diff --git a/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py b/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py index 6971ce8a0052a..3436581964004 100644 --- a/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py +++ b/RecoParticleFlow/PFClusterProducer/python/particleFlowCluster_cff.py @@ -91,6 +91,6 @@ from Configuration.ProcessModifiers.alpaka_cff import alpaka def _addProcessPFClusterAlpaka(process): - process.load("RecoParticleFlow.PFClusterProducerAlpaka.pfClusterHBHEAlpaka_cff") + process.load("RecoParticleFlow.PFClusterProducer.pfClusterHBHEAlpaka_cff") modifyConfigurationPFClusterAlpaka_ = alpaka.makeProcessModifier(_addProcessPFClusterAlpaka) diff --git a/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py b/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py index 8053333f0769d..631eee2cec974 100644 --- a/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py +++ b/RecoParticleFlow/PFClusterProducer/python/pfClusterHBHEAlpaka_cff.py @@ -61,13 +61,14 @@ pfClusterParamsESProducer = _pfClusterParamsESProducer.clone() pfClusterSoAProducer = _pfClusterSoAProducer.clone( pfRecHits = 'pfRecHitSoAProducerHCAL', + topology = "pfRecHitHCALTopologyESProducer:", pfClusterParams = 'pfClusterParamsESProducer:', synchronise = cms.bool(False) ) legacyPFClusterProducer = _legacyPFClusterProducer.clone( - src = 'pfClusterProducerAlpaka', + src = 'pfClusterSoAProducer', pfClusterParams = 'pfClusterParamsESProducer:', pfClusterBuilder = particleFlowClusterHBHE.pfClusterBuilder, recHitsSource = 'legacyPFRecHitProducer', diff --git a/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py b/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py index 4b7e7753cad4e..7cf551884a504 100644 --- a/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py +++ b/RecoParticleFlow/PFClusterProducer/test/test_PFRecHitAndClusterSoA.py @@ -184,7 +184,7 @@ name = cms.string('PFHBHERecHitCreator'), qualityTests = cms.VPSet( cms.PSet( - usePFThresholdsFromDB = cms.bool(False), + usePFThresholdsFromDB = cms.bool(True), cuts = cms.VPSet( cms.PSet( depth = cms.vint32(1, 2, 3, 4), @@ -224,7 +224,7 @@ name = cms.string('PFHBHERecHitCreator'), qualityTests = cms.VPSet( cms.PSet( - usePFThresholdsFromDB = cms.bool(False), + usePFThresholdsFromDB = cms.bool(True), cuts = cms.VPSet( cms.PSet( depth = cms.vint32(1, 2, 3, 4), @@ -316,7 +316,8 @@ iovIsRunNotTime = cms.bool(True), firstValid = cms.vuint32(1) ) -process.hltParticleFlowRecHitTopologyESProducer = cms.ESProducer(alpaka_backend_str % f"PFRecHit{CAL}TopologyESProducer") +process.hltParticleFlowRecHitTopologyESProducer = cms.ESProducer(alpaka_backend_str % f"PFRecHit{CAL}TopologyESProducer", + usePFThresholdsFromDB = cms.bool(True)) if hcal: process.hltParticleFlowRecHitParamsESProducer = cms.ESProducer(alpaka_backend_str % "PFRecHitHCALParamsESProducer", energyThresholdsHB = cms.vdouble( 0.4, 0.3, 0.3, 0.3 ), @@ -430,6 +431,7 @@ process.hltParticleFlowPFClusterAlpaka = cms.EDProducer(alpaka_backend_str % "PFClusterSoAProducer", pfClusterParams = cms.ESInputTag("hltParticleFlowClusterParamsESProducer:"), + topology = cms.ESInputTag("hltParticleFlowRecHitTopologyESProducer:"), synchronise = cms.bool(args.synchronise)) process.hltParticleFlowPFClusterAlpaka.pfRecHits = cms.InputTag("hltParticleFlowPFRecHitAlpaka") @@ -439,11 +441,12 @@ src = cms.InputTag("hltParticleFlowPFClusterAlpaka"), pfClusterParams = cms.ESInputTag("hltParticleFlowClusterParamsESProducer:"), pfClusterBuilder = process.hltParticleFlowClusterHBHE.pfClusterBuilder, + usePFThresholdsFromDB = cms.bool(True), recHitsSource = cms.InputTag("hltParticleFlowAlpakaToLegacyPFRecHits")) process.hltParticleFlowAlpakaToLegacyPFClusters.PFRecHitsLabelIn = cms.InputTag("hltParticleFlowPFRecHitAlpaka") process.hltParticleFlowClusterHBHE.pfClusterBuilder.maxIterations = 5 -process.hltParticleFlowClusterHBHE.usePFThresholdsFromDB = cms.bool(False) +process.hltParticleFlowClusterHBHE.usePFThresholdsFromDB = cms.bool(True) # Additional customization process.FEVTDEBUGHLToutput.outputCommands = cms.untracked.vstring('drop *_*_*_*') diff --git a/RecoParticleFlow/PFProducer/plugins/PFCandidateChecker.cc b/RecoParticleFlow/PFProducer/plugins/PFCandidateChecker.cc index 7cc2379a0ea5c..6fe62d2352a1b 100644 --- a/RecoParticleFlow/PFProducer/plugins/PFCandidateChecker.cc +++ b/RecoParticleFlow/PFProducer/plugins/PFCandidateChecker.cc @@ -24,12 +24,8 @@ class PFCandidateChecker : public edm::stream::EDAnalyzer<> { public: explicit PFCandidateChecker(const edm::ParameterSet&); - ~PFCandidateChecker() override; - void analyze(const edm::Event&, const edm::EventSetup&) override; - void beginRun(const edm::Run& r, const edm::EventSetup& c) override; - private: void printJets(const reco::PFJetCollection& pfJetsReco, const reco::PFJetCollection& pfJetsReReco) const; @@ -96,10 +92,6 @@ PFCandidateChecker::PFCandidateChecker(const edm::ParameterSet& iConfig) { << inputTagPFCandidatesReReco_; } -PFCandidateChecker::~PFCandidateChecker() {} - -void PFCandidateChecker::beginRun(const edm::Run& run, const edm::EventSetup& es) {} - void PFCandidateChecker::analyze(const Event& iEvent, const EventSetup& iSetup) { LogDebug("PFCandidateChecker") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run() << endl; diff --git a/RecoParticleFlow/PFProducer/plugins/PFPhotonTranslator.cc b/RecoParticleFlow/PFProducer/plugins/PFPhotonTranslator.cc deleted file mode 100644 index f128e0dbe6a6a..0000000000000 --- a/RecoParticleFlow/PFProducer/plugins/PFPhotonTranslator.cc +++ /dev/null @@ -1,1100 +0,0 @@ -#include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "FWCore/Framework/interface/ESHandle.h" -#include "FWCore/Framework/interface/Event.h" -#include "FWCore/ParameterSet/interface/ParameterSet.h" -#include "CommonTools/ParticleFlow/interface/PFClusterWidthAlgo.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidate.h" -#include "DataFormats/EgammaReco/interface/PreshowerCluster.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/PhotonCore.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/VertexReco/interface/Vertex.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElement.h" -#include "DataFormats/Math/interface/Vector3D.h" -#include "DataFormats/Math/interface/LorentzVector.h" -#include "RecoEcal/EgammaCoreTools/interface/Mustache.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" -#include "FWCore/Framework/interface/MakerMacros.h" -#include "DataFormats/Common/interface/ValueMap.h" -#include "DataFormats/EgammaReco/interface/BasicCluster.h" -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/Common/interface/Handle.h" -#include "DataFormats/ParticleFlowCandidate/interface/PFCandidatePhotonExtra.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlock.h" -#include "CondFormats/EcalObjects/interface/EcalMustacheSCParameters.h" -#include "CondFormats/DataRecord/interface/EcalMustacheSCParametersRcd.h" - -class CaloGeometry; -class CaloTopology; -class DetId; -namespace edm { - class EventSetup; -} // namespace edm - -class PFPhotonTranslator : public edm::stream::EDProducer<> { -public: - explicit PFPhotonTranslator(const edm::ParameterSet &); - ~PFPhotonTranslator() override; - - void produce(edm::Event &, const edm::EventSetup &) override; - - typedef std::vector > > IsolationValueMaps; - -private: - // to retrieve the collection from the event - bool fetchCandidateCollection(edm::Handle &c, - const edm::InputTag &tag, - const edm::Event &iEvent) const; - - // makes a basic cluster from PFBlockElement and add it to the collection ; the corrected energy is taken - // from the PFCandidate - void createBasicCluster(const reco::PFBlockElement &, - reco::BasicClusterCollection &basicClusters, - std::vector &, - const reco::PFCandidate &coCandidate) const; - // makes a preshower cluster from of PFBlockElement and add it to the collection - void createPreshowerCluster(const reco::PFBlockElement &PFBE, - reco::PreshowerClusterCollection &preshowerClusters, - unsigned plane) const; - - // create the basic cluster Ptr - void createBasicClusterPtrs(const edm::OrphanHandle &basicClustersHandle); - - // create the preshower cluster Refs - void createPreshowerClusterPtrs(const edm::OrphanHandle &preshowerClustersHandle); - - // make a super cluster from its ingredients and add it to the collection - void createSuperClusters(const reco::PFCandidateCollection &, reco::SuperClusterCollection &superClusters) const; - - void createOneLegConversions(const edm::OrphanHandle &superClustersHandle, - reco::ConversionCollection &oneLegConversions); - - //create photon cores - void createPhotonCores(const edm::OrphanHandle &superClustersHandle, - const edm::OrphanHandle &oneLegConversionHandle, - reco::PhotonCoreCollection &photonCores); - - void createPhotons(reco::VertexCollection &vertexCollection, - edm::Handle &egPhotons, - const edm::OrphanHandle &photonCoresHandle, - const IsolationValueMaps &isolationValues, - reco::PhotonCollection &photons); - - const reco::PFCandidate &correspondingDaughterCandidate(const reco::PFCandidate &cand, - const reco::PFBlockElement &pfbe) const; - - edm::InputTag inputTagPFCandidates_; - std::vector inputTagIsoVals_; - std::string PFBasicClusterCollection_; - std::string PFPreshowerClusterCollection_; - std::string PFSuperClusterCollection_; - std::string PFPhotonCoreCollection_; - std::string PFPhotonCollection_; - std::string PFConversionCollection_; - std::string EGPhotonCollection_; - std::string vertexProducer_; - edm::InputTag barrelEcalHits_; - edm::InputTag endcapEcalHits_; - edm::InputTag hcalTowers_; - double hOverEConeSize_; - - // the collection of basic clusters associated to a photon - std::vector basicClusters_; - // the correcsponding PFCluster ref - std::vector > pfClusters_; - // the collection of preshower clusters associated to a photon - std::vector preshowerClusters_; - // the super cluster collection (actually only one) associated to a photon - std::vector superClusters_; - // the references to the basic clusters associated to a photon - std::vector basicClusterPtr_; - // the references to the basic clusters associated to a photon - std::vector preshowerClusterPtr_; - // keep track of the index of the PF Candidate - std::vector photPFCandidateIndex_; - // the list of candidatePtr - std::vector CandidatePtr_; - // the e/g SC associated - std::vector egSCRef_; - // the e/g photon associated - std::vector egPhotonRef_; - // the PF MVA and regression - std::vector pfPhotonMva_; - std::vector energyRegression_; - std::vector energyRegressionError_; - - //Vector of vector of Conversions Refs - std::vector pfConv_; - std::vector > pfSingleLegConv_; - std::vector > pfSingleLegConvMva_; - - std::vector conv1legPFCandidateIndex_; - std::vector conv2legPFCandidateIndex_; - - edm::ESHandle theCaloTopo_; - edm::ESHandle theCaloGeom_; - - // Mustache SC parameters - edm::ESGetToken ecalMustacheSCParametersToken_; - const EcalMustacheSCParameters *mustacheSCParams_; - - bool emptyIsOk_; -}; - -DEFINE_FWK_MODULE(PFPhotonTranslator); - -using namespace edm; -using namespace std; -using namespace reco; - -typedef math::XYZTLorentzVector LorentzVector; -typedef math::XYZPoint Point; -typedef math::XYZVector Vector; - -PFPhotonTranslator::PFPhotonTranslator(const edm::ParameterSet &iConfig) { - //std::cout << "PFPhotonTranslator" << std::endl; - - inputTagPFCandidates_ = iConfig.getParameter("PFCandidate"); - - edm::ParameterSet isoVals = iConfig.getParameter("isolationValues"); - inputTagIsoVals_.push_back(isoVals.getParameter("pfChargedHadrons")); - inputTagIsoVals_.push_back(isoVals.getParameter("pfPhotons")); - inputTagIsoVals_.push_back(isoVals.getParameter("pfNeutralHadrons")); - - PFBasicClusterCollection_ = iConfig.getParameter("PFBasicClusters"); - PFPreshowerClusterCollection_ = iConfig.getParameter("PFPreshowerClusters"); - PFSuperClusterCollection_ = iConfig.getParameter("PFSuperClusters"); - PFConversionCollection_ = iConfig.getParameter("PFConversionCollection"); - PFPhotonCoreCollection_ = iConfig.getParameter("PFPhotonCores"); - PFPhotonCollection_ = iConfig.getParameter("PFPhotons"); - - EGPhotonCollection_ = iConfig.getParameter("EGPhotons"); - - vertexProducer_ = iConfig.getParameter("primaryVertexProducer"); - - barrelEcalHits_ = iConfig.getParameter("barrelEcalHits"); - endcapEcalHits_ = iConfig.getParameter("endcapEcalHits"); - - hcalTowers_ = iConfig.getParameter("hcalTowers"); - hOverEConeSize_ = iConfig.getParameter("hOverEConeSize"); - - if (iConfig.exists("emptyIsOk")) - emptyIsOk_ = iConfig.getParameter("emptyIsOk"); - else - emptyIsOk_ = false; - - ecalMustacheSCParametersToken_ = esConsumes(); - - produces(PFBasicClusterCollection_); - produces(PFPreshowerClusterCollection_); - produces(PFSuperClusterCollection_); - produces(PFPhotonCoreCollection_); - produces(PFPhotonCollection_); - produces(PFConversionCollection_); -} - -PFPhotonTranslator::~PFPhotonTranslator() {} - -void PFPhotonTranslator::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { - //cout << "NEW EVENT"<(); - - auto psClusters_p = std::make_unique(); - - /* - auto SingleLeg_p = std::make_unique(); - */ - - reco::SuperClusterCollection outputSuperClusterCollection; - reco::ConversionCollection outputOneLegConversionCollection; - reco::PhotonCoreCollection outputPhotonCoreCollection; - reco::PhotonCollection outputPhotonCollection; - - outputSuperClusterCollection.clear(); - outputOneLegConversionCollection.clear(); - outputPhotonCoreCollection.clear(); - outputPhotonCollection.clear(); - - edm::Handle pfCandidates; - bool status = fetchCandidateCollection(pfCandidates, inputTagPFCandidates_, iEvent); - - edm::Handle egPhotons; - iEvent.getByLabel(EGPhotonCollection_, egPhotons); - - Handle vertexHandle; - - IsolationValueMaps isolationValues(inputTagIsoVals_.size()); - for (size_t j = 0; j < inputTagIsoVals_.size(); ++j) { - iEvent.getByLabel(inputTagIsoVals_[j], isolationValues[j]); - } - - // clear the vectors - photPFCandidateIndex_.clear(); - basicClusters_.clear(); - pfClusters_.clear(); - preshowerClusters_.clear(); - superClusters_.clear(); - basicClusterPtr_.clear(); - preshowerClusterPtr_.clear(); - CandidatePtr_.clear(); - egSCRef_.clear(); - egPhotonRef_.clear(); - pfPhotonMva_.clear(); - energyRegression_.clear(); - energyRegressionError_.clear(); - pfConv_.clear(); - pfSingleLegConv_.clear(); - pfSingleLegConvMva_.clear(); - conv1legPFCandidateIndex_.clear(); - conv2legPFCandidateIndex_.clear(); - - // loop on the candidates - //CC@@ - // we need first to create AND put the SuperCluster, - // basic clusters and presh clusters collection - // in order to get a working Handle - unsigned ncand = (status) ? pfCandidates->size() : 0; - - unsigned iphot = 0; - unsigned iconv1leg = 0; - unsigned iconv2leg = 0; - - for (unsigned i = 0; i < ncand; ++i) { - const reco::PFCandidate &cand = (*pfCandidates)[i]; - if (cand.particleId() != reco::PFCandidate::gamma) - continue; - //cout << "cand.mva_nothing_gamma()="< 0.001) //Found PFPhoton with PFPhoton Extras saved - { - //cout << "NEW PHOTON" << endl; - - //std::cout << "nDoubleLegConv="<conversionRef().size()<conversionRef().empty()) { - pfConv_.push_back(reco::ConversionRefVector()); - - const reco::ConversionRefVector &doubleLegConvColl = cand.photonExtraRef()->conversionRef(); - for (unsigned int iconv = 0; iconv < doubleLegConvColl.size(); iconv++) { - pfConv_[iconv2leg].push_back(doubleLegConvColl[iconv]); - } - - conv2legPFCandidateIndex_.push_back(iconv2leg); - iconv2leg++; - } else - conv2legPFCandidateIndex_.push_back(-1); - - const std::vector &singleLegConvColl = cand.photonExtraRef()->singleLegConvTrackRef(); - const std::vector &singleLegConvCollMva = cand.photonExtraRef()->singleLegConvMva(); - - //std::cout << "nSingleLegConv=" <()); - pfSingleLegConvMva_.push_back(std::vector()); - - //cout << "nTracks="<< singleLegConvColl.size()<begin(); gamIter != egPhotons->end(); ++gamIter) { - if (cand.superClusterRef() == gamIter->superCluster()) { - reco::PhotonRef PhotRef(reco::PhotonRef(egPhotons, iegphot)); - egPhotonRef_.push_back(PhotRef); - } - iegphot++; - } - - //std::cout << "Cand elements in blocks : " << cand.elementsInBlocks().size() << std::endl; - - for (unsigned iele = 0; iele < cand.elementsInBlocks().size(); ++iele) { - // first get the block - reco::PFBlockRef blockRef = cand.elementsInBlocks()[iele].first; - // - unsigned elementIndex = cand.elementsInBlocks()[iele].second; - // check it actually exists - if (blockRef.isNull()) - continue; - - // then get the elements of the block - const edm::OwnVector &elements = (*blockRef).elements(); - - const reco::PFBlockElement &pfbe(elements[elementIndex]); - // The first ECAL element should be the cluster associated to the GSF; defined as the seed - if (pfbe.type() == reco::PFBlockElement::ECAL) { - //std::cout << "BlockElement ECAL" << std::endl; - // the Brem photons are saved as daughter PFCandidate; this - // is convenient to access the corrected energy - // std::cout << " Found candidate " << correspondingDaughterCandidate(coCandidate,pfbe) << " " << coCandidate << std::endl; - createBasicCluster(pfbe, basicClusters_[iphot], pfClusters_[iphot], correspondingDaughterCandidate(cand, pfbe)); - } - if (pfbe.type() == reco::PFBlockElement::PS1) { - //std::cout << "BlockElement PS1" << std::endl; - createPreshowerCluster(pfbe, preshowerClusters_[iphot], 1); - } - if (pfbe.type() == reco::PFBlockElement::PS2) { - //std::cout << "BlockElement PS2" << std::endl; - createPreshowerCluster(pfbe, preshowerClusters_[iphot], 2); - } - - } // loop on the elements - - // save the basic clusters - basicClusters_p->insert(basicClusters_p->end(), basicClusters_[iphot].begin(), basicClusters_[iphot].end()); - // save the preshower clusters - psClusters_p->insert(psClusters_p->end(), preshowerClusters_[iphot].begin(), preshowerClusters_[iphot].end()); - - ++iphot; - - } // loop on PFCandidates - - //Save the basic clusters and get an handle as to be able to create valid Refs (thanks to Claude) - // std::cout << " Number of basic clusters " << basicClusters_p->size() << std::endl; - const edm::OrphanHandle bcRefProd = - iEvent.put(std::move(basicClusters_p), PFBasicClusterCollection_); - - //preshower clusters - const edm::OrphanHandle psRefProd = - iEvent.put(std::move(psClusters_p), PFPreshowerClusterCollection_); - - // now that the Basic clusters are in the event, the Ref can be created - createBasicClusterPtrs(bcRefProd); - // now that the preshower clusters are in the event, the Ref can be created - createPreshowerClusterPtrs(psRefProd); - - // and now the Super cluster can be created with valid references - //if(status) createSuperClusters(*pfCandidates,*superClusters_p); - if (status) - createSuperClusters(*pfCandidates, outputSuperClusterCollection); - - //std::cout << "nb superclusters in collection : "<(outputSuperClusterCollection); - const edm::OrphanHandle scRefProd = - iEvent.put(std::move(superClusters_p), PFSuperClusterCollection_); - - /* - int ipho=0; - for (reco::SuperClusterCollection::const_iterator gamIter = scRefProd->begin(); gamIter != scRefProd->end(); ++gamIter){ - std::cout << "SC i="<(outputPhotonCoreCollection); - //std::cout << "photon core collection put in unique_ptr"< pcRefProd = - iEvent.put(std::move(photonCores_p), PFPhotonCoreCollection_); - - //std::cout << "photon core have been put in the event"<begin(); gamIter != pcRefProd->end(); ++gamIter){ - std::cout << "PhotonCore i="< barrelHitHandle; - EcalRecHitCollection barrelRecHits; - iEvent.getByLabel(barrelEcalHits_, barrelHitHandle); - if (!barrelHitHandle.isValid()) { - edm::LogError("PhotonProducer") << "Error! Can't get the product "< endcapHitHandle; - iEvent.getByLabel(endcapEcalHits_, endcapHitHandle); - EcalRecHitCollection endcapRecHits; - if (!endcapHitHandle.isValid()) { - edm::LogError("PhotonProducer") << "Error! Can't get the product "<().get(theCaloGeom_); - - edm::ESHandle pTopology; - iSetup.get().get(theCaloTopo_); - const CaloTopology *topology = theCaloTopo_.product(); - - // get Hcal rechits collection - Handle hcalTowersHandle; - iEvent.getByLabel(hcalTowers_, hcalTowersHandle); - */ - - //create photon collection - //if(status) createPhotons(vertexCollection, pcRefProd, topology, &barrelRecHits, &endcapRecHits, hcalRecHitsHandle, isolationValues, outputPhotonCollection); - if (status) - createPhotons(vertexCollection, egPhotons, pcRefProd, isolationValues, outputPhotonCollection); - - // Put the photons in the event - auto photons_p = std::make_unique(outputPhotonCollection); - //std::cout << "photon collection put in unique_ptr"< photonRefProd = iEvent.put(std::move(photons_p), PFPhotonCollection_); - //std::cout << "photons have been put in the event"<begin(); gamIter != photonRefProd->end(); ++gamIter){ - std::cout << "Photon i="< the energy is not corrected -// It should be possible to get the corrected energy (including the associated PS energy) -// from the PFCandidate daugthers ; Needs some work -void PFPhotonTranslator::createBasicCluster(const reco::PFBlockElement &PFBE, - reco::BasicClusterCollection &basicClusters, - std::vector &pfClusters, - const reco::PFCandidate &coCandidate) const { - const reco::PFClusterRef &myPFClusterRef = PFBE.clusterRef(); - if (myPFClusterRef.isNull()) - return; - - const reco::PFCluster &myPFCluster(*myPFClusterRef); - pfClusters.push_back(&myPFCluster); - //std::cout << " Creating BC " << myPFCluster.energy() << " " << coCandidate.ecalEnergy() <<" "<< coCandidate.rawEcalEnergy() <energy(), myPFClusterRef->position(), myPFClusterRef->hitsAndFractions(), plane)); -} - -void PFPhotonTranslator::createBasicClusterPtrs( - const edm::OrphanHandle &basicClustersHandle) { - unsigned size = photPFCandidateIndex_.size(); - unsigned basicClusterCounter = 0; - basicClusterPtr_.resize(size); - - for (unsigned iphot = 0; iphot < size; ++iphot) // loop on tracks - { - unsigned nbc = basicClusters_[iphot].size(); - for (unsigned ibc = 0; ibc < nbc; ++ibc) // loop on basic clusters - { - // std::cout << "Track "<< iGSF << " ref " << basicClusterCounter << std::endl; - reco::CaloClusterPtr bcPtr(basicClustersHandle, basicClusterCounter); - basicClusterPtr_[iphot].push_back(bcPtr); - ++basicClusterCounter; - } - } -} - -void PFPhotonTranslator::createPreshowerClusterPtrs( - const edm::OrphanHandle &preshowerClustersHandle) { - unsigned size = photPFCandidateIndex_.size(); - unsigned psClusterCounter = 0; - preshowerClusterPtr_.resize(size); - - for (unsigned iphot = 0; iphot < size; ++iphot) // loop on tracks - { - unsigned nbc = preshowerClusters_[iphot].size(); - for (unsigned ibc = 0; ibc < nbc; ++ibc) // loop on basic clusters - { - // std::cout << "Track "<< iGSF << " ref " << basicClusterCounter << std::endl; - reco::CaloClusterPtr psPtr(preshowerClustersHandle, psClusterCounter); - preshowerClusterPtr_[iphot].push_back(psPtr); - ++psClusterCounter; - } - } -} - -void PFPhotonTranslator::createSuperClusters(const reco::PFCandidateCollection &pfCand, - reco::SuperClusterCollection &superClusters) const { - unsigned nphot = photPFCandidateIndex_.size(); - for (unsigned iphot = 0; iphot < nphot; ++iphot) { - //cout << "SC iphot=" << iphot << endl; - - // Computes energy position a la e/gamma - double sclusterE = 0; - double posX = 0.; - double posY = 0.; - double posZ = 0.; - - unsigned nbasics = basicClusters_[iphot].size(); - for (unsigned ibc = 0; ibc < nbasics; ++ibc) { - //cout << "BC in SC : iphot="< > &v1 = basicClusters_[iphot][ibc].hitsAndFractions(); - // std::cout << " Number of cells " << v1.size() << std::endl; - for (std::vector >::const_iterator diIt = v1.begin(); diIt != v1.end(); ++diIt) { - // std::cout << " Adding DetId " << (diIt->first).rawId() << " " << diIt->second << std::endl; - mySuperCluster.addHitAndFraction(diIt->first, diIt->second); - } // loop over rechits - } - - unsigned nps = preshowerClusterPtr_[iphot].size(); - for (unsigned ips = 0; ips < nps; ++ips) { - mySuperCluster.addPreshowerCluster(preshowerClusterPtr_[iphot][ips]); - } - - // Set the preshower energy - mySuperCluster.setPreshowerEnergy(pfCand[photPFCandidateIndex_[iphot]].pS1Energy() + - pfCand[photPFCandidateIndex_[iphot]].pS2Energy()); - - // Set the cluster width - mySuperCluster.setEtaWidth(pfwidth.pflowEtaWidth()); - mySuperCluster.setPhiWidth(pfwidth.pflowPhiWidth()); - // Force the computation of rawEnergy_ of the reco::SuperCluster - mySuperCluster.rawEnergy(); - - //cout << "SC energy="<< mySuperCluster.energy()< &superClustersHandle, - reco::ConversionCollection &oneLegConversions) { - //std::cout << "createOneLegConversions" << std::endl; - - unsigned nphot = photPFCandidateIndex_.size(); - for (unsigned iphot = 0; iphot < nphot; ++iphot) { - //if (conv1legPFCandidateIndex_[iphot]==-1) cout << "No OneLegConversions to add"< -1) { - for (unsigned iConv = 0; iConv < pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]].size(); iConv++) { - reco::CaloClusterPtrVector scPtrVec; - std::vector matchingBC; - math::Error<3>::type error; - const reco::Vertex *convVtx = - new reco::Vertex(pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerPosition(), error); - - //cout << "Vtx x="<x() << " y="<< convVtx->y()<<" z="<z()<< endl; - //cout << "VtxError x=" << convVtx->xError() << endl; - - std::vector OneLegConvVector; - OneLegConvVector.push_back(pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]); - - std::vector tr = OneLegConvVector; - std::vector trackPositionAtEcalVec; - std::vector innPointVec; - std::vector trackPinVec; - std::vector trackPoutVec; - math::XYZPointF trackPositionAtEcal( - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->outerPosition().X(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->outerPosition().Y(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->outerPosition().Z()); - math::XYZPointF innPoint(pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerPosition().X(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerPosition().Y(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerPosition().Z()); - math::XYZVectorF trackPin(pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerMomentum().X(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerMomentum().Y(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->innerMomentum().Z()); - math::XYZVectorF trackPout(pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->outerMomentum().X(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->outerMomentum().Y(), - pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->outerMomentum().Z()); - float DCA = pfSingleLegConv_[conv1legPFCandidateIndex_[iphot]][iConv]->d0(); - trackPositionAtEcalVec.push_back(trackPositionAtEcal); - innPointVec.push_back(innPoint); - trackPinVec.push_back(trackPin); - trackPoutVec.push_back(trackPout); - std::vector OneLegMvaVector; - reco::Conversion myOneLegConversion(scPtrVec, - OneLegConvVector, - trackPositionAtEcalVec, - *convVtx, - matchingBC, - DCA, - innPointVec, - trackPinVec, - trackPoutVec, - pfSingleLegConvMva_[conv1legPFCandidateIndex_[iphot]][iConv], - reco::Conversion::pflow); - OneLegMvaVector.push_back(pfSingleLegConvMva_[conv1legPFCandidateIndex_[iphot]][iConv]); - myOneLegConversion.setOneLegMVA(OneLegMvaVector); - //reco::Conversion myOneLegConversion(scPtrVec, - //OneLegConvVector, *convVtx, reco::Conversion::pflow); - - /* - std::cout << "One leg conversion created" << endl; - std::vector > convtracks = myOneLegConversion.tracks(); - const std::vector mvalist = myOneLegConversion.oneLegMVA(); - - cout << "nTracks="<< convtracks.size()<pt(); - std::cout << "Track pt="<< convtracks[itk]->pt() << std::endl; - std::cout << "Track mva="<< mvalist[itk] << std::endl; - } - */ - oneLegConversions.push_back(myOneLegConversion); - - //cout << "OneLegConv added"< &superClustersHandle, - const edm::OrphanHandle &oneLegConversionHandle, - reco::PhotonCoreCollection &photonCores) { - //std::cout << "createPhotonCores" << std::endl; - - unsigned nphot = photPFCandidateIndex_.size(); - - unsigned i1legtot = 0; - - for (unsigned iphot = 0; iphot < nphot; ++iphot) { - //std::cout << "iphot="<electronPixelSeeds(); - for (unsigned iseed = 0; iseed < pixelSeeds.size(); iseed++) { - myPhotonCore.addElectronPixelSeed(pixelSeeds[iseed]); - } - - //cout << "PhotonCores : SC OK" << endl; - - //cout << "conv1legPFCandidateIndex_[iphot]="< &egPhotons, - const edm::OrphanHandle &photonCoresHandle, - const IsolationValueMaps &isolationValues, - reco::PhotonCollection &photons) { - //cout << "createPhotons" << endl; - - unsigned nphot = photPFCandidateIndex_.size(); - - for (unsigned iphot = 0; iphot < nphot; ++iphot) { - //std::cout << "iphot="<position(); - //std::cout << "vtx made" << std::endl; - - math::XYZVector direction = PCref->parentSuperCluster()->position() - vtx; - - //It could be that pfSC energy gives not the best resolution : use smaller agregates for some cases ? - math::XYZVector P3 = direction.unit() * PCref->parentSuperCluster()->energy(); - LorentzVector P4(P3.x(), P3.y(), P3.z(), PCref->parentSuperCluster()->energy()); - - reco::Photon myPhoton(P4, PCref->parentSuperCluster()->position(), PCref, vtx); - //cout << "photon created"<e1x5(); - showerShape.e2x5 = egPhotonRef_[iphot]->e2x5(); - showerShape.e3x3 = egPhotonRef_[iphot]->e3x3(); - showerShape.e5x5 = egPhotonRef_[iphot]->e5x5(); - showerShape.maxEnergyXtal = egPhotonRef_[iphot]->maxEnergyXtal(); - showerShape.sigmaEtaEta = egPhotonRef_[iphot]->sigmaEtaEta(); - showerShape.sigmaIetaIeta = egPhotonRef_[iphot]->sigmaIetaIeta(); - for (uint id = 0; id < showerShape.hcalOverEcal.size(); ++id) { - showerShape.hcalOverEcal[id] = egPhotonRef_[iphot]->hcalOverEcal(id + 1); - } - myPhoton.setShowerShapeVariables(showerShape); - - saturationInfo.nSaturatedXtals = egPhotonRef_[iphot]->nSaturatedXtals(); - saturationInfo.isSeedSaturated = egPhotonRef_[iphot]->isSeedSaturated(); - myPhoton.setSaturationInfo(saturationInfo); - - fiducialFlags.isEB = egPhotonRef_[iphot]->isEB(); - fiducialFlags.isEE = egPhotonRef_[iphot]->isEE(); - fiducialFlags.isEBEtaGap = egPhotonRef_[iphot]->isEBEtaGap(); - fiducialFlags.isEBPhiGap = egPhotonRef_[iphot]->isEBPhiGap(); - fiducialFlags.isEERingGap = egPhotonRef_[iphot]->isEERingGap(); - fiducialFlags.isEEDeeGap = egPhotonRef_[iphot]->isEEDeeGap(); - fiducialFlags.isEBEEGap = egPhotonRef_[iphot]->isEBEEGap(); - myPhoton.setFiducialVolumeFlags(fiducialFlags); - - isolationVariables03.ecalRecHitSumEt = egPhotonRef_[iphot]->ecalRecHitSumEtConeDR03(); - for (uint id = 0; id < isolationVariables03.hcalRecHitSumEt.size(); ++id) { - isolationVariables03.hcalRecHitSumEt[id] = egPhotonRef_[iphot]->hcalTowerSumEtConeDR03(id + 1); - } - isolationVariables03.trkSumPtSolidCone = egPhotonRef_[iphot]->trkSumPtSolidConeDR03(); - isolationVariables03.trkSumPtHollowCone = egPhotonRef_[iphot]->trkSumPtHollowConeDR03(); - isolationVariables03.nTrkSolidCone = egPhotonRef_[iphot]->nTrkSolidConeDR03(); - isolationVariables03.nTrkHollowCone = egPhotonRef_[iphot]->nTrkHollowConeDR03(); - isolationVariables04.ecalRecHitSumEt = egPhotonRef_[iphot]->ecalRecHitSumEtConeDR04(); - for (uint id = 0; id < isolationVariables04.hcalRecHitSumEt.size(); ++id) { - isolationVariables04.hcalRecHitSumEt[id] = egPhotonRef_[iphot]->hcalTowerSumEtConeDR04(id + 1); - } - isolationVariables04.trkSumPtSolidCone = egPhotonRef_[iphot]->trkSumPtSolidConeDR04(); - isolationVariables04.trkSumPtHollowCone = egPhotonRef_[iphot]->trkSumPtHollowConeDR04(); - isolationVariables04.nTrkSolidCone = egPhotonRef_[iphot]->nTrkSolidConeDR04(); - isolationVariables04.nTrkHollowCone = egPhotonRef_[iphot]->nTrkHollowConeDR04(); - myPhoton.setIsolationVariables(isolationVariables04, isolationVariables03); - - reco::Photon::PflowIsolationVariables myPFIso; - myPFIso.chargedHadronIso = (*isolationValues[0])[CandidatePtr_[iphot]]; - myPFIso.photonIso = (*isolationValues[1])[CandidatePtr_[iphot]]; - myPFIso.neutralHadronIso = (*isolationValues[2])[CandidatePtr_[iphot]]; - myPhoton.setPflowIsolationVariables(myPFIso); - - reco::Photon::PflowIDVariables myPFVariables; - - reco::Mustache myMustache(mustacheSCParams_); - myMustache.MustacheID( - *(myPhoton.parentSuperCluster()), myPFVariables.nClusterOutsideMustache, myPFVariables.etOutsideMustache); - myPFVariables.mva = pfPhotonMva_[iphot]; - myPhoton.setPflowIDVariables(myPFVariables); - - //cout << "chargedHadronIso="<elementsInBlocks().size() != 1) { - // std::cout << " Daughter with " << myPFCandidate.elementsInBlocks().size()<< " element in block " << std::endl; - return cand; - } - if (myPFCandidate->elementsInBlocks()[0].second == refindex) { - // std::cout << " Found it " << cand << std::endl; - return *myPFCandidate; - } - } - return cand; -} diff --git a/RecoParticleFlow/PFProducer/plugins/importers/EGPhotonImporter.cc b/RecoParticleFlow/PFProducer/plugins/importers/EGPhotonImporter.cc deleted file mode 100644 index 846628a65a091..0000000000000 --- a/RecoParticleFlow/PFProducer/plugins/importers/EGPhotonImporter.cc +++ /dev/null @@ -1,104 +0,0 @@ -#include "RecoParticleFlow/PFProducer/interface/BlockElementImporterBase.h" -#include "RecoParticleFlow/PFProducer/interface/PhotonSelectorAlgo.h" -#include "DataFormats/ParticleFlowReco/interface/PFCluster.h" -#include "DataFormats/ParticleFlowReco/interface/PFBlockElementSuperCluster.h" -#include "DataFormats/EgammaCandidates/interface/Photon.h" -#include "DataFormats/EgammaReco/interface/SuperCluster.h" -#include "RecoParticleFlow/PFProducer/interface/PFBlockElementSCEqual.h" - -#include - -#include - -class EGPhotonImporter : public BlockElementImporterBase { -public: - enum SelectionChoices { SeparateDetectorIso, CombinedDetectorIso }; - - EGPhotonImporter(const edm::ParameterSet&, edm::ConsumesCollector&); - - void importToBlock(const edm::Event&, ElementList&) const override; - -private: - edm::EDGetTokenT _src; - const std::unordered_map _selectionTypes; - SelectionChoices _selectionChoice; - std::unique_ptr _selector; - bool _superClustersArePF; -}; - -DEFINE_EDM_PLUGIN(BlockElementImporterFactory, EGPhotonImporter, "EGPhotonImporter"); - -EGPhotonImporter::EGPhotonImporter(const edm::ParameterSet& conf, edm::ConsumesCollector& cc) - : BlockElementImporterBase(conf, cc), - _src(cc.consumes(conf.getParameter("source"))), - _selectionTypes({{"SeparateDetectorIso", EGPhotonImporter::SeparateDetectorIso}, - {"CombinedDetectorIso", EGPhotonImporter::CombinedDetectorIso}}), - _superClustersArePF(conf.getParameter("superClustersArePF")) { - const std::string& selChoice = conf.getParameter("SelectionChoice"); - _selectionChoice = _selectionTypes.at(selChoice); - const edm::ParameterSet& selDef = conf.getParameterSet("SelectionDefinition"); - const float minEt = selDef.getParameter("minEt"); - const float trackIso_const = selDef.getParameter("trackIsoConstTerm"); - const float trackIso_slope = selDef.getParameter("trackIsoSlopeTerm"); - const float ecalIso_const = selDef.getParameter("ecalIsoConstTerm"); - const float ecalIso_slope = selDef.getParameter("ecalIsoSlopeTerm"); - const float hcalIso_const = selDef.getParameter("hcalIsoConstTerm"); - const float hcalIso_slope = selDef.getParameter("hcalIsoSlopeTerm"); - const float hoe = selDef.getParameter("HoverE"); - const float loose_hoe = selDef.getParameter("LooseHoverE"); - const float combIso = selDef.getParameter("combIsoConstTerm"); - _selector = std::make_unique((float)_selectionChoice, - minEt, - trackIso_const, - trackIso_slope, - ecalIso_const, - ecalIso_slope, - hcalIso_const, - hcalIso_slope, - hoe, - combIso, - loose_hoe); -} - -void EGPhotonImporter::importToBlock(const edm::Event& e, BlockElementImporterBase::ElementList& elems) const { - typedef BlockElementImporterBase::ElementList::value_type ElementType; - auto photons = e.getHandle(_src); - elems.reserve(elems.size() + photons->size()); - // setup our elements so that all the SCs are grouped together - auto SCs_end = std::partition( - elems.begin(), elems.end(), [](const ElementType& a) { return a->type() == reco::PFBlockElement::SC; }); - //now add the photons - auto bphoton = photons->cbegin(); - auto ephoton = photons->cend(); - reco::PFBlockElementSuperCluster* scbe = nullptr; - reco::PhotonRef phoref; - for (auto photon = bphoton; photon != ephoton; ++photon) { - if (_selector->passPhotonSelection(*photon)) { - phoref = reco::PhotonRef(photons, std::distance(bphoton, photon)); - const reco::SuperClusterRef& scref = photon->superCluster(); - PFBlockElementSCEqual myEqual(scref); - auto sc_elem = std::find_if(elems.begin(), SCs_end, myEqual); - if (sc_elem != SCs_end) { - scbe = static_cast(sc_elem->get()); - scbe->setFromPhoton(true); - scbe->setPhotonRef(phoref); - scbe->setTrackIso(photon->trkSumPtHollowConeDR04()); - scbe->setEcalIso(photon->ecalRecHitSumEtConeDR04()); - scbe->setHcalIso(photon->hcalTowerSumEtConeDR04()); - scbe->setHoE(photon->hadronicOverEm()); - } else { - scbe = new reco::PFBlockElementSuperCluster(scref); - scbe->setFromPhoton(true); - scbe->setFromPFSuperCluster(_superClustersArePF); - scbe->setPhotonRef(phoref); - scbe->setTrackIso(photon->trkSumPtHollowConeDR04()); - scbe->setEcalIso(photon->ecalRecHitSumEtConeDR04()); - scbe->setHcalIso(photon->hcalTowerSumEtConeDR04()); - scbe->setHoE(photon->hadronicOverEm()); - SCs_end = elems.insert(SCs_end, ElementType(scbe)); - ++SCs_end; // point to element *after* the new one - } - } - } // loop on photons - elems.shrink_to_fit(); -} diff --git a/RecoParticleFlow/PFProducer/plugins/importers/SuperClusterImporter.cc b/RecoParticleFlow/PFProducer/plugins/importers/SuperClusterImporter.cc index f4d2b9bcb4e80..ef91bd52881da 100644 --- a/RecoParticleFlow/PFProducer/plugins/importers/SuperClusterImporter.cc +++ b/RecoParticleFlow/PFProducer/plugins/importers/SuperClusterImporter.cc @@ -5,8 +5,16 @@ #include "DataFormats/EgammaReco/interface/SuperCluster.h" #include "RecoParticleFlow/PFProducer/interface/PFBlockElementSCEqual.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" -// for single tower H/E -#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHadTower.h" +#include "RecoEgamma/EgammaIsolationAlgos/interface/EgammaHcalIsolation.h" +#include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h" +#include "CondTools/Hcal/interface/HcalPFCutsHandler.h" +#include "Geometry/CaloTopology/interface/HcalTopology.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "DataFormats/HcalRecHit/interface/HcalRecHitCollections.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalSeverityLevelComputer.h" +#include "RecoLocalCalo/HcalRecAlgos/interface/HcalSeverityLevelComputerRcd.h" +#include "CondFormats/HcalObjects/interface/HcalChannelQuality.h" +#include "CondFormats/DataRecord/interface/HcalChannelQualityRcd.h" //quick pT for superclusters inline double ptFast(const double energy, const math::XYZPoint& position, const math::XYZPoint& origin) { @@ -28,13 +36,26 @@ class SuperClusterImporter : public BlockElementImporterBase { private: edm::EDGetTokenT _srcEB, _srcEE; - edm::EDGetTokenT _srcTowers; const double _maxHoverE, _pTbyPass, _minSCPt; + const edm::EDGetTokenT hbheRecHitsTag_; + const int maxSeverityHB_; + const int maxSeverityHE_; + bool cutsFromDB; CaloTowerConstituentsMap const* towerMap_; + CaloGeometry const* caloGeom_; + HcalTopology const* hcalTopo_; + HcalChannelQuality const* hcalChannelQual_; + HcalSeverityLevelComputer const* hcalSev_; bool _superClustersArePF; static const math::XYZPoint _zero; const edm::ESGetToken _ctmapToken; + const edm::ESGetToken caloGeometryToken_; + const edm::ESGetToken hcalTopologyToken_; + const edm::ESGetToken hcalChannelQualityToken_; + const edm::ESGetToken hcalSevLvlComputerToken_; + edm::ESGetToken hcalCutsToken_; + HcalPFCuts const* hcalCuts = nullptr; }; const math::XYZPoint SuperClusterImporter::_zero = math::XYZPoint(0, 0, 0); @@ -45,19 +66,39 @@ SuperClusterImporter::SuperClusterImporter(const edm::ParameterSet& conf, edm::C : BlockElementImporterBase(conf, cc), _srcEB(cc.consumes(conf.getParameter("source_eb"))), _srcEE(cc.consumes(conf.getParameter("source_ee"))), - _srcTowers(cc.consumes(conf.getParameter("source_towers"))), _maxHoverE(conf.getParameter("maximumHoverE")), _pTbyPass(conf.getParameter("minPTforBypass")), _minSCPt(conf.getParameter("minSuperClusterPt")), + hbheRecHitsTag_(cc.consumes(conf.getParameter("hbheRecHitsTag"))), + maxSeverityHB_(conf.getParameter("maxSeverityHB")), + maxSeverityHE_(conf.getParameter("maxSeverityHE")), + cutsFromDB(conf.getParameter("usePFThresholdsFromDB")), _superClustersArePF(conf.getParameter("superClustersArePF")), - _ctmapToken(cc.esConsumes()) {} + _ctmapToken(cc.esConsumes()), + caloGeometryToken_{cc.esConsumes()}, + hcalTopologyToken_{cc.esConsumes()}, + hcalChannelQualityToken_{cc.esConsumes(edm::ESInputTag("", "withTopo"))}, + hcalSevLvlComputerToken_{cc.esConsumes()} { + if (cutsFromDB) { + hcalCutsToken_ = cc.esConsumes( + edm::ESInputTag("", "withTopo")); + } +} -void SuperClusterImporter::updateEventSetup(const edm::EventSetup& es) { towerMap_ = &es.getData(_ctmapToken); } +void SuperClusterImporter::updateEventSetup(const edm::EventSetup& es) { + towerMap_ = &es.getData(_ctmapToken); + if (cutsFromDB) { + hcalCuts = &es.getData(hcalCutsToken_); + } + caloGeom_ = &es.getData(caloGeometryToken_); + hcalTopo_ = &es.getData(hcalTopologyToken_); + hcalChannelQual_ = &es.getData(hcalChannelQualityToken_); + hcalSev_ = &es.getData(hcalSevLvlComputerToken_); +} void SuperClusterImporter::importToBlock(const edm::Event& e, BlockElementImporterBase::ElementList& elems) const { auto eb_scs = e.getHandle(_srcEB); auto ee_scs = e.getHandle(_srcEE); - auto const& towers = e.get(_srcTowers); elems.reserve(elems.size() + eb_scs->size() + ee_scs->size()); // setup our elements so that all the SCs are grouped together auto SCs_end = @@ -67,14 +108,30 @@ void SuperClusterImporter::importToBlock(const edm::Event& e, BlockElementImport auto esc = eb_scs->cend(); reco::PFBlockElementSuperCluster* scbe = nullptr; reco::SuperClusterRef scref; + + EgammaHcalIsolation thisHcalVar_ = EgammaHcalIsolation(EgammaHcalIsolation::InclusionRule::isBehindClusterSeed, + 0, //outercone + EgammaHcalIsolation::InclusionRule::withinConeAroundCluster, + 0, //innercone + {{0, 0, 0, 0}}, + {{0, 0, 0, 0}}, + maxSeverityHB_, + {{0, 0, 0, 0, 0, 0, 0}}, + {{0, 0, 0, 0, 0, 0, 0}}, + maxSeverityHE_, + e.get(hbheRecHitsTag_), + caloGeom_, + hcalTopo_, + hcalChannelQual_, + hcalSev_, + towerMap_); + for (auto sc = bsc; sc != esc; ++sc) { scref = reco::SuperClusterRef(eb_scs, std::distance(bsc, sc)); PFBlockElementSCEqual myEqual(scref); auto sc_elem = std::find_if(elems.begin(), SCs_end, myEqual); const double scpT = ptFast(sc->energy(), sc->position(), _zero); - const auto towersBehindCluster = egamma::towersOf(*sc, *towerMap_); - const double H_tower = - (egamma::depth1HcalESum(towersBehindCluster, towers) + egamma::depth2HcalESum(towersBehindCluster, towers)); + const double H_tower = thisHcalVar_.getHcalESumBc(scref.get(), 0, hcalCuts); const double HoverE = H_tower / sc->energy(); if (sc_elem == SCs_end && scpT > _minSCPt && (scpT > _pTbyPass || HoverE < _maxHoverE)) { scbe = new reco::PFBlockElementSuperCluster(scref); @@ -91,9 +148,7 @@ void SuperClusterImporter::importToBlock(const edm::Event& e, BlockElementImport PFBlockElementSCEqual myEqual(scref); auto sc_elem = std::find_if(elems.begin(), SCs_end, myEqual); const double scpT = ptFast(sc->energy(), sc->position(), _zero); - const auto towersBehindCluster = egamma::towersOf(*sc, *towerMap_); - const double H_tower = - (egamma::depth1HcalESum(towersBehindCluster, towers) + egamma::depth2HcalESum(towersBehindCluster, towers)); + const double H_tower = thisHcalVar_.getHcalESumBc(scref.get(), 0, hcalCuts); const double HoverE = H_tower / sc->energy(); if (sc_elem == SCs_end && scpT > _minSCPt && (scpT > _pTbyPass || HoverE < _maxHoverE)) { scbe = new reco::PFBlockElementSuperCluster(scref); diff --git a/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py b/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py index b491a3ffbcc6e..82eca42e7f077 100644 --- a/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py +++ b/RecoParticleFlow/PFProducer/python/particleFlowBlock_cfi.py @@ -24,10 +24,13 @@ cms.PSet( importerName = cms.string("SuperClusterImporter"), source_eb = cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALBarrel"), source_ee = cms.InputTag("particleFlowSuperClusterECAL:particleFlowSuperClusterECALEndcapWithPreshower"), - source_towers = cms.InputTag("towerMaker"), maximumHoverE = cms.double(0.5), minSuperClusterPt = cms.double(10.0), minPTforBypass = cms.double(100.0), + hbheRecHitsTag = cms.InputTag('hbhereco'), + maxSeverityHB = cms.int32(9), + maxSeverityHE = cms.int32(9), + usePFThresholdsFromDB = cms.bool(False), superClustersArePF = cms.bool(True) ), cms.PSet( importerName = cms.string("ConversionTrackImporter"), source = cms.InputTag("pfConversions"), @@ -246,3 +249,8 @@ def _findIndicesByModule(name): particleFlowBlock, elementImporters = _addTimingLayer ) + +#--- Use DB conditions for cuts&seeds for Run3 and phase2 +from Configuration.Eras.Modifier_hcalPfCutsFromDB_cff import hcalPfCutsFromDB +hcalPfCutsFromDB.toModify( _scImporter, + usePFThresholdsFromDB = True) diff --git a/RecoParticleFlow/PFProducer/src/PhotonSelectorAlgo.cc b/RecoParticleFlow/PFProducer/src/PhotonSelectorAlgo.cc deleted file mode 100644 index 48e22a8b4a0aa..0000000000000 --- a/RecoParticleFlow/PFProducer/src/PhotonSelectorAlgo.cc +++ /dev/null @@ -1,66 +0,0 @@ -// -// Original Authors: Nicholas Wardle, Florian Beaudette -// -#include "RecoParticleFlow/PFProducer/interface/PhotonSelectorAlgo.h" - -PhotonSelectorAlgo::PhotonSelectorAlgo(float choice, - float c_Et, - float c_iso_track_a, - float c_iso_track_b, - float c_iso_ecal_a, - float c_iso_ecal_b, - float c_iso_hcal_a, - float c_iso_hcal_b, - float c_hoe, - float comb_iso, - float loose_hoe) - : choice_(choice), - c_Et_(c_Et), - c_iso_track_a_(c_iso_track_a), - c_iso_track_b_(c_iso_track_b), - c_iso_ecal_a_(c_iso_ecal_a), - c_iso_ecal_b_(c_iso_ecal_b), - c_iso_hcal_a_(c_iso_hcal_a), - c_iso_hcal_b_(c_iso_hcal_b), - c_hoe_(c_hoe), - comb_iso_(comb_iso), - loose_hoe_(loose_hoe) { - ; -} - -bool PhotonSelectorAlgo::passPhotonSelection(const reco::Photon& photon) const { - // Photon ET - float photonPt = photon.pt(); - if (photonPt < c_Et_) - return false; - if (choice_ < 0.1) //EGM Loose - { - //std::cout<<"Cuts:"< c_hoe_) - return false; - - // Track iso - if (photon.trkSumPtHollowConeDR04() > c_iso_track_a_ + c_iso_track_b_ * photonPt) - return false; - - // ECAL iso - if (photon.ecalRecHitSumEtConeDR04() > c_iso_ecal_a_ + c_iso_ecal_b_ * photonPt) - return false; - - // HCAL iso - if (photon.hcalTowerSumEtConeDR04() > c_iso_hcal_a_ + c_iso_hcal_b_ * photonPt) - return false; - } - if (choice_ > 0.99) { - //std::cout<<"Cuts "< loose_hoe_) - return false; - //Isolation variables in 0.3 cone combined - if (photon.trkSumPtHollowConeDR03() + photon.ecalRecHitSumEtConeDR03() + photon.hcalTowerSumEtConeDR03() > - comb_iso_) - return false; - } - - return true; -} diff --git a/RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h b/RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h index 78e731ac9eaa6..d539b47ca9ce3 100644 --- a/RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h +++ b/RecoParticleFlow/PFRecHitProducer/interface/PFRecHitTopologyRecord.h @@ -5,10 +5,11 @@ #include "FWCore/Framework/interface/EventSetupRecordImplementation.h" #include "Geometry/Records/interface/CaloGeometryRecord.h" #include "Geometry/Records/interface/HcalRecNumberingRecord.h" +#include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h" class PFRecHitHCALTopologyRecord : public edm::eventsetup::DependentRecordImplementation< PFRecHitHCALTopologyRecord, - edm::mpl::Vector> {}; + edm::mpl::Vector> {}; class PFRecHitECALTopologyRecord : public edm::eventsetup::DependentRecordImplementation + + diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.dev.cc b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.dev.cc index b9287a1f45787..ef18ebc5ecc93 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.dev.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.dev.cc @@ -16,6 +16,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template >> ALPAKA_FN_ACC void operator()(const TAcc& acc, const typename CAL::ParameterType::ConstView params, + const typename CAL::TopologyTypeDevice::ConstView topology, const typename CAL::CaloRecHitSoATypeDevice::ConstView recHits, reco::PFRecHitDeviceCollection::View pfRecHits, uint32_t* __restrict__ denseId2pfRecHit, @@ -23,7 +24,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { // Strided loop over CaloRecHits for (int32_t i : cms::alpakatools::elements_with_stride(acc, recHits.metadata().size())) { // Check energy thresholds/quality cuts (specialised for HCAL/ECAL) - if (!applyCuts(recHits[i], params)) + if (!applyCuts(recHits[i], params, topology)) continue; // Use atomic operation to determine index of the PFRecHit to be constructed @@ -40,7 +41,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { } ALPAKA_FN_ACC static bool applyCuts(const typename CAL::CaloRecHitSoATypeDevice::ConstView::const_element rh, - const typename CAL::ParameterType::ConstView params); + const typename CAL::ParameterType::ConstView params, + const typename CAL::TopologyTypeDevice::ConstView topology); ALPAKA_FN_ACC static void constructPFRecHit( reco::PFRecHitDeviceCollection::View::element pfrh, @@ -50,26 +52,33 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template <> ALPAKA_FN_ACC bool PFRecHitProducerKernelConstruct::applyCuts( const typename HCAL::CaloRecHitSoATypeDevice::ConstView::const_element rh, - const HCAL::ParameterType::ConstView params) { + const HCAL::ParameterType::ConstView params, + const HCAL::TopologyTypeDevice::ConstView topology) { // Reject HCAL recHits below enery threshold float threshold = 9999.; const uint32_t detId = rh.detId(); const uint32_t depth = HCAL::getDepth(detId); const uint32_t subdet = getSubdet(detId); - if (subdet == HcalBarrel) { - threshold = params.energyThresholds()[depth - 1]; - } else if (subdet == HcalEndcap) { - threshold = params.energyThresholds()[depth - 1 + HCAL::kMaxDepthHB]; + if (topology.cutsFromDB()) { + threshold = topology.noiseThreshold()[HCAL::detId2denseId(detId)]; } else { - printf("Rechit with detId %u has invalid subdetector %u!\n", detId, subdet); - return false; + if (subdet == HcalBarrel) { + threshold = params.energyThresholds()[depth - 1]; + } else if (subdet == HcalEndcap) { + threshold = params.energyThresholds()[depth - 1 + HCAL::kMaxDepthHB]; + } else { + printf("Rechit with detId %u has invalid subdetector %u!\n", detId, subdet); + return false; + } } return rh.energy() >= threshold; } template <> ALPAKA_FN_ACC bool PFRecHitProducerKernelConstruct::applyCuts( - const ECAL::CaloRecHitSoATypeDevice::ConstView::const_element rh, const ECAL::ParameterType::ConstView params) { + const ECAL::CaloRecHitSoATypeDevice::ConstView::const_element rh, + const ECAL::ParameterType::ConstView params, + const ECAL::TopologyTypeDevice::ConstView topology) { // Reject ECAL recHits below energy threshold if (rh.energy() < params.energyThresholds()[ECAL::detId2denseId(rh.detId())]) return false; @@ -88,6 +97,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { reco::PFRecHitDeviceCollection::View::element pfrh, const HCAL::CaloRecHitSoATypeDevice::ConstView::const_element rh) { pfrh.detId() = rh.detId(); + pfrh.denseId() = HCAL::detId2denseId(rh.detId()); pfrh.energy() = rh.energy(); pfrh.time() = rh.time(); pfrh.depth() = HCAL::getDepth(pfrh.detId()); @@ -105,6 +115,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { reco::PFRecHitDeviceCollection::View::element pfrh, const ECAL::CaloRecHitSoATypeDevice::ConstView::const_element rh) { pfrh.detId() = rh.detId(); + pfrh.denseId() = ECAL::detId2denseId(rh.detId()); pfrh.energy() = rh.energy(); pfrh.time() = rh.time(); pfrh.depth() = 1; @@ -168,11 +179,13 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void PFRecHitProducerKernel::processRecHits(Queue& queue, const typename CAL::CaloRecHitSoATypeDevice& recHits, const typename CAL::ParameterType& params, + const typename CAL::TopologyTypeDevice& topology, reco::PFRecHitDeviceCollection& pfRecHits) { alpaka::exec(queue, work_div_, PFRecHitProducerKernelConstruct{}, params.view(), + topology.view(), recHits.view(), pfRecHits.view(), denseId2pfRecHit_.data(), diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.h b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.h index 37638a2370060..ffaef6b0ad748 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.h +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitProducerKernel.h @@ -17,6 +17,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { void processRecHits(Queue& queue, const typename CAL::CaloRecHitSoATypeDevice& recHits, const typename CAL::ParameterType& params, + const typename CAL::TopologyTypeDevice& topology, reco::PFRecHitDeviceCollection& pfRecHits); // Run kernel: Associate topology information (position, neighbours) diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc index a53ce4f23eed4..8297b6359eaf5 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitSoAProducer.cc @@ -41,7 +41,7 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { PFRecHitProducerKernel kernel{event.queue(), num_recHits}; for (const auto& token : recHitsToken_) - kernel.processRecHits(event.queue(), event.get(token.first), setup.getData(token.second), pfRecHits); + kernel.processRecHits(event.queue(), event.get(token.first), setup.getData(token.second), topology, pfRecHits); kernel.associateTopologyInfo(event.queue(), topology, pfRecHits); if (synchronise_) diff --git a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitTopologyESProducer.cc b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitTopologyESProducer.cc index c751202f45347..f94db2aecc362 100644 --- a/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitTopologyESProducer.cc +++ b/RecoParticleFlow/PFRecHitProducer/plugins/alpaka/PFRecHitTopologyESProducer.cc @@ -5,6 +5,8 @@ #include #include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "CondFormats/DataRecord/interface/HcalPFCutsRcd.h" +#include "CondTools/Hcal/interface/HcalPFCutsHandler.h" #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "FWCore/ParameterSet/interface/ParameterSetDescription.h" @@ -24,15 +26,22 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { template class PFRecHitTopologyESProducer : public ESProducer { public: - PFRecHitTopologyESProducer(edm::ParameterSet const& iConfig) : ESProducer(iConfig) { + PFRecHitTopologyESProducer(edm::ParameterSet const& iConfig) + : ESProducer(iConfig), cutsFromDB_(iConfig.getParameter("usePFThresholdsFromDB")) { auto cc = setWhatProduced(this); geomToken_ = cc.consumes(); - if constexpr (std::is_same_v) + if constexpr (std::is_same_v) { hcalToken_ = cc.consumes(); + hcalCutsToken_ = cc.consumes(); + } } static void fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; + if constexpr (std::is_same_v) + desc.add("usePFThresholdsFromDB", true); + else // only needs to be true for HBHE + desc.add("usePFThresholdsFromDB", false); descriptions.addWithDefaultLabel(desc); } @@ -40,7 +49,6 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { const auto& geom = iRecord.get(geomToken_); auto product = std::make_unique(CAL::kSize, cms::alpakatools::host()); auto view = product->view(); - const int calEnums[2] = {CAL::kSubdetectorBarrelId, CAL::kSubdetectorEndcapId}; for (const auto subdet : calEnums) { // Construct topology @@ -61,6 +69,20 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { const uint32_t denseId = CAL::detId2denseId(detId); assert(denseId < CAL::kSize); + // Fill SoA members with HCAL PF Thresholds from GT + if constexpr (std::is_same_v) { + view.cutsFromDB() = false; + if (cutsFromDB_) { + view.cutsFromDB() = true; + const HcalPFCuts& pfCuts = iRecord.get(hcalCutsToken_); + const HcalTopology& htopo = iRecord.get(hcalToken_); + std::unique_ptr prod = std::make_unique(pfCuts); + prod->setTopo(&htopo); + view.noiseThreshold(denseId) = prod->getValues(detId.rawId())->noiseThreshold(); + view.seedThreshold(denseId) = prod->getValues(detId.rawId())->seedThreshold(); + } + } + const GlobalPoint pos = geo->getGeometry(detId)->getPosition(); view.positionX(denseId) = pos.x(); view.positionY(denseId) = pos.y(); @@ -119,6 +141,8 @@ namespace ALPAKA_ACCELERATOR_NAMESPACE { private: edm::ESGetToken geomToken_; edm::ESGetToken hcalToken_; + edm::ESGetToken hcalCutsToken_; + const bool cutsFromDB_; // specialised for HCAL/ECAL, because non-nearest neighbours are defined differently uint32_t getNeighbourDetId(const uint32_t detId, const uint32_t direction, const CaloSubdetectorTopology& topo); diff --git a/RecoTracker/FinalTrackSelectors/plugins/SingleLongTrackProducer.cc b/RecoTracker/FinalTrackSelectors/plugins/SingleLongTrackProducer.cc new file mode 100644 index 0000000000000..8430385347ae4 --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/plugins/SingleLongTrackProducer.cc @@ -0,0 +1,245 @@ +// user includes +#include "DataFormats/Math/interface/deltaR.h" +#include "DataFormats/MuonReco/interface/Muon.h" +#include "DataFormats/TrackReco/interface/Track.h" +#include "DataFormats/VertexReco/interface/Vertex.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +// ROOT includes +#include "TLorentzVector.h" + +class SingleLongTrackProducer : public edm::stream::EDProducer<> { +public: + explicit SingleLongTrackProducer(const edm::ParameterSet &); + ~SingleLongTrackProducer() override = default; + + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + +private: + void produce(edm::Event &, const edm::EventSetup &) override; + + const edm::EDGetTokenT> tracksToken; + const edm::EDGetTokenT> muonsToken; + const edm::EDGetTokenT PrimVtxToken; + + const int minNumberOfLayers; + const double matchInDr; + const bool onlyValidHits; + const bool debug; + const double minPt; + const double maxEta; + const double maxDxy; + const double maxDz; +}; + +SingleLongTrackProducer::SingleLongTrackProducer(const edm::ParameterSet &iConfig) + : tracksToken{consumes(iConfig.getParameter("allTracks"))}, + muonsToken{consumes>(iConfig.getParameter("matchMuons"))}, + PrimVtxToken{consumes(iConfig.getParameter("PrimaryVertex"))}, + minNumberOfLayers{iConfig.getParameter("minNumberOfLayers")}, + matchInDr{iConfig.getParameter("requiredDr")}, + onlyValidHits{iConfig.getParameter("onlyValidHits")}, + debug{iConfig.getParameter("debug")}, + minPt{iConfig.getParameter("minPt")}, + maxEta{iConfig.getParameter("maxEta")}, + maxDxy{iConfig.getParameter("maxDxy")}, + maxDz{iConfig.getParameter("maxDz")} { + produces("").setBranchAlias(""); +} + +void SingleLongTrackProducer::produce(edm::Event &iEvent, const edm::EventSetup &iSetup) { + using namespace edm; + + // register output collection: + std::unique_ptr goodTracks(new reco::TrackCollection); + + // register input collections: + const auto &tracks = iEvent.getHandle(tracksToken); + if (!tracks.isValid()) { + edm::LogError("SingleLongTrackProducer") + << "Input track collection is not valid.\n Returning empty output track collection."; + iEvent.put(std::move(goodTracks), ""); + return; + } + + const auto &muons = iEvent.getHandle(muonsToken); + if (!muons.isValid() && matchInDr > 0.) { + edm::LogError("SingleLongTrackProducer") + << "Input muon collection is not valid.\n Returning empty output track collection."; + iEvent.put(std::move(goodTracks), ""); + return; + } + + const auto &vertices = iEvent.getHandle(PrimVtxToken); + if (!vertices.isValid()) { + edm::LogError("SingleLongTrackProducer") + << "Input vertex collection is not valid.\n Returning empty output track collection."; + iEvent.put(std::move(goodTracks), ""); + return; + } + + const reco::Vertex vtx = vertices->at(0); + + // Preselection of long quality tracks + std::vector selTracks; + reco::Track bestTrack; + unsigned int tMuon = 0; + double fitProb = 100; + + for (const auto &track : *tracks) { + const reco::HitPattern &hitpattern = track.hitPattern(); + double dR2min = 100.; + double chiNdof = track.normalizedChi2(); + double dxy = std::abs(track.dxy(vtx.position())); + double dz = std::abs(track.dz(vtx.position())); + + if (track.pt() < minPt) + continue; + + if (std::abs(track.eta()) > maxEta) + continue; + + if (hitpattern.trackerLayersWithMeasurement() < minNumberOfLayers) + continue; + + // Long track needs to be close to a good muon (only if requested) + if (matchInDr > 0.) { + for (const auto &m : *muons) { + if (m.isTrackerMuon()) { + tMuon++; + reco::Track matchedTrack = *(m.innerTrack()); + // match to general track in deltaR + double dr2 = reco::deltaR2(track, matchedTrack); + if (dr2 < dR2min) + dR2min = dr2; + } + } + // matchInDr here is defined positive + if (dR2min >= matchInDr * matchInDr) + continue; + } + // do vertex consistency: + bool vertex_match = dxy < maxDxy && dz < maxDz; + if (!(vertex_match)) + continue; + if (track.validFraction() < 1.0) + continue; + // only save the track with the smallest chiNdof + if (chiNdof < fitProb) { + fitProb = chiNdof; + bestTrack = track; + bestTrack.setExtra(track.extra()); + } + if (debug) + edm::LogPrint("SingleLongTrackProducer") << " deltaR2 (general) track to matched Track: " << dR2min; + if (debug) + edm::LogPrint("SingleLongTrackProducer") << "chi2Ndof:" << chiNdof << " best Track: " << fitProb; + } + + selTracks.push_back(bestTrack); + + if (debug) + edm::LogPrint("SingleLongTrackProducer") + << " number of Tracker Muons: " << tMuon << ", thereof " << selTracks.size() << " tracks passed preselection."; + + // check hits validity in preselected tracks + bool hitIsNotValid{false}; + + for (const auto &track : selTracks) { + reco::HitPattern hitpattern = track.hitPattern(); + int deref{0}; + + // this checks track recHits + try { // (Un)Comment this line with /* to (not) allow for events with not valid hits + auto hb = track.recHitsBegin(); + + for (unsigned int h = 0; h < track.recHitsSize(); h++) { + auto recHit = *(hb + h); + auto const &hit = *recHit; + + if (onlyValidHits && !hit.isValid()) { + hitIsNotValid = true; + continue; + } + } + } catch (cms::Exception const &e) { + deref += 1; + if (debug) + std::cerr << e.explainSelf() << std::endl; + } + + if (hitIsNotValid == true) + break; // (Un)Comment this line with */ to (not) allow for events with not valid hits + + int deref2{0}; + + // this checks track hitPattern hits + try { + auto hb = track.recHitsBegin(); + + for (unsigned int h = 0; h < track.recHitsSize(); h++) { + uint32_t pHit = hitpattern.getHitPattern(reco::HitPattern::TRACK_HITS, h); + + auto recHit = *(hb + h); + auto const &hit = *recHit; + + if (onlyValidHits && !hit.isValid()) { + if (debug) + edm::LogPrint("SingleLongTrackProducer") << "hit not valid: " << h; + continue; + } + + // loop over the hits of the track. + if (onlyValidHits && !(hitpattern.validHitFilter(pHit))) { + if (debug) + edm::LogPrint("SingleLongTrackProducer") << "hit not valid: " << h; + continue; + } + } + goodTracks->push_back(track); + } catch (cms::Exception const &e) { + deref2 += 1; + if (debug) + std::cerr << e.explainSelf() << std::endl; + } + + if (debug) + edm::LogPrint("SingleLongTrackProducer") + << "found tracks with " << deref << "missing valid hits and " << deref2 << " missing hit pattern"; + } + + if (debug) { + auto const &moduleType = moduleDescription().moduleName(); + auto const &moduleLabel = moduleDescription().moduleLabel(); + edm::LogPrint("SingleLongTrackProducer") << "[" << moduleType << "] (" << moduleLabel << ") " + << " output track size: " << goodTracks.get()->size(); + } + + // save track collection in event: + iEvent.put(std::move(goodTracks), ""); +} + +void SingleLongTrackProducer::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + desc.add("allTracks", edm::InputTag("generalTracks"))->setComment("input track collection"); + desc.add("matchMuons", edm::InputTag("earlyMuons"))->setComment("input muon collection for matching"); + desc.add("PrimaryVertex", edm::InputTag("offlinePrimaryVertices")) + ->setComment("input primary vertex collection"); + desc.add("minNumberOfLayers", 10)->setComment("minimum number of layers"); + desc.add("requiredDr", 0.01)->setComment("matching muons deltaR. If negative do not match"); + desc.add("onlyValidHits", true)->setComment("use only valid hits"); + desc.add("debug", false)->setComment("verbose?"); + desc.add("minPt", 15.0)->setComment("minimum pT"); + desc.add("maxEta", 2.2)->setComment("maximum pseudorapidity (absolute value)"); + desc.add("maxDxy", 0.02)->setComment("maximum transverse impact parameter"); + desc.add("maxDz", 0.5)->setComment("maximum longitudinal impact parameter"); + descriptions.addWithDefaultLabel(desc); +} + +#include "FWCore/Framework/interface/MakerMacros.h" +DEFINE_FWK_MODULE(SingleLongTrackProducer); diff --git a/RecoTracker/FinalTrackSelectors/plugins/TrackerTrackHitFilter.cc b/RecoTracker/FinalTrackSelectors/plugins/TrackerTrackHitFilter.cc index c6341cd9d19a2..c03ecb6c92ebb 100644 --- a/RecoTracker/FinalTrackSelectors/plugins/TrackerTrackHitFilter.cc +++ b/RecoTracker/FinalTrackSelectors/plugins/TrackerTrackHitFilter.cc @@ -62,6 +62,9 @@ * minimumHits = Minimum hits that the output TrackCandidate must have to be saved * replaceWithInactiveHits = instead of discarding hits, replace them with a invalid "inactive" hits, * so multiple scattering is accounted for correctly. + * truncateTracks = determines if recHits collection is to be truncated to provide tracks with + * layersRemaining number of layers after refitting + * layersRemaining = number of tracker layers with measurement remaining after truncating track * stripFrontInvalidHits = strip invalid hits at the beginning of the track * stripBackInvalidHits = strip invalid hits at the end of the track * stripAllInvalidHits = remove ALL invald hits (might be a problem for multiple scattering, use with care!) @@ -87,6 +90,8 @@ namespace reco { const Trajectory *itt, std::vector &hits); void produceFromTrack(const edm::EventSetup &iSetup, const Track *itt, std::vector &hits); + unsigned int getSequLayer(const reco::Track &tk, unsigned int prevSequLayers, std::vector isNotValidVec); + bool isFirstValidHitInLayer(const reco::Track &tk, std::vector isNotValidVec); static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); @@ -125,6 +130,9 @@ namespace reco { size_t minimumHits_; + unsigned int layersRemaining_; + bool truncateTracks_; + bool replaceWithInactiveHits_; bool stripFrontInvalidHits_; bool stripBackInvalidHits_; @@ -301,6 +309,8 @@ namespace reco { TrackerTrackHitFilter::TrackerTrackHitFilter(const edm::ParameterSet &iConfig) : src_(iConfig.getParameter("src")), minimumHits_(iConfig.getParameter("minimumHits")), + layersRemaining_(iConfig.getParameter("layersRemaining")), + truncateTracks_(iConfig.getParameter("truncateTracks")), replaceWithInactiveHits_(iConfig.getParameter("replaceWithInactiveHits")), stripFrontInvalidHits_(iConfig.getParameter("stripFrontInvalidHits")), stripBackInvalidHits_(iConfig.getParameter("stripBackInvalidHits")), @@ -561,6 +571,54 @@ namespace reco { iEvent.put(std::move(output)); } + bool TrackerTrackHitFilter::isFirstValidHitInLayer(const reco::Track &tk, std::vector isNotValidVec) { + reco::HitPattern hp = tk.hitPattern(); + + int vecSize = static_cast(isNotValidVec.size()); + // If hit is not valid, it will not count as a tracker layer with measurement -> don't increase sequLayers + if (isNotValidVec[vecSize - 1]) + return false; + + // If very first valid layer -> increase sequLayers + if (vecSize == 1) + return true; + + uint32_t pHit = hp.getHitPattern(reco::HitPattern::TRACK_HITS, vecSize - 1); + uint32_t thisLayer = hp.getLayer(pHit); + uint32_t thisSubStruct = hp.getSubStructure(pHit); + + // This loop compares the previous hits substructure and layer with current hit. If hits in the same layer + // and substructure and previous hit is valid, skip layer. If previous hit is not valid, even if in same layer + // and substructure, check the previous previous hit. Repeat process for every previous hit until reaching + // a valid hit or different layer/substructure + for (int j = 0; j < vecSize; ++j) { + if (vecSize > (j + 1)) { + uint32_t nHit = hp.getHitPattern(reco::HitPattern::TRACK_HITS, vecSize - (j + 2)); + uint32_t prevLayer = hp.getLayer(nHit); + uint32_t prevSubStruct = hp.getSubStructure(nHit); + if ((thisLayer == prevLayer) && (thisSubStruct == prevSubStruct)) { + if (isNotValidVec[vecSize - (j + 2)] == false) { + return false; + } + } else { + return true; + } + } else { + return true; + } + } + return false; + } + + unsigned int TrackerTrackHitFilter::getSequLayer(const reco::Track &tk, + unsigned int prevSequLayers, + std::vector isNotValidVec) { + unsigned int sequLayers = 0; + sequLayers = isFirstValidHitInLayer(tk, isNotValidVec) ? prevSequLayers + 1 : prevSequLayers; + + return sequLayers; + } + TrackCandidate TrackerTrackHitFilter::makeCandidate(const reco::Track &tk, std::vector::iterator hitsBegin, std::vector::iterator hitsEnd) { @@ -586,8 +644,29 @@ namespace reco { TrajectorySeed seed(state, TrackCandidate::RecHitContainer(), pdir); TrackCandidate::RecHitContainer ownHits; ownHits.reserve(hitsEnd - hitsBegin); + const reco::HitPattern &hp = tk.hitPattern(); + unsigned int sequLayers = 0; + std::vector isNotValidVec; + isNotValidVec.clear(); + bool breakHitLoop = false; + if (int(int(hp.numberOfValidHits()) - int(hp.numberOfAllHits(reco::HitPattern::TRACK_HITS))) != 0) { + breakHitLoop = true; + } for (; hitsBegin != hitsEnd; ++hitsBegin) { - //if(! (*hitsBegin)->isValid() ) std::cout<<"Putting in the trackcandidate an INVALID HIT !"<isValid()) { + isNotValidVec.push_back(true); + } else { + isNotValidVec.push_back(false); + } + sequLayers = getSequLayer(tk, sequLayers, isNotValidVec); + if (sequLayers > layersRemaining_) + break; + } ownHits.push_back(*hitsBegin); } @@ -1040,6 +1119,12 @@ namespace reco { ->setComment( " instead of removing hits replace them with inactive hits, so you still consider the multiple " "scattering"); + desc.add("truncateTracks", false) + ->setComment( + "determines if recHits collection is to be truncated to provide tracks with layersRemaining number of " + "layers after refitting"); + desc.add("layersRemaining", 8) + ->setComment("number of tracker layers with measurement remaining after truncating track"); desc.add("stripFrontInvalidHits", false) ->setComment("strip invalid & inactive hits from any end of the track"); desc.add("stripBackInvalidHits", false) diff --git a/RecoTracker/FinalTrackSelectors/python/SingleLongTrackProducer_cfi.py b/RecoTracker/FinalTrackSelectors/python/SingleLongTrackProducer_cfi.py new file mode 100644 index 0000000000000..1f97050cea9ba --- /dev/null +++ b/RecoTracker/FinalTrackSelectors/python/SingleLongTrackProducer_cfi.py @@ -0,0 +1,16 @@ +import FWCore.ParameterSet.Config as cms + +from RecoTracker.FinalTrackSelectors.singleLongTrackProducer_cfi import singleLongTrackProducer + +SingleLongTrackProducer = singleLongTrackProducer.clone( + allTracks = "generalTracks", + matchMuons = "earlyMuons", + requiredDr= 0.01, + minNumberOfLayers = 10, + onlyValidHits = True, + debug = False, + minPt = 15.0, + maxEta = 2.2, + maxDxy = 0.02, + maxDz = 0.5, + PrimaryVertex = "offlinePrimaryVertices") diff --git a/RecoTracker/MkFit/plugins/MkFitProducer.cc b/RecoTracker/MkFit/plugins/MkFitProducer.cc index b66a2294db6e0..0c0ec3634f84e 100644 --- a/RecoTracker/MkFit/plugins/MkFitProducer.cc +++ b/RecoTracker/MkFit/plugins/MkFitProducer.cc @@ -32,7 +32,7 @@ class MkFitProducer : public edm::global::EDProducer> { public: explicit MkFitProducer(edm::ParameterSet const& iConfig); - ~MkFitProducer() override = default; + ~MkFitProducer() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); @@ -101,6 +101,8 @@ MkFitProducer::MkFitProducer(edm::ParameterSet const& iConfig) mkfit::MkBuilderWrapper::populate(); } +MkFitProducer::~MkFitProducer() { mkfit::MkBuilderWrapper::clear(); } + void MkFitProducer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; diff --git a/RecoTracker/MkFitCMS/standalone/Shell.cc b/RecoTracker/MkFitCMS/standalone/Shell.cc index ad4fa12c00827..4f378ec0adf82 100644 --- a/RecoTracker/MkFitCMS/standalone/Shell.cc +++ b/RecoTracker/MkFitCMS/standalone/Shell.cc @@ -325,7 +325,9 @@ namespace mkfit { reco tracks labels are seed indices. seed labels are sim track indices -- - mkfit labels are seed indices in given iteration after cleaning (at seed load-time) + mkfit labels are seed indices in given iteration after cleaning (at seed load-time). + This is no longer true -- was done like that in branch where this code originated from. + It seems the label is the same as seed label. */ int Shell::LabelFromHits(Track &t, bool replace, float good_frac) { diff --git a/RecoTracker/MkFitCore/interface/IterationConfig.h b/RecoTracker/MkFitCore/interface/IterationConfig.h index 33bc8dabf658d..5504d2476e504 100644 --- a/RecoTracker/MkFitCore/interface/IterationConfig.h +++ b/RecoTracker/MkFitCore/interface/IterationConfig.h @@ -90,6 +90,8 @@ namespace mkfit { float chi2Cut_min = 15.0; float chi2CutOverlap = 3.5; float pTCutOverlap = 0.0; + bool recheckOverlap = false; + bool useHitSelectionV2 = false; //quality filter params int minHitsQF = 4; diff --git a/RecoTracker/MkFitCore/interface/MkBuilder.h b/RecoTracker/MkFitCore/interface/MkBuilder.h index c68b3e7bf80e6..bf0335d31bc7a 100644 --- a/RecoTracker/MkFitCore/interface/MkBuilder.h +++ b/RecoTracker/MkFitCore/interface/MkBuilder.h @@ -38,6 +38,7 @@ namespace mkfit { static std::unique_ptr make_builder(bool silent = true); static void populate(); + static void clear(); int total_cands() const; std::pair max_hits_layer(const EventOfHits &eoh) const; diff --git a/RecoTracker/MkFitCore/interface/MkBuilderWrapper.h b/RecoTracker/MkFitCore/interface/MkBuilderWrapper.h index 63e16b3c0e759..fcc5c83e70ee5 100644 --- a/RecoTracker/MkFitCore/interface/MkBuilderWrapper.h +++ b/RecoTracker/MkFitCore/interface/MkBuilderWrapper.h @@ -20,6 +20,7 @@ namespace mkfit { MkBuilder& get() { return *builder_; } static void populate(); + static void clear(); private: std::unique_ptr builder_; diff --git a/RecoTracker/MkFitCore/interface/TrackStructures.h b/RecoTracker/MkFitCore/interface/TrackStructures.h index 736fbe8847e55..5c7912b8ea7c1 100644 --- a/RecoTracker/MkFitCore/interface/TrackStructures.h +++ b/RecoTracker/MkFitCore/interface/TrackStructures.h @@ -224,6 +224,7 @@ namespace mkfit { } void addHitIdx(int hitIdx, int hitLyr, float chi2); + bool popOverlap(); HoTNode& refLastHoTNode(); // for filling up overlap info const HoTNode& refLastHoTNode() const; // for dump traversal @@ -564,6 +565,25 @@ namespace mkfit { } } + inline bool TrackCand::popOverlap() { + auto popHitIdx = getLastHitIdx(); + auto popHitLyr = getLastHitLyr(); + auto popPrev = refLastHoTNode().m_prev_idx; + auto popChi2 = refLastHoTNode().m_chi2; + // sanity checks first, then just shift lastHitIdx_ to popPrev + if (lastHitIdx_ == 0 || popHitIdx < 0) + return false; + auto prevHitLyr = m_comb_candidate->hot(popPrev).layer; + auto prevHitIdx = m_comb_candidate->hot(popPrev).index; + if (popHitLyr != prevHitLyr || prevHitIdx < 0) + return false; + lastHitIdx_ = popPrev; + + --nFoundHits_; + chi2_ -= popChi2; + --nOverlapHits_; + return true; + } //============================================================================== class EventOfCombCandidates { diff --git a/RecoTracker/MkFitCore/src/CandCloner.cc b/RecoTracker/MkFitCore/src/CandCloner.cc index 253e639a20b2e..78d2ead9495d3 100644 --- a/RecoTracker/MkFitCore/src/CandCloner.cc +++ b/RecoTracker/MkFitCore/src/CandCloner.cc @@ -24,11 +24,13 @@ namespace mkfit { void CandCloner::begin_eta_bin(EventOfCombCandidates *e_o_ccs, std::vector *update_list, + std::vector *overlap_list, std::vector> *extra_cands, int start_seed, int n_seeds) { mp_event_of_comb_candidates = e_o_ccs; mp_kalman_update_list = update_list; + mp_kalman_overlap_list = overlap_list; mp_extra_cands = extra_cands; m_start_seed = start_seed; m_n_seeds = n_seeds; @@ -50,6 +52,7 @@ namespace mkfit { m_idx_max_prev = 0; mp_kalman_update_list->clear(); + mp_kalman_overlap_list->clear(); #ifdef CC_TIME_LAYER t_lay = dtime(); @@ -193,14 +196,21 @@ namespace mkfit { break; if (h2a.hitIdx >= 0) { - mp_kalman_update_list->emplace_back(UpdateIndices(m_start_seed + is, n_pushed, h2a.hitIdx)); - - // set the overlap if we have it and and pT > pTCutOverlap + // set the overlap if we have it and pT > pTCutOverlap HitMatch *hm; if (tc.pT() > mp_iteration_params->pTCutOverlap && (hm = ccand[h2a.trkIdx].findOverlap(h2a.hitIdx, h2a.module))) { - tc.addHitIdx(hm->m_hit_idx, m_layer, 0); - tc.incOverlapCount(); + if (mp_iteration_params->recheckOverlap) { + // Special overlap_list if the overlap hit needs to be re-checked after primary update. + mp_kalman_overlap_list->emplace_back( + UpdateIndices(m_start_seed + is, n_pushed, h2a.hitIdx, hm->m_hit_idx)); + } else { + tc.addHitIdx(hm->m_hit_idx, m_layer, 0); + tc.incOverlapCount(); + mp_kalman_update_list->emplace_back(UpdateIndices(m_start_seed + is, n_pushed, h2a.hitIdx, -1)); + } + } else { + mp_kalman_update_list->emplace_back(UpdateIndices(m_start_seed + is, n_pushed, h2a.hitIdx, -1)); } } diff --git a/RecoTracker/MkFitCore/src/CandCloner.h b/RecoTracker/MkFitCore/src/CandCloner.h index 0466811aa0520..fbb4a29bf69fd 100644 --- a/RecoTracker/MkFitCore/src/CandCloner.h +++ b/RecoTracker/MkFitCore/src/CandCloner.h @@ -25,6 +25,7 @@ namespace mkfit { void begin_eta_bin(EventOfCombCandidates *e_o_ccs, std::vector *update_list, + std::vector *overlap_list, std::vector> *extra_cands, int start_seed, int n_seeds); @@ -56,7 +57,7 @@ namespace mkfit { const IterationParams *mp_iteration_params = nullptr; EventOfCombCandidates *mp_event_of_comb_candidates; - std::vector *mp_kalman_update_list; + std::vector *mp_kalman_update_list, *mp_kalman_overlap_list; std::vector> *mp_extra_cands; #if defined(CC_TIME_ETA) or defined(CC_TIME_LAYER) diff --git a/RecoTracker/MkFitCore/src/FindingFoos.h b/RecoTracker/MkFitCore/src/FindingFoos.h index 939d141947b12..a02bff4e2c541 100644 --- a/RecoTracker/MkFitCore/src/FindingFoos.h +++ b/RecoTracker/MkFitCore/src/FindingFoos.h @@ -16,6 +16,10 @@ namespace mkfit { const MPlexLS &, const MPlexLV &, MPlexQI &, const MPlexHS &, const MPlexHV &, MPlexLS &, MPlexLV &, MPlexQI &, \ const int, const PropagationFlags &, const bool +#define COMPUTE_CHI2_AND_UPDATE_ARGS \ + const MPlexLS &, const MPlexLV &, MPlexQI &, const MPlexHS &, const MPlexHV &, MPlexQF &, MPlexLS &, MPlexLV &, \ + MPlexQI &, const int, const PropagationFlags, const bool + class FindingFoos { public: void (*m_compute_chi2_foo)(COMPUTE_CHI2_ARGS); diff --git a/RecoTracker/MkFitCore/src/HitStructures.cc b/RecoTracker/MkFitCore/src/HitStructures.cc index da2afc2f60b0f..91d9cebdeb60a 100644 --- a/RecoTracker/MkFitCore/src/HitStructures.cc +++ b/RecoTracker/MkFitCore/src/HitStructures.cc @@ -91,6 +91,9 @@ namespace mkfit { m_hit_infos.reserve(m_n_hits); } + // Factor to get from hit sigma to half-length in q direction. + const float hl_fac = is_pixel() ? 3.0f : std::sqrt(3.0f); + for (unsigned int i = 0; i < m_n_hits; ++i) { const Hit &h = hitv[i]; @@ -100,13 +103,12 @@ namespace mkfit { m_binnor.register_entry_safe(phi, q); if (Config::usePhiQArrays) { - const float sqrt3 = std::sqrt(3); float half_length, qbar; if (m_is_barrel) { - half_length = sqrt3 * std::sqrt(h.ezz()); + half_length = hl_fac * std::sqrt(h.ezz()); qbar = h.r(); } else { - half_length = sqrt3 * std::sqrt(h.exx() + h.eyy()); + half_length = hl_fac * std::sqrt(h.exx() + h.eyy()); qbar = h.z(); } hinfos.emplace_back(HitInfo({phi, q, half_length, qbar})); @@ -168,13 +170,14 @@ namespace mkfit { m_binnor.register_entry_safe(phi, q); if (Config::usePhiQArrays) { - const float sqrt3 = std::sqrt(3); + // Factor to get from hit sigma to half-length in q direction. + const float hl_fac = is_pixel() ? 3.0f : std::sqrt(3.0f); float half_length, qbar; if (m_is_barrel) { - half_length = sqrt3 * std::sqrt(h.ezz()); + half_length = hl_fac * std::sqrt(h.ezz()); qbar = h.r(); } else { - half_length = sqrt3 * std::sqrt(h.exx() + h.eyy()); + half_length = hl_fac * std::sqrt(h.exx() + h.eyy()); qbar = h.z(); } m_hit_infos.emplace_back(HitInfo({phi, q, half_length, qbar})); diff --git a/RecoTracker/MkFitCore/src/IterationConfig.cc b/RecoTracker/MkFitCore/src/IterationConfig.cc index 60e9066d89da0..b4b5e612584a9 100644 --- a/RecoTracker/MkFitCore/src/IterationConfig.cc +++ b/RecoTracker/MkFitCore/src/IterationConfig.cc @@ -61,6 +61,8 @@ namespace mkfit { /* float */ chi2Cut_min, /* float */ chi2CutOverlap, /* float */ pTCutOverlap, + /* bool */ recheckOverlap, + /* bool */ useHitSelectionV2, /* int */ minHitsQF, /* float */ minPtCut, /* unsigned int */ maxClusterSize) diff --git a/RecoTracker/MkFitCore/src/KalmanUtilsMPlex.cc b/RecoTracker/MkFitCore/src/KalmanUtilsMPlex.cc index 481ad42150fdc..01729ebed4610 100644 --- a/RecoTracker/MkFitCore/src/KalmanUtilsMPlex.cc +++ b/RecoTracker/MkFitCore/src/KalmanUtilsMPlex.cc @@ -741,7 +741,7 @@ namespace mkfit { KFO_Update_Params | KFO_Local_Cov, psErr, psPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc); } for (int n = 0; n < NN; ++n) { - if (outPar.At(n, 3, 0) < 0) { + if (n < N_proc && outPar.At(n, 3, 0) < 0) { Chg.At(n, 0, 0) = -Chg.At(n, 0, 0); outPar.At(n, 3, 0) = -outPar.At(n, 3, 0); } @@ -777,7 +777,11 @@ namespace mkfit { MPlexQF msRad; #pragma omp simd for (int n = 0; n < NN; ++n) { - msRad.At(n, 0, 0) = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0)); + if (n < N_proc) { + msRad.At(n, 0, 0) = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0)); + } else { + msRad.At(n, 0, 0) = 0.0f; + } } propagateHelixToRMPlex(psErr, psPar, inChg, msRad, propErr, propPar, outFailFlag, N_proc, propFlags); @@ -843,9 +847,14 @@ namespace mkfit { MPlexQF rotT00; MPlexQF rotT01; for (int n = 0; n < NN; ++n) { - const float r = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0)); - rotT00.At(n, 0, 0) = -(msPar.constAt(n, 1, 0) + psPar.constAt(n, 1, 0)) / (2 * r); - rotT01.At(n, 0, 0) = (msPar.constAt(n, 0, 0) + psPar.constAt(n, 0, 0)) / (2 * r); + if (n < N_proc) { + const float r = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0)); + rotT00.At(n, 0, 0) = -(msPar.constAt(n, 1, 0) + psPar.constAt(n, 1, 0)) / (2 * r); + rotT01.At(n, 0, 0) = (msPar.constAt(n, 0, 0) + psPar.constAt(n, 0, 0)) / (2 * r); + } else { + rotT00.At(n, 0, 0) = 0.0f; + rotT01.At(n, 0, 0) = 0.0f; + } } MPlexHV res_glo; //position residual in global coordinates @@ -1359,7 +1368,7 @@ namespace mkfit { kalmanOperationEndcap(KFO_Update_Params, psErr, psPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc); } for (int n = 0; n < NN; ++n) { - if (outPar.At(n, 3, 0) < 0) { + if (n < N_proc && outPar.At(n, 3, 0) < 0) { Chg.At(n, 0, 0) = -Chg.At(n, 0, 0); outPar.At(n, 3, 0) = -outPar.At(n, 3, 0); } diff --git a/RecoTracker/MkFitCore/src/Matriplex/Matriplex.h b/RecoTracker/MkFitCore/src/Matriplex/Matriplex.h index e38ab7728b2ab..b5e979b7d6e87 100644 --- a/RecoTracker/MkFitCore/src/Matriplex/Matriplex.h +++ b/RecoTracker/MkFitCore/src/Matriplex/Matriplex.h @@ -110,6 +110,24 @@ namespace Matriplex { return *this; } + Matriplex operator-() { + Matriplex t; + for (idx_t i = 0; i < kTotSize; ++i) + t.fArray[i] = -fArray[i]; + return t; + } + + Matriplex& abs(const Matriplex& a) { + for (idx_t i = 0; i < kTotSize; ++i) + fArray[i] = std::abs(a.fArray[i]); + return *this; + } + Matriplex& abs() { + for (idx_t i = 0; i < kTotSize; ++i) + fArray[i] = std::abs(fArray[i]); + return *this; + } + Matriplex& sqrt(const Matriplex& a) { for (idx_t i = 0; i < kTotSize; ++i) fArray[i] = std::sqrt(a.fArray[i]); @@ -396,6 +414,12 @@ namespace Matriplex { return t; } + template + MPlex abs(const MPlex& a) { + MPlex t; + return t.abs(a); + } + template MPlex sqrt(const MPlex& a) { MPlex t; @@ -405,7 +429,7 @@ namespace Matriplex { template MPlex sqr(const MPlex& a) { MPlex t; - return t.sqrt(a); + return t.sqr(a); } template diff --git a/RecoTracker/MkFitCore/src/Matriplex/MatriplexSym.h b/RecoTracker/MkFitCore/src/Matriplex/MatriplexSym.h index 151f616402440..e3b1a133f0daf 100644 --- a/RecoTracker/MkFitCore/src/Matriplex/MatriplexSym.h +++ b/RecoTracker/MkFitCore/src/Matriplex/MatriplexSym.h @@ -78,6 +78,8 @@ namespace Matriplex { return *this; } + MatriplexSym(const MatriplexSym& m) = default; + void copySlot(idx_t n, const MatriplexSym& m) { for (idx_t i = n; i < kTotSize; i += N) { fArray[i] = m.fArray[i]; @@ -263,6 +265,14 @@ namespace Matriplex { a[5 * N + n] = s * c22; } } + + Matriplex ReduceFixedIJ(idx_t i, idx_t j) const { + Matriplex t; + for (idx_t n = 0; n < N; ++n) { + t[n] = constAt(n, i, j); + } + return t; + } }; template diff --git a/RecoTracker/MkFitCore/src/MatriplexPackers.h b/RecoTracker/MkFitCore/src/MatriplexPackers.h index feef081682763..714de9eb23364 100644 --- a/RecoTracker/MkFitCore/src/MatriplexPackers.h +++ b/RecoTracker/MkFitCore/src/MatriplexPackers.h @@ -25,6 +25,8 @@ namespace mkfit { void reset() { m_pos = 0; } + int size() const { return m_pos; } + void addNullInput() { m_idx[m_pos++] = 0; } void addInput(const D& item) { diff --git a/RecoTracker/MkFitCore/src/MkBuilder.cc b/RecoTracker/MkFitCore/src/MkBuilder.cc index 2c984991519b8..0bedff5de99f1 100644 --- a/RecoTracker/MkFitCore/src/MkBuilder.cc +++ b/RecoTracker/MkFitCore/src/MkBuilder.cc @@ -44,6 +44,12 @@ namespace mkfit { m_fitters.populate(n_thr - m_fitters.size()); m_finders.populate(n_thr - m_finders.size()); } + + void clear() { + m_cloners.clear(); + m_fitters.clear(); + m_finders.clear(); + } }; CMS_SA_ALLOW ExecutionContext g_exe_ctx; @@ -166,6 +172,7 @@ namespace mkfit { std::unique_ptr MkBuilder::make_builder(bool silent) { return std::make_unique(silent); } void MkBuilder::populate() { g_exe_ctx.populate(Config::numThreadsFinder); } + void MkBuilder::clear() { g_exe_ctx.clear(); } std::pair MkBuilder::max_hits_layer(const EventOfHits &eoh) const { int maxN = 0; @@ -979,15 +986,16 @@ namespace mkfit { const int n_seeds = end_seed - start_seed; std::vector> seed_cand_idx; - std::vector seed_cand_update_idx; + std::vector seed_cand_update_idx, seed_cand_overlap_idx; seed_cand_idx.reserve(n_seeds * params.maxCandsPerSeed); seed_cand_update_idx.reserve(n_seeds * params.maxCandsPerSeed); + seed_cand_overlap_idx.reserve(n_seeds * params.maxCandsPerSeed); std::vector> extra_cands(n_seeds); for (int ii = 0; ii < n_seeds; ++ii) extra_cands[ii].reserve(params.maxCandsPerSeed); - cloner.begin_eta_bin(&eoccs, &seed_cand_update_idx, &extra_cands, start_seed, n_seeds); + cloner.begin_eta_bin(&eoccs, &seed_cand_update_idx, &seed_cand_overlap_idx, &extra_cands, start_seed, n_seeds); // Loop over layers, starting from after the seed. @@ -1087,7 +1095,10 @@ namespace mkfit { dprint("now get hit range"); - mkfndr->selectHitIndices(layer_of_hits, end - itrack); + if (iter_params.useHitSelectionV2) + mkfndr->selectHitIndicesV2(layer_of_hits, end - itrack); + else + mkfndr->selectHitIndices(layer_of_hits, end - itrack); find_tracks_handle_missed_layers( mkfndr, layer_info, extra_cands, seed_cand_idx, region, start_seed, itrack, end); @@ -1115,6 +1126,9 @@ namespace mkfit { // Update loop of best candidates. CandCloner prepares the list of those // that need update (excluding all those with negative last hit index). + // This is split into two sections - candidates without overlaps and with overlaps. + // On CMS PU-50 the ratio of those is ~ 65 : 35 over all iterations. + // Note, overlap recheck is only enabled for some iterations, e.g. pixelLess. const int theEndUpdater = seed_cand_update_idx.size(); @@ -1129,6 +1143,43 @@ namespace mkfit { mkfndr->copyOutParErr(eoccs.refCandidates_nc(), end - itrack, false); } + const int theEndOverlapper = seed_cand_overlap_idx.size(); + + for (int itrack = 0; itrack < theEndOverlapper; itrack += NN) { + const int end = std::min(itrack + NN, theEndOverlapper); + + mkfndr->inputTracksAndHits(eoccs.refCandidates(), layer_of_hits, seed_cand_overlap_idx, itrack, end, true); + + mkfndr->updateWithLoadedHit(end - itrack, layer_of_hits, fnd_foos); + + mkfndr->copyOutParErr(eoccs.refCandidates_nc(), end - itrack, false); + + mkfndr->inputOverlapHits(layer_of_hits, seed_cand_overlap_idx, itrack, end); + + // XXXX Could also be calcChi2AndUpdate(), then copy-out would have to be done + // below, choosing appropriate slot (with or without the overlap hit). + // Probably in a dedicated MkFinder copyOutXyzz function. + mkfndr->chi2OfLoadedHit(end - itrack, fnd_foos); + + for (int ii = itrack; ii < end; ++ii) { + const int fi = ii - itrack; + TrackCand &tc = eoccs[seed_cand_overlap_idx[ii].seed_idx][seed_cand_overlap_idx[ii].cand_idx]; + + // XXXX For now we DO NOT use chi2 as this was how things were done before the post-update + // chi2 check. To use it we should retune scoring function (might be even simpler). + auto chi2Ovlp = mkfndr->m_Chi2[fi]; + if (mkfndr->m_FailFlag[fi] == 0 && chi2Ovlp >= 0.0f && chi2Ovlp <= 60.0f) { + auto scoreCand = + getScoreCand(st_par.m_track_scorer, tc, true /*penalizeTailMissHits*/, true /*inFindCandidates*/); + tc.addHitIdx(seed_cand_overlap_idx[ii].ovlp_idx, curr_layer, chi2Ovlp); + tc.incOverlapCount(); + auto scoreCandOvlp = getScoreCand(st_par.m_track_scorer, tc, true, true); + if (scoreCand > scoreCandOvlp) + tc.popOverlap(); + } + } + } + // Check if cands are sorted, as expected. #ifdef DEBUG for (int iseed = start_seed; iseed < end_seed; ++iseed) { diff --git a/RecoTracker/MkFitCore/src/MkBuilderWrapper.cc b/RecoTracker/MkFitCore/src/MkBuilderWrapper.cc index 08bd3793bf459..f05db168d1684 100644 --- a/RecoTracker/MkFitCore/src/MkBuilderWrapper.cc +++ b/RecoTracker/MkFitCore/src/MkBuilderWrapper.cc @@ -3,8 +3,9 @@ namespace mkfit { MkBuilderWrapper::MkBuilderWrapper(bool silent) : builder_(MkBuilder::make_builder(silent)) {} - - MkBuilderWrapper::~MkBuilderWrapper() {} + MkBuilderWrapper::~MkBuilderWrapper() = default; void MkBuilderWrapper::populate() { MkBuilder::populate(); } + void MkBuilderWrapper::clear() { MkBuilder::clear(); } + } // namespace mkfit diff --git a/RecoTracker/MkFitCore/src/MkFinder.cc b/RecoTracker/MkFitCore/src/MkFinder.cc index ee9726a8eb485..725e5095e9545 100644 --- a/RecoTracker/MkFitCore/src/MkFinder.cc +++ b/RecoTracker/MkFitCore/src/MkFinder.cc @@ -178,6 +178,19 @@ namespace mkfit { } } + void MkFinder::inputOverlapHits(const LayerOfHits &layer_of_hits, + const std::vector &idxs, + int beg, + int end) { + // Copy overlap hit values in. + + for (int i = beg, imp = 0; i < end; ++i, ++imp) { + const Hit &hit = layer_of_hits.refHit(idxs[i].ovlp_idx); + m_msErr.copyIn(imp, hit.errArray()); + m_msPar.copyIn(imp, hit.posArray()); + } + } + void MkFinder::inputTracksAndHitIdx(const std::vector &tracks, const std::vector> &idxs, int beg, @@ -226,8 +239,8 @@ namespace mkfit { void MkFinder::packModuleNormDir( const LayerOfHits &layer_of_hits, int hit_cnt, MPlexHV &norm, MPlexHV &dir, int N_proc) const { - for (int itrack = 0; itrack < N_proc; ++itrack) { - if (hit_cnt < m_XHitSize[itrack]) { + for (int itrack = 0; itrack < NN; ++itrack) { + if (itrack < N_proc && hit_cnt < m_XHitSize[itrack]) { const auto &hit = layer_of_hits.refHit(m_XHitArr.constAt(itrack, hit_cnt, 0)); unsigned int mid = hit.detIDinLayer(); const ModuleInfo &mi = layer_of_hits.layer_info()->module_info(mid); @@ -255,7 +268,7 @@ namespace mkfit { if (!v.empty()) { // dq hit selection window - float this_dq = v[dq_sf] * (v[dq_0] * max_invpt + v[dq_1] * theta + v[dq_2]); + const float this_dq = v[dq_sf] * (v[dq_0] * max_invpt + v[dq_1] * theta + v[dq_2]); // In case value is below 0 (bad window derivation or other reasons), leave original limits if (this_dq > 0.f) { min_dq = this_dq; @@ -263,7 +276,7 @@ namespace mkfit { } // dphi hit selection window - float this_dphi = v[dp_sf] * (v[dp_0] * max_invpt + v[dp_1] * theta + v[dp_2]); + const float this_dphi = v[dp_sf] * (v[dp_0] * max_invpt + v[dp_1] * theta + v[dp_2]); // In case value is too low (bad window derivation or other reasons), leave original limits if (this_dphi > min_dphi) { min_dphi = this_dphi; @@ -363,6 +376,8 @@ namespace mkfit { #pragma omp simd #endif for (int itrack = 0; itrack < NN; ++itrack) { + if (itrack >= N_proc) + continue; m_XHitSize[itrack] = 0; float min_dq = ILC.min_dq(); @@ -474,7 +489,10 @@ namespace mkfit { // Vectorizing this makes it run slower! //#pragma omp simd - for (int itrack = 0; itrack < N_proc; ++itrack) { + for (int itrack = 0; itrack < NN; ++itrack) { + if (itrack >= N_proc) { + continue; + } // PROP-FAIL-ENABLE The following to be enabled when propagation failure // detection is properly implemented in propagate-to-R/Z. if (m_FailFlag[itrack]) { @@ -776,6 +794,8 @@ namespace mkfit { mp::StatePlex sp1, sp2; int n_proc; + MPlexQF dphi_track, dq_track; // 3 sigma track errors at initial state + // debug & ntuple dump -- to be local in functions MPlexQF phi_c, dphi; MPlexQF q_c, qmin, qmax; @@ -795,10 +815,10 @@ namespace mkfit { } } - void find_bin_ranges(const LayerInfo &li, const LayerOfHits &loh) { + void find_bin_ranges(const LayerInfo &li, const LayerOfHits &loh, const MPlexLS &err) { // Below made members for debugging // MPlexQF phi_c, dphi_min, dphi_max; - phi_c = mp::fast_atan2(isp.y, isp.x); + // phi_c = mp::fast_atan2(isp.y, isp.x); // calculated below as difference // Matriplex::min_max(sp1.dphi, sp2.dphi, dphi_min, dphi_max); // the above is wrong: dalpha is not dphi --> renamed variable in State @@ -809,24 +829,40 @@ namespace mkfit { // Matriplex::min_max(mp::fast_atan2(sp1.y, sp1.x), smp::fast_atan2(sp2.y, sp2.x), pmin, pmax); MPlexQF dp = pmax - pmin; phi_c = 0.5f * (pmax + pmin); - for (int ii = 0; ii < n_proc; ++ii) { - if (dp[ii] > Const::PI) { - std::swap(pmax[ii], pmin[ii]); - dp[ii] = Const::TwoPI - dp[ii]; - phi_c[ii] = Const::PI - phi_c[ii]; + for (int ii = 0; ii < NN; ++ii) { + if (ii < n_proc) { + if (dp[ii] > Const::PI) { + std::swap(pmax[ii], pmin[ii]); + dp[ii] = Const::TwoPI - dp[ii]; + phi_c[ii] = Const::PI - phi_c[ii]; + } + dphi[ii] = 0.5f * dp[ii]; + // printf("phic: %f p1: %f p2: %f pmin: %f pmax: %f dphi: %f\n", + // phi_c[ii], xp1[ii], xp2[ii], pmin[ii], pmax[ii], dphi[ii]); } - dphi[ii] = 0.5f * dp[ii]; - // printf("phic: %f p1: %f p2: %f pmin: %f pmax: %f dphi: %f\n", - // phi_c[ii], xp1[ii], xp2[ii], pmin[ii], pmax[ii], dphi[ii]); } + const auto calc_err_xy = [&](const MPlexQF &x, const MPlexQF &y) { + return x * x * err.ReduceFixedIJ(0, 0) + y * y * err.ReduceFixedIJ(1, 1) + + 2.0f * x * y * err.ReduceFixedIJ(0, 1); + }; + + // Calculate dphi_track, dq_track differs for barrel/endcap + MPlexQF r2_c = isp.x * isp.x + isp.y * isp.y; + MPlexQF r2inv_c = 1.0f / r2_c; + MPlexQF dphidx_c = -isp.y * r2inv_c; + MPlexQF dphidy_c = isp.x * r2inv_c; + dphi_track = 3.0f * calc_err_xy(dphidx_c, dphidy_c).abs().sqrt(); + // MPlexQF qmin, qmax; if (li.is_barrel()) { Matriplex::min_max(sp1.z, sp2.z, qmin, qmax); q_c = isp.z; + dq_track = 3.0f * err.ReduceFixedIJ(2, 2).abs().sqrt(); } else { Matriplex::min_max(Matriplex::hypot(sp1.x, sp1.y), Matriplex::hypot(sp2.x, sp2.y), qmin, qmax); - q_c = Matriplex::hypot(isp.x, isp.y); + q_c = Matriplex::sqrt(r2_c); + dq_track = 3.0f * (r2inv_c * calc_err_xy(isp.x, isp.y).abs()).sqrt(); } for (int i = 0; i < p1.kTotSize; ++i) { @@ -834,30 +870,32 @@ namespace mkfit { // const float dphi_clamp = 0.1; // if (dphi_min[i] > 0.0f || dphi_min[i] < -dphi_clamp) dphi_min[i] = -dphi_clamp; // if (dphi_max[i] < 0.0f || dphi_max[i] > dphi_clampf) dphi_max[i] = dphi_clamp; - p1[i] = loh.phiBinChecked(pmin[i] - PHI_BIN_EXTRA_FAC * 0.0123f); - p2[i] = loh.phiBinChecked(pmax[i] + PHI_BIN_EXTRA_FAC * 0.0123f); + p1[i] = loh.phiBinChecked(pmin[i] - dphi_track[i] - PHI_BIN_EXTRA_FAC * 0.0123f); + p2[i] = loh.phiBinChecked(pmax[i] + dphi_track[i] + PHI_BIN_EXTRA_FAC * 0.0123f); q0[i] = loh.qBinChecked(q_c[i]); - q1[i] = loh.qBinChecked(qmin[i] - Q_BIN_EXTRA_FAC * 0.5f * li.q_bin()); - q2[i] = loh.qBinChecked(qmax[i] + Q_BIN_EXTRA_FAC * 0.5f * li.q_bin()) + 1; + q1[i] = loh.qBinChecked(qmin[i] - dq_track[i] - Q_BIN_EXTRA_FAC * 0.5f * li.q_bin()); + q2[i] = loh.qBinChecked(qmax[i] + dq_track[i] + Q_BIN_EXTRA_FAC * 0.5f * li.q_bin()) + 1; } } }; Bins B(m_Par[iI], m_Chg, N_proc); B.prop_to_limits(LI); - B.find_bin_ranges(LI, L); - - for (int i = 0; i < N_proc; ++i) { - m_XHitSize[i] = 0; - // Notify failure. Ideally should be detected before selectHitIndices(). - if (m_FailFlag[i]) { - m_XWsrResult[i].m_wsr = WSR_Failed; - } else { - if (LI.is_barrel()) { - m_XWsrResult[i] = L.is_within_z_sensitive_region(B.q_c[i], 0.5f * (B.q2[i] - B.q1[i])); + B.find_bin_ranges(LI, L, m_Err[iI]); + + for (int i = 0; i < NN; ++i) { + if (i < N_proc) { + m_XHitSize[i] = 0; + // Notify failure. Ideally should be detected before selectHitIndices(). + if (m_FailFlag[i]) { + m_XWsrResult[i].m_wsr = WSR_Failed; } else { - m_XWsrResult[i] = L.is_within_r_sensitive_region(B.q_c[i], 0.5f * (B.q2[i] - B.q1[i])); + if (LI.is_barrel()) { + m_XWsrResult[i] = L.is_within_z_sensitive_region(B.q_c[i], 0.5f * (B.q2[i] - B.q1[i])); + } else { + m_XWsrResult[i] = L.is_within_r_sensitive_region(B.q_c[i], 0.5f * (B.q2[i] - B.q1[i])); + } } } } @@ -897,7 +935,11 @@ namespace mkfit { // Vectorizing this makes it run slower! //#pragma omp simd - for (int itrack = 0; itrack < N_proc; ++itrack) { + for (int itrack = 0; itrack < NN; ++itrack) { + if (itrack >= N_proc) { + continue; + } + if (m_FailFlag[itrack]) { m_XWsrResult[itrack].m_wsr = WSR_Failed; continue; @@ -969,8 +1011,8 @@ namespace mkfit { new_ddphi = cdist(std::abs(new_phi - L.hit_phi(hi))); new_ddq = std::abs(new_q - L.hit_q(hi)); - bool dqdphi_presel = - new_ddq < DDQ_PRESEL_FAC * L.hit_q_half_length(hi) && new_ddphi < DDPHI_PRESEL_FAC * 0.0123f; + bool dqdphi_presel = new_ddq < B.dq_track[itrack] + DDQ_PRESEL_FAC * L.hit_q_half_length(hi) && + new_ddphi < B.dphi_track[itrack] + DDPHI_PRESEL_FAC * 0.0123f; // clang-format off dprintf(" SHI %3u %4u %5u %6.3f %6.3f %6.4f %7.5f PROP-%s %s\n", @@ -1036,8 +1078,8 @@ namespace mkfit { mhp.reset(); //#pragma omp simd doesn't vectorize with current compilers - for (int itrack = 0; itrack < N_proc; ++itrack) { - if (hit_cnt < m_XHitSize[itrack]) { + for (int itrack = 0; itrack < NN; ++itrack) { + if (itrack < N_proc && hit_cnt < m_XHitSize[itrack]) { mhp.addInputAt(itrack, layer_of_hits.refHit(m_XHitArr.At(itrack, hit_cnt, 0))); } } @@ -1062,8 +1104,8 @@ namespace mkfit { //update best hit in case chi2 +#include + +class EcalEBPhase2TPGAmplWeightIdMap; +class EcalTPGWeightGroup; + +/** \class EcalPhase2AmplitudeReconstructor +\author L. Lutton, N. Marinelli - Univ. of Notre Dame + Description: forPhase II + It uses the new Phase2 digis based on the new EB electronics + and measures the amplitude on xTals basis +*/ + +class EcalEBPhase2AmplitudeReconstructor { +private: + static const int maxSamplesUsed_ = 12; + bool debug_; + int inputsAlreadyIn_; + int buffer_[maxSamplesUsed_]; + int weights_[maxSamplesUsed_]; + int shift_; + int setInput(int input); + void process(); + int processedOutput_; + +public: + EcalEBPhase2AmplitudeReconstructor(bool debug); + virtual ~EcalEBPhase2AmplitudeReconstructor(); + virtual void process(std::vector &addout, std::vector &output); + void setParameters(uint32_t raw, + const EcalEBPhase2TPGAmplWeightIdMap *ecaltpgWeightMap, + const EcalTPGWeightGroup *ecaltpgWeightGroup); +}; + +#endif diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2Linearizer.h b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2Linearizer.h new file mode 100644 index 0000000000000..6b86db0dcfb5b --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2Linearizer.h @@ -0,0 +1,58 @@ +#ifndef SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2Linearizer_h +#define SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2Linearizer_h + +#include "DataFormats/EcalDigi/interface/EcalLiteDTUSample.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" + +#include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" + +#include + +/** \class EcalEBPhase2Linearizer +\author L. Lutton, N. Marinelli - Univ. of Notre Dame + Description: forPhase II + Performs the linearization of signal from Catia+LiteDTU +*/ + +class EcalEBPhase2Linearizer { +private: + bool debug_; + int uncorrectedSample_; + int gainID_; + uint base_; + uint mult_; + uint shift_; + int strip_; + bool init_; + float gainDivideByTen_ = 0.1; + std::vector coeffs_; + uint coeff_; + //I2C Stuff. Would eventually get from outside linearizer (e.g., database) + //Would also be different for each crystal + uint I2CSub_; + + const EcalLiteDTUPedestals *peds_; + const EcalEBPhase2TPGLinearizationConstant *linConsts_; + const EcalTPGCrystalStatusCode *badXStatus_; + + std::vector vectorbadXStatus_; + + int setInput(const EcalLiteDTUSample &RawSam); + + int doOutput(); + +public: + EcalEBPhase2Linearizer(bool debug); + virtual ~EcalEBPhase2Linearizer(); + + void process(const EBDigiCollectionPh2::Digi &df, std::vector &output_percry); + void setParameters(EBDetId id, + const EcalLiteDTUPedestalsMap *peds, + const EcalEBPhase2TPGLinearizationConstMap *ecaltplin, + const EcalTPGCrystalStatus *ecaltpBadX); +}; + +#endif diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2SpikeTagger.h b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2SpikeTagger.h new file mode 100644 index 0000000000000..1df64a51eee46 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2SpikeTagger.h @@ -0,0 +1,36 @@ +#ifndef SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2SpikeTagger_h +#define SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2SpikeTagger_h + +#include "DataFormats/EcalDigi/interface/EcalLiteDTUSample.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" + +#include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" + +#include + +/** \class EcalEBPhase2SpikeTagger + Tags spikes on a channel basis +*/ + +class EcalEBPhase2SpikeTagger { +private: + bool debug_; + const EcalLiteDTUPedestals *peds_; + const EcalEBPhase2TPGLinearizationConstant *linConsts_; + const EcalTPGCrystalStatusCode *badXStatus_; + +public: + EcalEBPhase2SpikeTagger(bool debug); + virtual ~EcalEBPhase2SpikeTagger(); + + bool process(const std::vector &linInput); + void setParameters(EBDetId id, + const EcalLiteDTUPedestalsMap *peds, + const EcalEBPhase2TPGLinearizationConstMap *ecaltplin, + const EcalTPGCrystalStatus *ecaltpBadX); +}; + +#endif diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TPFormatter.h b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TPFormatter.h new file mode 100644 index 0000000000000..9a73aa394f491 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TPFormatter.h @@ -0,0 +1,28 @@ +#ifndef SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2TPFormatter_h +#define SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2TPFormatter_h + +#include "DataFormats/EcalDigi/interface/EcalEBTriggerPrimitiveSample.h" + +#include +#include + +/* + \class EcalEBPhase2TPFormatter + +*/ + +class EcalEBPhase2TPFormatter { +private: + bool debug_; + std::vector inputAmp_; + std::vector inputTime_; + +public: + EcalEBPhase2TPFormatter(bool debug); + virtual ~EcalEBPhase2TPFormatter(); + virtual void process(std::vector& ampl, + std::vector& time, + std::vector& outampl, + std::vector& outtime); +}; +#endif diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TimeReconstructor.h b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TimeReconstructor.h new file mode 100644 index 0000000000000..0daa2a9676103 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TimeReconstructor.h @@ -0,0 +1,115 @@ +#ifndef SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2TimeReconstructor_h +#define SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2TimeReconstructor_h + +#include +#include + +class EcalEBPhase2TPGTimeWeightIdMap; +class EcalTPGWeightGroup; + +/** \class EcalEBPhase2TimeReconstructor +\author L. Lutton, N. Marinelli - Univ. of Notre Dame + Description: forPhase II + Measures the timing of a xTal signal +*/ + +class EcalEBPhase2TimeReconstructor { +private: + static const int maxSamplesUsed_ = 12; + bool debug_; + int inputsAlreadyIn_; + int buffer_[maxSamplesUsed_]; + int weights_[maxSamplesUsed_]; + uint64_t ampIn_[maxSamplesUsed_]; + int shift_; + bool extraShift_[2] = {false, false}; + int setInput(int input); + void process(); + int processedOutput_; + + // The array invAmpPar is pre-calulated, at least for now since it has shown to be stable. We might decide at a later stage + // to make the calculation dynamic in CMSSW. + // Here some explnation of what this LUT is. + + //The sum of the digis multiplied by the time weight coefficients gives dT*A, where A is the amplitude. + //So to get dT the amplitude, calculated in EcalEBPhase2AmplitudeReconstructor, must be divided off of the result here. + //However, when this is implemented into the BCP hardware (of which we are emulating the behaviour), + //division is not a trivial operation, often requiring relatively large + //amounts of time and resources to complete. + //To optimize this operation, we instead use an approximation of that division via a lookup table (LUT). + //Think about the division as a multiplication of 1/A, then the LUT is filled with all the possible values of 1/A, + //precalculated, in the range that A takes and A itself is used to index the LUT. + //The element received is then multiplied by the dT*A result in order to get a measurement of the timing. + + //Another limitation of hardware is that we do not use floating point numbers. + //So, instead, each element of the LUT is bit shifted to the left by some amount sufficient to make every element + //of the LUT large enough such that converting it to an integer doesn't lead to a loss in performance + //(this bit shift is undone after the multiplication by a corresponding bit shift to the right). + //Another method of approximation used here is that not every element in A's range is included in the LUT. + //Instead, every 8th element is used, since the difference between, e.g., dividing by 1000 and 1008 is generally + //small whereas it can be a significant save in time and resources in hardware to use a smaller LUT. + //Note that this requires the indexing amplitude to be bit shifted by 3 to the right to compensate for the smaller size of the LUT. + //Finally, dT will be in units of ns, but to convert it to ps each element of the LUT is multiplied by 1000. + + //The pre-calculation of the LUT is given by: + //invAmpAr_ = [1000*invMult] #Since 1/0 is undefined, the array starts with 1/1. The rest of the elements will be filled in the following loop: + //for i in range(8,4096,8): #loop is set to do every 8th number, so 1/8, 1/16, 1/24, etc. 4096 is the expected range of A + //invAmpAr_.append(round((ns_to_ps_conv/i)*invMult)) + //Where ns_to_ps_conv = 1000 #this is to convert the resulting dT from units of ns to units of ps + //invMult = 2**18 #Acts as a shift by 18 bits that is done to the fractions to make them integers instead of floats. + + uint64_t invAmpAr_[512] = { + 262144000, 32768000, 16384000, 10922667, 8192000, 6553600, 5461333, 4681143, 4096000, 3640889, 3276800, 2978909, + 2730667, 2520615, 2340571, 2184533, 2048000, 1927529, 1820444, 1724632, 1638400, 1560381, 1489455, 1424696, + 1365333, 1310720, 1260308, 1213630, 1170286, 1129931, 1092267, 1057032, 1024000, 992970, 963765, 936229, + 910222, 885622, 862316, 840205, 819200, 799220, 780190, 762047, 744727, 728178, 712348, 697191, + 682667, 668735, 655360, 642510, 630154, 618264, 606815, 595782, 585143, 574877, 564966, 555390, + 546133, 537180, 528516, 520127, 512000, 504123, 496485, 489075, 481882, 474899, 468114, 461521, + 455111, 448877, 442811, 436907, 431158, 425558, 420103, 414785, 409600, 404543, 399610, 394795, + 390095, 385506, 381023, 376644, 372364, 368180, 364089, 360088, 356174, 352344, 348596, 344926, + 341333, 337814, 334367, 330990, 327680, 324436, 321255, 318136, 315077, 312076, 309132, 306243, + 303407, 300624, 297891, 295207, 292571, 289982, 287439, 284939, 282483, 280068, 277695, 275361, + 273067, 270810, 268590, 266407, 264258, 262144, 260063, 258016, 256000, 254016, 252062, 250137, + 248242, 246376, 244537, 242726, 240941, 239182, 237449, 235741, 234057, 232397, 230761, 229147, + 227556, 225986, 224438, 222912, 221405, 219919, 218453, 217007, 215579, 214170, 212779, 211406, + 210051, 208713, 207392, 206088, 204800, 203528, 202272, 201031, 199805, 198594, 197398, 196216, + 195048, 193893, 192753, 191626, 190512, 189410, 188322, 187246, 186182, 185130, 184090, 183061, + 182044, 181039, 180044, 179060, 178087, 177124, 176172, 175230, 174298, 173376, 172463, 171560, + 170667, 169782, 168907, 168041, 167184, 166335, 165495, 164663, 163840, 163025, 162218, 161419, + 160627, 159844, 159068, 158300, 157538, 156785, 156038, 155299, 154566, 153840, 153121, 152409, + 151704, 151005, 150312, 149626, 148945, 148271, 147604, 146942, 146286, 145636, 144991, 144352, + 143719, 143092, 142470, 141853, 141241, 140635, 140034, 139438, 138847, 138262, 137681, 137105, + 136533, 135967, 135405, 134848, 134295, 133747, 133203, 132664, 132129, 131598, 131072, 130550, + 130032, 129518, 129008, 128502, 128000, 127502, 127008, 126517, 126031, 125548, 125069, 124593, + 124121, 123653, 123188, 122727, 122269, 121814, 121363, 120915, 120471, 120029, 119591, 119156, + 118725, 118296, 117871, 117448, 117029, 116612, 116199, 115788, 115380, 114975, 114573, 114174, + 113778, 113384, 112993, 112605, 112219, 111836, 111456, 111078, 110703, 110330, 109960, 109592, + 109227, 108864, 108503, 108145, 107789, 107436, 107085, 106736, 106390, 106045, 105703, 105363, + 105026, 104690, 104357, 104025, 103696, 103369, 103044, 102721, 102400, 102081, 101764, 101449, + 101136, 100825, 100515, 100208, 99902, 99599, 99297, 98997, 98699, 98402, 98108, 97815, + 97524, 97234, 96947, 96661, 96376, 96094, 95813, 95534, 95256, 94980, 94705, 94432, + 94161, 93891, 93623, 93356, 93091, 92827, 92565, 92304, 92045, 91787, 91531, 91276, + 91022, 90770, 90519, 90270, 90022, 89775, 89530, 89286, 89043, 88802, 88562, 88323, + 88086, 87850, 87615, 87381, 87149, 86918, 86688, 86459, 86232, 86005, 85780, 85556, + 85333, 85112, 84891, 84672, 84454, 84237, 84021, 83806, 83592, 83379, 83168, 82957, + 82747, 82539, 82332, 82125, 81920, 81716, 81512, 81310, 81109, 80909, 80709, 80511, + 80314, 80117, 79922, 79727, 79534, 79341, 79150, 78959, 78769, 78580, 78392, 78205, + 78019, 77834, 77649, 77466, 77283, 77101, 76920, 76740, 76561, 76382, 76205, 76028, + 75852, 75677, 75502, 75329, 75156, 74984, 74813, 74642, 74473, 74304, 74136, 73968, + 73802, 73636, 73471, 73306, 73143, 72980, 72818, 72656, 72496, 72336, 72176, 72018, + 71860, 71702, 71546, 71390, 71235, 71080, 70926, 70773, 70621, 70469, 70318, 70167, + 70017, 69868, 69719, 69571, 69424, 69277, 69131, 68985, 68840, 68696, 68552, 68409, + 68267, 68125, 67983, 67843, 67702, 67563, 67424, 67285, 67148, 67010, 66873, 66737, + 66602, 66467, 66332, 66198, 66065, 65932, 65799, 65667, 65536, 65405, 65275, 65145, + 65016, 64887, 64759, 64631, 64504, 64377, 64251, 64125}; + +public: + EcalEBPhase2TimeReconstructor(bool debug); + virtual ~EcalEBPhase2TimeReconstructor(); + virtual void process(std::vector &addout, std::vector &RecoOutput, std::vector &output); + void setParameters(uint32_t raw, + const EcalEBPhase2TPGTimeWeightIdMap *ecaltpgTimeWeightMap, + const EcalTPGWeightGroup *ecaltpgWeightGroup); +}; + +#endif diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TrigPrimAlgo.h b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TrigPrimAlgo.h new file mode 100644 index 0000000000000..a0dad15d02e26 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TrigPrimAlgo.h @@ -0,0 +1,217 @@ +#ifndef SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2TrigPrimAlgo_h +#define SimCalorimetry_EcalEBTrigPrimAlgos_EcalEBPhase2TrigPrimAlgo_h +/** \class EcalEBPhase2TrigPrimAlgo +\author L. Lutton, N. Marinelli - Univ. of Notre Dame + Description: forPhase II + It uses the new Phase2 digis based onthe new EB electronics + This is the main algo which plugs in all the subcomponents for the + amplitude and time measurement and the spike flagging +*/ + +#include +#include +#include + +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" +#include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" +#include "DataFormats/EcalDetId/interface/EcalTriggerElectronicsId.h" +#include "DataFormats/Common/interface/SortedCollection.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" + +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" +#include "Geometry/CaloGeometry/interface/CaloSubdetectorGeometry.h" +#include "Geometry/CaloGeometry/interface/CaloCellGeometry.h" +#include "DataFormats/EcalDigi/interface/EcalDataFrame_Ph2.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" + +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2Linearizer.h" +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2AmplitudeReconstructor.h" +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TimeReconstructor.h" +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2SpikeTagger.h" +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TPFormatter.h" + +#include +#include + +class EcalTrigTowerDetId; +class ETPCoherenceTest; +class EcalEBPhase2TriggerPrimitiveSample; +class CaloSubdetectorGeometry; +class EBDataFrame_Ph2; + +class EcalEBPhase2TrigPrimAlgo { +public: + explicit EcalEBPhase2TrigPrimAlgo(const EcalTrigTowerConstituentsMap *eTTmap, + const CaloGeometry *theGeometry, + int binofmax, + bool debug); + + virtual ~EcalEBPhase2TrigPrimAlgo(); + + void run(const EBDigiCollectionPh2 *col, EcalEBPhase2TrigPrimDigiCollection &result); + + void setPointers(const EcalLiteDTUPedestalsMap *ecaltpPed, + const EcalEBPhase2TPGLinearizationConstMap *ecaltpLin, + const EcalTPGCrystalStatus *ecaltpgBadX, + const EcalEBPhase2TPGAmplWeightIdMap *ecaltpgAmplWeightMap, + const EcalEBPhase2TPGTimeWeightIdMap *ecaltpgTimeWeightMap, + const EcalTPGWeightGroup *ecaltpgWeightGroup) { + ecaltpPed_ = ecaltpPed; + ecaltpgBadX_ = ecaltpgBadX; + ecaltpLin_ = ecaltpLin; + ecaltpgAmplWeightMap_ = ecaltpgAmplWeightMap; + ecaltpgTimeWeightMap_ = ecaltpgTimeWeightMap; + ecaltpgWeightGroup_ = ecaltpgWeightGroup; + } + +private: + //old void init(const edm::EventSetup & setup); + void init(); + template + void initStructures(std::vector > > > &towMap); + template + void clean(std::vector > > > &towerMap); + + void fillMap(EBDigiCollectionPh2 const *col, + std::vector > > > &towerMap); + + int findStripNr(const EBDetId &id); + + int getIndex(const EBDigiCollectionPh2 *, EcalTrigTowerDetId &id) { return id.hashedIndex(); } + // mind that eta is continuous between barrel+endcap + // int getIndex(const EEDigiCollectionPh2 *, EcalTrigTowerDetId& id) { + // int ind=(id.ietaAbs()-18)*72 + id.iphi(); + // if (id.zside()<0) ind+=792; + // return ind; + // } + + const EcalTrigTowerConstituentsMap *eTTmap_ = nullptr; + const CaloGeometry *theGeometry_ = nullptr; + + int binOfMaximum_; + int maxNrSamples_; + bool debug_; + + int nrTowers_; // nr of towers found by fillmap method + static const unsigned int maxNrTowers_; + static const unsigned int nrSamples_; + + // data structures kept during the whole run + std::vector > striptp_; + std::vector > > > towerMapEB_; + std::vector > hitTowers_; + std::vector towtp_; + std::vector towtp2_; + + enum { nbMaxStrips_ = 5 }; + enum { nbMaxXtals_ = 5 }; + + const EcalElectronicsMapping *theMapping_; + + EcalEBPhase2Linearizer *linearizer_; + + EcalEBPhase2AmplitudeReconstructor *amplitude_reconstructor_; + EcalEBPhase2TimeReconstructor *time_reconstructor_; + EcalEBPhase2SpikeTagger *spike_tagger_; + EcalEBPhase2TPFormatter *tpFormatter_; + + // + + const EcalLiteDTUPedestalsMap *ecaltpPed_; + const EcalTPGCrystalStatus *ecaltpgBadX_; + + const EcalTPGWeightGroup *ecaltpgWeightGroup_; + const EcalEBPhase2TPGLinearizationConstMap *ecaltpLin_; + const EcalEBPhase2TPGAmplWeightIdMap *ecaltpgAmplWeightMap_; + const EcalEBPhase2TPGTimeWeightIdMap *ecaltpgTimeWeightMap_; + + EcalEBPhase2Linearizer *getLinearizer() const { return linearizer_; } + std::vector lin_out_; + // + EcalEBPhase2AmplitudeReconstructor *getAmplitudeFinder() const { return amplitude_reconstructor_; } + std::vector filt_out_; + std::vector time_out_; + std::vector amp_out_; + std::vector outEt_; + std::vector outTime_; + + EcalEBPhase2TimeReconstructor *getTimeFinder() const { return time_reconstructor_; } + EcalEBPhase2SpikeTagger *getSpikeTagger() const { return spike_tagger_; } + EcalEBPhase2TPFormatter *getTPFormatter() const { return tpFormatter_; } + + // +}; + +template +void EcalEBPhase2TrigPrimAlgo::clean(std::vector > > > &towMap) { + // clean internal data structures + for (unsigned int i = 0; i < maxNrTowers_; ++i) + for (int j = 0; j < nbMaxStrips_; ++j) + (towMap[i])[j].first = 0; + return; +} + +inline void EcalEBPhase2TrigPrimAlgo::fillMap( + EBDigiCollectionPh2 const *col, std::vector > > > &towerMap) + +{ + // implementation for Barrel + if (col) { + nrTowers_ = 0; + for (unsigned int i = 0; i < col->size(); ++i) { + EBDigiCollectionPh2::Digi samples((*col)[i]); + EcalTrigTowerDetId coarser = (*eTTmap_).towerOf(samples.id()); + int index = getIndex(col, coarser); + EBDetId id = samples.id(); + int stripnr = findStripNr(id); + + int filled = 0; + for (unsigned int ij = 0; ij < towerMap[index].size(); ++ij) + filled += towerMap[index][ij].first; + if (!filled) { + hitTowers_[nrTowers_++] = std::pair(index, coarser); + } + + //FIXME: temporary protection + int ncryst = towerMap[index][stripnr - 1].first; + if (ncryst >= nbMaxXtals_) { + continue; + } + ((towerMap[index])[stripnr - 1].second)[ncryst] = samples; + (towerMap[index])[stripnr - 1].first++; + } + + if (debug_) + LogDebug("") << "fillMap" + << "[EcalEBPhase2TrigPrimAlgo] (found " << col->size() << " frames in " << towerMap.size() + << " towers) " << std::endl; + } else { + if (debug_) + LogDebug("EcalEBPhase2TrigPrimAlgo") << "FillMap - FillMap Collection size=0 !!!!" << std::endl; + ; + } +} + +template +void EcalEBPhase2TrigPrimAlgo::initStructures(std::vector > > > &towMap) { + //initialise internal data structures + + std::vector vec0(nbMaxXtals_); + std::vector > > vec1(nbMaxStrips_); + for (int i = 0; i < nbMaxStrips_; ++i) + vec1[i] = std::pair >(0, vec0); + towMap.resize(maxNrTowers_); + for (unsigned int i = 0; i < maxNrTowers_; ++i) + towMap[i] = vec1; + + std::vector vecint(maxNrSamples_); + striptp_.resize(nbMaxStrips_); + for (int i = 0; i < nbMaxStrips_; ++i) + striptp_[i] = vecint; +} + +#endif diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2AmplitudeReconstructor.cc b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2AmplitudeReconstructor.cc new file mode 100644 index 0000000000000..2ac137f06f712 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2AmplitudeReconstructor.cc @@ -0,0 +1,140 @@ +#include +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "DataFormats/EcalDigi/interface/EcalConstants.h" +#include "CondFormats/EcalObjects/interface/EcalTPGGroups.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +#include + +EcalEBPhase2AmplitudeReconstructor::EcalEBPhase2AmplitudeReconstructor(bool debug) + : debug_(debug), inputsAlreadyIn_(0), shift_(13) {} + +EcalEBPhase2AmplitudeReconstructor::~EcalEBPhase2AmplitudeReconstructor() {} + +int EcalEBPhase2AmplitudeReconstructor::setInput(int input) { + if (input > 0X3FFF) { + edm::LogError("EcalEBPhase2AmplitudeReconstructor") << "ERROR IN INPUT OF AMPLITUDE FILTER" << std::endl; + return -1; + } + + if (inputsAlreadyIn_ < maxSamplesUsed_) { + if (debug_) + LogDebug("") << " EcalEBPhase2AmplitudeReconstructor::setInput inputsAlreadyIn_<5 input " << input << std::endl; + + buffer_[inputsAlreadyIn_] = input; + inputsAlreadyIn_++; + } else { + for (int i = 0; i < (maxSamplesUsed_ - 1); i++) { + buffer_[i] = buffer_[i + 1]; + if (debug_) + LogDebug("") << " EcalEBPhase2AmplitudeReconstructor::setInput inputsAlreadyIn buffer " << buffer_[i] + << std::endl; + } + buffer_[maxSamplesUsed_ - 1] = input; + } + return 1; +} + +void EcalEBPhase2AmplitudeReconstructor::process(std::vector &linout, std::vector &output) { + inputsAlreadyIn_ = 0; + for (unsigned int i = 0; i < maxSamplesUsed_; i++) { + buffer_[i] = 0; + } + + for (unsigned int i = 0; i < linout.size(); i++) { + setInput(linout[i]); + if (debug_) { + for (unsigned int j = 0; j < maxSamplesUsed_; j++) { + LogDebug("") << " buffer_ " << buffer_[j]; + } + LogDebug("") << " " << std::endl; + } + + if (i == (maxSamplesUsed_ - 1)) { + process(); + output[0] = processedOutput_; + } else if (i == (ecalPh2::sampleSize - 1)) { + process(); + output[1] = processedOutput_; + } + } + return; +} + +void EcalEBPhase2AmplitudeReconstructor::process() { + processedOutput_ = 0; + if (inputsAlreadyIn_ < maxSamplesUsed_) + return; + int64_t tmpIntOutput = 0; + for (int i = 0; i < maxSamplesUsed_; i++) { + tmpIntOutput += (weights_[i] * buffer_[i]); + if (debug_) + LogDebug("") << " AmplitudeFilter buffer " << buffer_[i] << " weight " << weights_[i] << std::endl; + } + if (tmpIntOutput < 0) + tmpIntOutput = 0; + tmpIntOutput = tmpIntOutput >> shift_; + if (debug_) + LogDebug("") << " AmplitudeFilter tmpIntOutput " << tmpIntOutput << " shift_ " << shift_ << std::endl; + if (tmpIntOutput > 0X1FFF) + tmpIntOutput = 0X1FFF; + uint output = tmpIntOutput; // should be 13 bit uint at this point + processedOutput_ = output; + if (debug_) + LogDebug("") << " AmplitudeFilter processedOutput_ " << processedOutput_ << std::endl; +} + +void EcalEBPhase2AmplitudeReconstructor::setParameters(uint32_t raw, + const EcalEBPhase2TPGAmplWeightIdMap *ecaltpgWeightMap, + const EcalTPGWeightGroup *ecaltpgWeightGroup) { + uint32_t params_[maxSamplesUsed_]; + const EcalTPGGroups::EcalTPGGroupsMap &groupmap = ecaltpgWeightGroup->getMap(); + if (debug_) + LogDebug("") << " EcalEBPhase2AmplitudeReconstructor::setParameters groupmap size " << groupmap.size() + << " channel ID " << raw << std::endl; + EcalTPGGroups::EcalTPGGroupsMapItr it = groupmap.find(raw); + if (it != groupmap.end()) { + uint32_t weightid = (*it).second; + + const EcalEBPhase2TPGAmplWeightIdMap::EcalEBPhase2TPGAmplWeightMap &weightmap = ecaltpgWeightMap->getMap(); + EcalEBPhase2TPGAmplWeightIdMap::EcalEBPhase2TPGAmplWeightMapItr itw = weightmap.find(weightid); + + (*itw).second.getValues(params_[0], + params_[1], + params_[2], + params_[3], + params_[4], + params_[5], + params_[6], + params_[7], + params_[8], + params_[9], + params_[10], + params_[11]); + + if (debug_) + LogDebug("") << " EcalEBPhase2AmplitudeReconstructor::setParameters weights after the map " << params_[0] << " " + << params_[1] << " " << params_[2] << " " << params_[3] << " " << params_[4] << " " << params_[5] + << " " << params_[6] << " " << params_[7] << " " << params_[8] << " " << params_[9] << " " + << params_[10] << " " << params_[11] << std::endl; + + // we have to transform negative coded in 13 bits into negative coded in 32 bits + // maybe this should go into the getValue method?? + + for (int i = 0; i < maxSamplesUsed_; ++i) { + weights_[i] = (params_[i] & 0x1000) ? (int)(params_[i] | 0xfffff000) : (int)(params_[i]); + } + + if (debug_) { + for (int i = 0; i < maxSamplesUsed_; ++i) { + LogDebug("") << " EcalEBPhase2AmplitudeReconstructor::setParameters weights after the cooking " << weights_[i] + << std::endl; + } + LogDebug("") << std::endl; + } + + } else + edm::LogWarning("EcalTPG") + << " EcalEBPhase2AmplitudeReconstructor::setParameters could not find EcalTPGGroupsMap entry for " << raw; +} diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2Linearizer.cc b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2Linearizer.cc new file mode 100644 index 0000000000000..2802081a81ffa --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2Linearizer.cc @@ -0,0 +1,167 @@ +#include + +//#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +EcalEBPhase2Linearizer::EcalEBPhase2Linearizer(bool debug) + : debug_(debug), init_(false), peds_(nullptr), badXStatus_(nullptr) {} + +EcalEBPhase2Linearizer::~EcalEBPhase2Linearizer() { + if (init_) { + for (int i = 0; i < (int)vectorbadXStatus_.size(); i++) { + delete vectorbadXStatus_[i]; + } + } +} + +void EcalEBPhase2Linearizer::setParameters(EBDetId detId, + const EcalLiteDTUPedestalsMap *ecaltpPed, + const EcalEBPhase2TPGLinearizationConstMap *ecaltpLin, + const EcalTPGCrystalStatus *ecaltpBadX) + +{ + EcalLiteDTUPedestalsMap::const_iterator itped = ecaltpPed->getMap().find(detId); + if (itped != ecaltpPed->end()) + peds_ = &(*itped); + else + edm::LogError("EcalEBPhase2Linearizer") << " could not find EcalLiteDTUPedestal entry for " << detId << std::endl; + + const EcalEBPhase2TPGLinearizationConstMap &linMap = ecaltpLin->getMap(); + EcalEBPhase2TPGLinearizationConstMapIterator it = linMap.find(detId.rawId()); + if (it != linMap.end()) { + linConsts_ = &(*it); + } else + edm::LogError("EcalEBPhase2Linearizer") + << " could not find EcalEBPhase2TPGLinearizationConstMap entry for " << detId.rawId() << std::endl; + + const EcalTPGCrystalStatusMap &badXMap = ecaltpBadX->getMap(); + EcalTPGCrystalStatusMapIterator itbadX = badXMap.find(detId.rawId()); + if (itbadX != badXMap.end()) { + badXStatus_ = &(*itbadX); + } else { + edm::LogWarning("EcalTPG") << " could not find EcalTPGCrystalStatusMap entry for " << detId.rawId(); + badXStatus_ = new EcalTPGCrystalStatusCode(); + vectorbadXStatus_.push_back(&(*badXStatus_)); + init_ = true; + } +} + +int EcalEBPhase2Linearizer::doOutput() { + int tmpIntOut; + if (uncorrectedSample_) { + tmpIntOut = (uncorrectedSample_ - base_ + I2CSub_); //Substract base. Add I2C + } else { + tmpIntOut = 0; + } + if (tmpIntOut < 0) { + tmpIntOut = 0; + } + uint output = tmpIntOut; + output = (output * mult_) >> shift_; + // protect against saturation + // ........... + + return output; +} + +int EcalEBPhase2Linearizer::setInput(const EcalLiteDTUSample &RawSam) + +{ + uncorrectedSample_ = RawSam.adc(); //uncorrectedSample_ + gainID_ = RawSam.gainId(); + + base_ = peds_->mean(gainID_); + + if (gainID_ == 0) { + mult_ = linConsts_->mult_x10; + shift_ = linConsts_->shift_x10; + I2CSub_ = linConsts_->i2cSub_x10; + } else { + mult_ = linConsts_->mult_x1; + shift_ = linConsts_->shift_x1; + I2CSub_ = linConsts_->i2cSub_x1; + } + + return 1; +} + +void EcalEBPhase2Linearizer::process(const EBDigiCollectionPh2::Digi &df, std::vector &output_percry) { + //We know a tower numbering is: // S1 S2 S3 S4 S5 + + // 4 5 14 15 24 + // 3 6 13 16 23 + // 2 7 12 17 22 + // 1 8 11 18 21 + // 0 9 10 19 20 + + for (int i = 0; i < df.size(); i++) { + EcalLiteDTUSample thisSample = df[i]; + setInput(thisSample); + output_percry[i] = doOutput(); + } + + if (debug_) { + LogDebug("EcalEBPhase2Linearizer") << " mult " + << " "; + for (int i = 0; i < df.size(); i++) { + EcalLiteDTUSample thisSample = df[i]; + setInput(thisSample); + LogDebug("") << mult_ << " "; + } + LogDebug("") << " " << std::endl; + + LogDebug("") << " gainID " + << " "; + for (int i = 0; i < df.size(); i++) { + EcalLiteDTUSample thisSample = df[i]; + setInput(thisSample); + LogDebug("") << gainID_ << " "; + } + LogDebug("") << " " << std::endl; + + LogDebug("") << " Ped " + << " "; + for (int i = 0; i < df.size(); i++) { + EcalLiteDTUSample thisSample = df[i]; + setInput(thisSample); + LogDebug("") << base_ << " "; + } + LogDebug("") << " " << std::endl; + + LogDebug("") << " i2c " + << " "; + for (int i = 0; i < df.size(); i++) { + EcalLiteDTUSample thisSample = df[i]; + setInput(thisSample); + LogDebug("") << I2CSub_ << " "; + } + LogDebug("") << " " << std::endl; + + LogDebug("") << " shift " + << " "; + for (int i = 0; i < df.size(); i++) { + EcalLiteDTUSample thisSample = df[i]; + setInput(thisSample); + LogDebug("") << shift_ << " "; + } + LogDebug("") << " " << std::endl; + + LogDebug("") << " lin out " + << " "; + for (int i = 0; i < df.size(); i++) { + LogDebug("") << output_percry[i] << " "; + } + + LogDebug("") << " " << std::endl; + + LogDebug("") << " EcalEBPhase2Linearizer::process(const .. Final output " << std::endl; + LogDebug("") << " output_percry " + << " "; + for (int i = 0; i < df.size(); i++) { + LogDebug("") << output_percry[i] << " "; + } + LogDebug("") << " " << std::endl; + } + return; +} diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2SpikeTagger.cc b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2SpikeTagger.cc new file mode 100644 index 0000000000000..d430c093bfe52 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2SpikeTagger.cc @@ -0,0 +1,53 @@ +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" + +EcalEBPhase2SpikeTagger::EcalEBPhase2SpikeTagger(bool debug) : debug_(debug) {} + +EcalEBPhase2SpikeTagger::~EcalEBPhase2SpikeTagger() {} + +void EcalEBPhase2SpikeTagger::setParameters(EBDetId detId, + const EcalLiteDTUPedestalsMap* ecaltpPed, + const EcalEBPhase2TPGLinearizationConstMap* ecaltpLin, + const EcalTPGCrystalStatus* ecaltpBadX) + +{ + if (debug_) + LogDebug("") << " EcalEBPhase2SpikeTagger::setParameters " << std::endl; + + EcalLiteDTUPedestalsMap::const_iterator itped = ecaltpPed->getMap().find(detId); + if (itped != ecaltpPed->end()) { + peds_ = &(*itped); + } else { + edm::LogError("EcalEBPhase2SpikeTagger::setParameters") + << " could not find EcalLiteDTUPedestal entry for " << detId; + throw cms::Exception("EcalEBPhase2SpikeTagger::setParameters could not find pedestals"); + } + + const EcalEBPhase2TPGLinearizationConstMap& linMap = ecaltpLin->getMap(); + EcalEBPhase2TPGLinearizationConstMapIterator it = linMap.find(detId.rawId()); + if (it != linMap.end()) { + linConsts_ = &(*it); + } else { + edm::LogError("EcalEBPhase2SpikeTagger::setParameters") + << " could not find EcalEBPhase2TPGLinearizationConstMap entry for " << detId.rawId(); + throw cms::Exception("EcalEBPhase2SpikeTagger::setParameters could not find pedestals"); + } +} + +bool EcalEBPhase2SpikeTagger::process(const std::vector& linInput) { + bool isASpike; + isASpike = false; + + if (debug_) { + LogDebug("") << "EcalEBPhase2SpikeTagger::process linearized digis " << std::endl; + for (unsigned int i = 0; i < linInput.size(); i++) { + LogDebug("") << " " << std::dec << linInput[i]; + } + LogDebug("") << std::endl; + } + + // dummy for now. It needs the algorythm to be implememted/plugged in here + + return isASpike; +} diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TPFormatter.cc b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TPFormatter.cc new file mode 100644 index 0000000000000..610809ae58f34 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TPFormatter.cc @@ -0,0 +1,38 @@ +#include +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include + +EcalEBPhase2TPFormatter::EcalEBPhase2TPFormatter(bool debug) : debug_(debug) {} + +EcalEBPhase2TPFormatter::~EcalEBPhase2TPFormatter() {} + +void EcalEBPhase2TPFormatter::process(std::vector &, + std::vector &time, + std::vector &outEt, + std::vector &outTime) { + unsigned int size = amp.size(); + outEt.resize(size); + outTime.resize(size); + + for (unsigned int i = 0; i < size; ++i) { + outEt[i] = amp[i]; + outTime[i] = time[i]; + } + + for (unsigned int i = 0; i < size; ++i) { + // this is the energy compression to 12 bits to go in the DF. To be done as last thing before building the TP + //Bit shift by 1 to go from 13 bits to 12 + outEt[i] = outEt[i] >> 1; + if (outEt[i] > 0xFFF) + outEt[i] = 0xFFF; + } + + for (unsigned int i = 0; i < size; ++i) { + // this is the time compression to 5 bits to go in the DF. + outTime[i] = outTime[i] >> 6; + if (outTime[i] > 0xf) + outTime[i] = 0xf; + else if (outTime[i] < -0x10) + outTime[i] = -0x10; + } +} diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TimeReconstructor.cc b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TimeReconstructor.cc new file mode 100644 index 0000000000000..6349a2ec60950 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TimeReconstructor.cc @@ -0,0 +1,174 @@ +#include +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "DataFormats/EcalDigi/interface/EcalConstants.h" +#include "CondFormats/EcalObjects/interface/EcalTPGGroups.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include + +EcalEBPhase2TimeReconstructor::EcalEBPhase2TimeReconstructor(bool debug) + : debug_(debug), inputsAlreadyIn_(0), shift_(maxSamplesUsed_) {} + +EcalEBPhase2TimeReconstructor::~EcalEBPhase2TimeReconstructor() {} + +int EcalEBPhase2TimeReconstructor::setInput(int input) { + if (input > 0X7FFF) { + edm::LogError("EcalEBPhase2TimeReconstructor::setInput") << "ERROR IN INPUT OF TIME FILTER" << std::endl; + return -1; + } + if (inputsAlreadyIn_ < maxSamplesUsed_) { + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::setInput inputsAlreadyIn_<5 input " << input << std::endl; + + buffer_[inputsAlreadyIn_] = input; + inputsAlreadyIn_++; + } else { + for (int i = 0; i < (maxSamplesUsed_ - 1); i++) { + buffer_[i] = buffer_[i + 1]; + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::setInput inputsAlreadyIn buffer " << buffer_[i] << std::endl; + } + buffer_[maxSamplesUsed_ - 1] = input; + inputsAlreadyIn_++; + } + return 1; +} + +void EcalEBPhase2TimeReconstructor::process(std::vector &addout, + std::vector &RecoOutput, + std::vector &output) { + inputsAlreadyIn_ = 0; + for (unsigned int i = 0; i < maxSamplesUsed_; i++) { + buffer_[i] = 0; + } + + //Taking in the results of the amplitude reconstruction + //Bit shifting them for use as index of invAmpAr_ lookup table + // move input amplitude (13 bits) to 9 bits to use as array index + + ampIn_[0] = ampRecoOutput[0] >> 4; + ampIn_[1] = ampRecoOutput[1] >> 4; + + for (unsigned int i = 0; i < addout.size(); i++) { + setInput(addout[i]); + + if (debug_) { + LogDebug("") << " EcalEBPhase2TimeReconstructor::process(std::vector buffer_ " << std::endl; + + for (unsigned int j = 0; j < maxSamplesUsed_; j++) { + LogDebug("") << " buffer_ " << buffer_[j]; + } + LogDebug("") << " " << std::endl; + } + + if (i == (maxSamplesUsed_ - 1)) { + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::process(std::vector) i = 11 " << std::endl; + process(); + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::process(std::vector) after process() " + << processedOutput_ << std::endl; + output[0] = processedOutput_; + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::process(std::vector) after setting the output " + << output[0] << std::endl; + } else if (i == (ecalPh2::sampleSize - 1)) { + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::process(std::vector) i = 15 " << std::endl; + process(); + output[1] = processedOutput_; + } + } + + return; +} + +void EcalEBPhase2TimeReconstructor::process() { + //UB FIXME: 5 + processedOutput_ = 0; + if (inputsAlreadyIn_ < 12) + return; + int64_t output = 0; + for (int i = 0; i < 12; i++) { + output += (weights_[i] * buffer_[i]); + if (debug_) + LogDebug("") << " TimeFilter buffer " << buffer_[i] << " weight " << weights_[i] << " output " << output + << std::endl; + } + output = output >> shift_; + if (debug_) + LogDebug("") << " TimeFilter local output " << output << std::endl; + //Dividing output by the result of the amplitude reconstruction via an approximation using the invAmpAr lookup table + int ampInd = 0; + if (debug_) + LogDebug("") << " inputsAlreadyIn_ " << inputsAlreadyIn_ << std::endl; + if (inputsAlreadyIn_ > 12) { + ampInd = 1; + } + + if (debug_) + LogDebug("") << " Begininning Final TimeFilter Calculation" << std::endl; + + int64_t tmpOutput = output * invAmpAr_[ampIn_[ampInd]]; + if (debug_) + LogDebug("") << " output*tmpInvAmpAr " << tmpOutput << std::endl; + + output = tmpOutput >> 20; + if (debug_) + LogDebug("") << " output after bit shift " << output << std::endl; + + if (output < -1024) + output = -1023; + else if (output > 1024) + output = 1023; + if (debug_) + LogDebug("") << " output after if/else " << output << std::endl; + processedOutput_ = output; + + if (debug_) + LogDebug("") << " TimeFilter final output " << processedOutput_ << std::endl; +} + +void EcalEBPhase2TimeReconstructor::setParameters(uint32_t raw, + const EcalEBPhase2TPGTimeWeightIdMap *ecaltpgWeightMap, + const EcalTPGWeightGroup *ecaltpgWeightGroup) { + uint32_t params_[12]; + const EcalTPGGroups::EcalTPGGroupsMap &groupmap = ecaltpgWeightGroup->getMap(); + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::setParameters groupmap size " << groupmap.size() << std::endl; + EcalTPGGroups::EcalTPGGroupsMapItr it = groupmap.find(raw); + if (it != groupmap.end()) { + uint32_t weightid = (*it).second; + const EcalEBPhase2TPGTimeWeightIdMap::EcalEBPhase2TPGTimeWeightMap &weightmap = ecaltpgWeightMap->getMap(); + EcalEBPhase2TPGTimeWeightIdMap::EcalEBPhase2TPGTimeWeightMapItr itw = weightmap.find(weightid); + + (*itw).second.getValues(params_[0], + params_[1], + params_[2], + params_[3], + params_[4], + params_[5], + params_[6], + params_[7], + params_[8], + params_[9], + params_[10], + params_[11]); + + if (debug_) + LogDebug("") << " EcalEBPhase2TimeReconstructor::setParameters time weights after the map " << params_[0] << " " + << params_[1] << " " << params_[2] << " " << params_[3] << " " << params_[4] << " " << params_[5] + << " " << params_[6] << " " << params_[7] << " " << params_[8] << " " << params_[9] << " " + << params_[10] << " " << params_[11] << std::endl; + + // we have to transform negative coded in 16 bits into negative coded in 32 bits + // maybe this should go into the getValue method?? + + for (int i = 0; i < 12; ++i) { + weights_[i] = (params_[i] & 0x8000) ? (int)(params_[i] | 0xffff8000) : (int)(params_[i]); + } + + } else + edm::LogWarning("EcalTPG") + << " EcalEBPhase2TimeReconstructor::setParameters could not find EcalTPGGroupsMap entry for " << raw; +} diff --git a/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TrigPrimAlgo.cc b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TrigPrimAlgo.cc new file mode 100644 index 0000000000000..7aa5558cdd08f --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimAlgos/src/EcalEBPhase2TrigPrimAlgo.cc @@ -0,0 +1,294 @@ +#include +#include +#include +#include + +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "Geometry/EcalMapping/interface/EcalElectronicsMapping.h" +#include "Geometry/EcalMapping/interface/EcalMappingRcd.h" +#include "Geometry/EcalAlgo/interface/EcalBarrelGeometry.h" + +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TrigPrimAlgo.h" + +#include "DataFormats/EcalDetId/interface/EcalSubdetector.h" +#include "DataFormats/EcalDigi/interface/EBDataFrame_Ph2.h" +#include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h" +#include "DataFormats/EcalDetId/interface/EBDetId.h" +#include "DataFormats/EcalDetId/interface/EcalTriggerElectronicsId.h" + +#include "CondFormats/EcalObjects/interface/EcalTPGPedestals.h" +#include "CondFormats/DataRecord/interface/EcalTPGPedestalsRcd.h" + +#include "DataFormats/EcalDigi/interface/EcalConstants.h" + +#include +#include + +//---------------------------------------------------------------------- + +const unsigned int EcalEBPhase2TrigPrimAlgo::nrSamples_ = + ecalPh2::sampleSize; // set to 16 samples, might change (less than 16) in the future +const unsigned int EcalEBPhase2TrigPrimAlgo::maxNrTowers_ = 2448; // number of towers in EB + +EcalEBPhase2TrigPrimAlgo::EcalEBPhase2TrigPrimAlgo(const EcalTrigTowerConstituentsMap *eTTmap, + const CaloGeometry *theGeometry, + int binofmax, + bool debug) + : eTTmap_(eTTmap), + theGeometry_(theGeometry), + binOfMaximum_(binofmax), + debug_(debug) + +{ + maxNrSamples_ = ecalPh2::sampleSize; + this->init(); +} + +void EcalEBPhase2TrigPrimAlgo::init() { + theMapping_ = new EcalElectronicsMapping(); + // initialise data structures + initStructures(towerMapEB_); + hitTowers_.resize(maxNrTowers_); + + linearizer_ = new EcalEBPhase2Linearizer(debug_); + lin_out_.resize(maxNrSamples_); + + amplitude_reconstructor_ = new EcalEBPhase2AmplitudeReconstructor(debug_); + filt_out_.resize(maxNrSamples_); + + tpFormatter_ = new EcalEBPhase2TPFormatter(debug_); + outEt_.resize(maxNrSamples_); + outTime_.resize(maxNrSamples_); + + // + + time_reconstructor_ = new EcalEBPhase2TimeReconstructor(debug_); + time_out_.resize(maxNrSamples_); + spike_tagger_ = new EcalEBPhase2SpikeTagger(debug_); +} +//---------------------------------------------------------------------- + +EcalEBPhase2TrigPrimAlgo::~EcalEBPhase2TrigPrimAlgo() { + delete linearizer_; + delete amplitude_reconstructor_; + delete time_reconstructor_; + delete spike_tagger_; + delete tpFormatter_; + delete theMapping_; +} + +void EcalEBPhase2TrigPrimAlgo::run(EBDigiCollectionPh2 const *digi, EcalEBPhase2TrigPrimDigiCollection &result) { + if (debug_) + LogDebug("") << " EcalEBPhase2TrigPrimAlgo: digi size " << digi->size() << std::endl; + + EcalEBPhase2TriggerPrimitiveDigi tp; + int firstSample = binOfMaximum_ - 1 - nrSamples_ / 2; + int lastSample = binOfMaximum_ - 1 + nrSamples_ / 2; + + if (debug_) { + LogDebug("") << " binOfMaximum_ " << binOfMaximum_ << " nrSamples_" << nrSamples_ << std::endl; + LogDebug("") << " first sample " << firstSample << " last " << lastSample << std::endl; + } + + clean(towerMapEB_); + fillMap(digi, towerMapEB_); + + int iChannel = 0; + int nXinBCP = 0; + for (int itow = 0; itow < nrTowers_; ++itow) { + int index = hitTowers_[itow].first; + const EcalTrigTowerDetId &thisTower = hitTowers_[itow].second; + if (debug_) + LogDebug("") << " Data for TOWER num " << itow << " index " << index << " TowerId " << thisTower << " zside " + << thisTower.zside() << " ieta " << thisTower.ieta() << " iphi " << thisTower.iphi() << " size " + << towerMapEB_[itow].size() << std::endl; + + // loop over all strips assigned to this trigger tower + int nxstals = 0; + for (unsigned int iStrip = 0; iStrip < towerMapEB_[itow].size(); ++iStrip) { + if (debug_) + LogDebug("") << " Data for STRIP num " << iStrip << std::endl; + std::vector &dataFrames = + (towerMapEB_[index])[iStrip].second; //vector of dataframes for this strip, size; nr of crystals/strip + + nxstals = (towerMapEB_[index])[iStrip].first; + if (nxstals <= 0) + continue; + if (debug_) + LogDebug("") << " Number of xTals " << nxstals << std::endl; + + //const EcalTriggerElectronicsId elId = theMapping_->getTriggerElectronicsId(dataFrames[0].id()); + + // loop over the xstals in a strip + + for (int iXstal = 0; iXstal < nxstals; iXstal++) { + const EBDetId &myid = dataFrames[iXstal].id(); + + nXinBCP++; + if (debug_) { + LogDebug("") << " Data for TOWER num " << itow << " index " << index << " TowerId " << thisTower << " size " + << towerMapEB_[itow].size() << std::endl; + LogDebug("") << "nXinBCP " << nXinBCP << " myid rawId " << myid.rawId() << " xTal iEta " << myid.ieta() + << " iPhi " << myid.iphi() << std::endl; + } + + tp = EcalEBPhase2TriggerPrimitiveDigi(myid); + tp.setSize(nrSamples_); + + iChannel++; + if (debug_) { + LogDebug("") << " " << std::endl; + LogDebug("") << " ****** iChannel " << iChannel << std::endl; + for (int i = 0; i < dataFrames[iXstal].size(); i++) { + LogDebug("") << " " << dataFrames[iXstal][i].adc(); + } + LogDebug("") << " " << std::endl; + } + + if (debug_) { + LogDebug("") << std::endl; + EBDetId id = dataFrames[iXstal].id(); + LogDebug("") << "iXstal= " << iXstal << std::endl; + LogDebug("") << "iXstal= " << iXstal << " id " << id << " EcalDataFrame_Ph2 is: " << std::endl; + for (int i = 0; i < dataFrames[iXstal].size(); i++) { + LogDebug("") << " " << std::dec << dataFrames[iXstal][i].adc(); + } + LogDebug("") << std::endl; + } + + // Call the linearizer + this->getLinearizer()->setParameters(dataFrames[iXstal].id(), ecaltpPed_, ecaltpLin_, ecaltpgBadX_); + this->getLinearizer()->process(dataFrames[iXstal], lin_out_); + + for (unsigned int i = 0; i < lin_out_.size(); i++) { + if (lin_out_[i] > 0X3FFF) + lin_out_[i] = 0X3FFF; + } + + if (debug_) { + LogDebug("") << "EcalEBPhase2TrigPrimAlgo output of linearize for channel " << iXstal << std::endl; + for (unsigned int i = 0; i < lin_out_.size(); i++) { + LogDebug("") << " " << std::dec << lin_out_[i]; + } + LogDebug("") << std::endl; + } + + // call spike finder right after the linearizer + this->getSpikeTagger()->setParameters(dataFrames[iXstal].id(), ecaltpPed_, ecaltpLin_, ecaltpgBadX_); + bool isASpike = this->getSpikeTagger()->process(lin_out_); + + //if (!isASpike) { + + // Call the amplitude reconstructor + this->getAmplitudeFinder()->setParameters(myid.rawId(), ecaltpgAmplWeightMap_, ecaltpgWeightGroup_); + this->getAmplitudeFinder()->process(lin_out_, filt_out_); + + if (debug_) { + LogDebug("") << "EcalEBPhase2TrigPrimAlgo output of amp finder is a vector of size: " << std::dec + << time_out_.size() << std::endl; + for (unsigned int ix = 0; ix < filt_out_.size(); ix++) { + LogDebug("") << std::dec << filt_out_[ix] << " "; + } + LogDebug("") << std::endl; + } + + if (debug_) { + LogDebug("") << " Ampl " + << " "; + for (unsigned int ix = 0; ix < filt_out_.size(); ix++) { + LogDebug("") << std::dec << filt_out_[ix] << " "; + } + LogDebug("") << std::endl; + } + + // call time finder + this->getTimeFinder()->setParameters(myid.rawId(), ecaltpgTimeWeightMap_, ecaltpgWeightGroup_); + this->getTimeFinder()->process(lin_out_, filt_out_, time_out_); + + if (debug_) { + LogDebug("") << " Time " + << " "; + for (unsigned int ix = 0; ix < time_out_.size(); ix++) { + LogDebug("") << std::dec << time_out_[ix] << " "; + } + LogDebug("") << std::endl; + } + + if (debug_) { + LogDebug("") << "EcalEBPhase2TrigPrimAlgo output of timefinder is a vector of size: " << std::dec + << time_out_.size() << std::endl; + for (unsigned int ix = 0; ix < time_out_.size(); ix++) { + LogDebug("") << std::dec << time_out_[ix] << " "; + } + LogDebug("") << std::endl; + } + + this->getTPFormatter()->process(filt_out_, time_out_, outEt_, outTime_); + + if (debug_) { + LogDebug("") << " compressed Et " + << " "; + for (unsigned int iSample = 0; iSample < outEt_.size(); ++iSample) { + LogDebug("") << outEt_[iSample] << " "; + } + LogDebug("") << std::endl; + + LogDebug("") << " compressed time " + << " "; + for (unsigned int iSample = 0; iSample < outEt_.size(); ++iSample) { + LogDebug("") << outTime_[iSample] << " "; + } + LogDebug("") << std::endl; + } + + if (debug_) { + LogDebug("") << " EcalEBPhase2TrigPrimAlgo after getting the formatter " << std::endl; + for (unsigned int iSample = 0; iSample < outEt_.size(); ++iSample) { + LogDebug("") << " outEt " << outEt_[iSample] << " outTime " << outTime_[iSample] << " "; + } + LogDebug("") << std::endl; + } + + // } not a spike + + // create the final TP samples + int etInADC = 0; + ; + int64_t time = -999; + int nSam = 0; + for (int iSample = 0; iSample < 16; ++iSample) { + etInADC = outEt_[iSample]; + time = outTime_[iSample]; + if (debug_) { + LogDebug("") << "TrigPrimAlgo outEt " << outEt_[iSample] << " outTime " << outTime_[iSample] << std::endl; + LogDebug("") << "TrigPrimAlgo etInADCt " << outEt_[iSample] << " outTime " << time << std::endl; + } + + tp.setSample(nSam, EcalEBPhase2TriggerPrimitiveSample(etInADC, isASpike, time)); + nSam++; + } + + result.push_back(tp); + + } // Loop over the xStals + + } //loop over strips in one tower + + if (debug_) { + if (nXinBCP > 0) + LogDebug("") << " Accepted xTals " << nXinBCP << std::endl; + } + } +} + +//---------------------------------------------------------------------- + +int EcalEBPhase2TrigPrimAlgo::findStripNr(const EBDetId &id) { + int stripnr; + int n = ((id.ic() - 1) % 100) / 20; //20 corresponds to 4 * ecal_barrel_crystals_per_strip FIXME!! + if (id.ieta() < 0) + stripnr = n + 1; + else + stripnr = nbMaxStrips_ - n; + return stripnr; +} diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/plugins/EcalEBTrigPrimPhase2ESProducer.cc b/SimCalorimetry/EcalEBTrigPrimProducers/plugins/EcalEBTrigPrimPhase2ESProducer.cc new file mode 100644 index 0000000000000..6a3772fdf3ccf --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimProducers/plugins/EcalEBTrigPrimPhase2ESProducer.cc @@ -0,0 +1,722 @@ +// user include files +#include "DataFormats/EcalDigi/interface/EcalConstants.h" +#include "FWCore/Framework/interface/ESProducer.h" +#include "FWCore/Framework/interface/ModuleFactory.h" +#include "FWCore/Framework/interface/ESHandle.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/ParameterSet/interface/FileInPath.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +// +#include "CondFormats/DataRecord/interface/EcalTPGCrystalStatusRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGPhysicsConstRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGStripStatusRcd.h" +// commented lines are for a reminder that in future we might need to implement something alike +//#include "CondFormats/DataRecord/interface/EcalTPGSpikeRcd.h" +//#include "CondFormats/DataRecord/interface/EcalTPGTowerStatusRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGLinearizationConstRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGWeightGroupRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGAmplWeightIdMapRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGTimeWeightIdMapRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGPedestalsRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalTPGPhysicsConst.h" +//#include "CondFormats/EcalObjects/interface/EcalTPGSpike.h" +//#include "CondFormats/EcalObjects/interface/EcalTPGTowerStatus.h" +#include "CondFormats/EcalObjects/interface/EcalTPGStripStatus.h" +#include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" + +#include "zlib.h" +#include +#include +#include +#include + +// +// class declaration +// + +/** \class EcalEBTrigPrimPhase2ESProducer +\author L. Lutton, N. Marinelli - Univ. of Notre Dame + Description: forPhase II +*/ + +class EcalEBTrigPrimPhase2ESProducer : public edm::ESProducer { +public: + EcalEBTrigPrimPhase2ESProducer(const edm::ParameterSet &); + ~EcalEBTrigPrimPhase2ESProducer() override; + + std::unique_ptr produceLinearizationConst( + const EcalEBPhase2TPGLinearizationConstRcd &); + std::unique_ptr producePedestals(const EcalEBPhase2TPGPedestalsRcd &); + std::unique_ptr produceAmpWeight(const EcalEBPhase2TPGAmplWeightIdMapRcd &); + std::unique_ptr produceTimeWeight(const EcalEBPhase2TPGTimeWeightIdMapRcd &); + std::unique_ptr produceWeightGroup(const EcalTPGWeightGroupRcd &); + std::unique_ptr producePhysicsConst(const EcalTPGPhysicsConstRcd &); + std::unique_ptr produceBadX(const EcalTPGCrystalStatusRcd &); + + // These commented lines are a reminder that in the future we might need to implement something alike + //std::unique_ptr produceLutGroup(const EcalTPGLutGroupRcd &); + //std::uniq//std::unique_ptr produceBadStrip(const EcalTPGStripStatusRcd &); + //std::unique_ptr produceBadTT(const EcalTPGTowerStatusRcd &); + //std::unique_ptr produceSpike(const EcalTPGSpikeRcd &); + +private: + void parseTextFile(); + std::vector getRange(int subdet, int smNb, int towerNbInSm, int stripNbInTower = 0, int xtalNbInStrip = 0); + void parseWeightsFile(); + + // ----------member data --------------------------- + std::string dbFilename_; + // std::string configFilename_; + const edm::FileInPath configFilename_; + bool flagPrint_; + std::map> mapXtal_; + std::map> mapStrip_[2]; + std::map> mapTower_[2]; + std::map> mapWeight_; + std::map> mapTimeWeight_; + std::map> mapXtalToGroup_; + std::map> mapXtalToLin_; + std::map> mapPhys_; + static const int maxSamplesUsed_; + static const int nLinConst_; +}; + +// +// input stream from a gz file +// + +struct GzInputStream { + gzFile gzf; + char buffer[256]; + std::istringstream iss; + bool eof; + GzInputStream(const char *file) : eof(false) { + gzf = gzopen(file, "rb"); + edm::LogInfo("EcalEBTrigPrimPhase2ESProducer") << " New weight file " << file; + if (gzf == Z_NULL) { + eof = true; + edm::LogWarning("EcalEBTrigPrimPhase2ESProducer") << "Database file " << file << " not found!!!"; + } else + readLine(); + } + void readLine() { + char *res = gzgets(gzf, buffer, 256); + eof = (res == Z_NULL); + if (!eof) { + iss.clear(); + iss.str(buffer); + } + } + ~GzInputStream() { gzclose(gzf); } + explicit operator bool() const { return ((eof == true) ? false : !iss.fail()); } +}; + +template +GzInputStream &operator>>(GzInputStream &gis, T &var) { + while ((bool)gis && !(gis.iss >> var)) { + gis.readLine(); + } + return gis; +} + +// +// constructors and destructor +// + +const int EcalEBTrigPrimPhase2ESProducer::maxSamplesUsed_ = 12; +const int EcalEBTrigPrimPhase2ESProducer::nLinConst_ = 8; + +EcalEBTrigPrimPhase2ESProducer::EcalEBTrigPrimPhase2ESProducer(const edm::ParameterSet &iConfig) + : dbFilename_(iConfig.getUntrackedParameter("DatabaseFile", "")), + configFilename_(iConfig.getParameter("WeightTextFile")), + flagPrint_(iConfig.getParameter("WriteInFile")) { + parseWeightsFile(); + + // the following lines are needed to tell the framework what + // data is being produced + setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceLinearizationConst); + setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::producePedestals); + setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceAmpWeight); + setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceTimeWeight); + setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceWeightGroup); + setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceBadX); + // the following commented lines as a reminder for items which might need to be implemented for Phase2 + //setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::producePhysicsConst); + //setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceBadStrip); + //setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceBadTT); + //setWhatProduced(this, &EcalEBTrigPrimPhase2ESProducer::produceSpike); +} + +EcalEBTrigPrimPhase2ESProducer::~EcalEBTrigPrimPhase2ESProducer() {} + +// +// member functions +// + +// ------------ method called to produce the data ------------ + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::producePedestals( + const EcalEBPhase2TPGPedestalsRcd &iRecord) { + auto prod = std::make_unique(); + + std::map>::const_iterator it; + for (it = mapXtalToLin_.begin(); it != mapXtalToLin_.end(); it++) { + EBDetId myEBDetId = EBDetId(it->first); + EcalEBPhase2TPGPedestal ped; + + ped.mean_x10 = (it->second)[0]; + ped.mean_x1 = (it->second)[3]; + prod->insert(std::make_pair(myEBDetId, ped)); + } + + return prod; +} + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::produceLinearizationConst( + const EcalEBPhase2TPGLinearizationConstRcd &iRecord) { + auto prod = std::make_unique(); + + std::map>::const_iterator it; + for (it = mapXtalToLin_.begin(); it != mapXtalToLin_.end(); it++) { + EcalEBPhase2TPGLinearizationConstant param; + + param.mult_x10 = (it->second)[1]; + param.mult_x1 = (it->second)[5]; + param.shift_x10 = (it->second)[2]; + param.shift_x1 = (it->second)[6]; + param.i2cSub_x10 = (it->second)[3]; + param.i2cSub_x1 = (it->second)[7]; + prod->setValue(it->first, param); + } + + return prod; +} + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::produceAmpWeight( + const EcalEBPhase2TPGAmplWeightIdMapRcd &iRecord) { + auto prod = std::make_unique(); + + EcalEBPhase2TPGAmplWeights weights; + std::map>::const_iterator it; + for (it = mapWeight_.begin(); it != mapWeight_.end(); it++) { + weights.setValues((it->second)[0], + (it->second)[1], + (it->second)[2], + (it->second)[3], + (it->second)[4], + (it->second)[5], + (it->second)[6], + (it->second)[7], + (it->second)[8], + (it->second)[9], + (it->second)[10], + (it->second)[11]); + prod->setValue(it->first, weights); + } + + return prod; +} + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::produceTimeWeight( + const EcalEBPhase2TPGTimeWeightIdMapRcd &iRecord) { + auto prod = std::make_unique(); + + EcalEBPhase2TPGTimeWeights weights_time; + std::map>::const_iterator it; + for (it = mapTimeWeight_.begin(); it != mapTimeWeight_.end(); it++) { + weights_time.setValues((it->second)[0], + (it->second)[1], + (it->second)[2], + (it->second)[3], + (it->second)[4], + (it->second)[5], + (it->second)[6], + (it->second)[7], + (it->second)[8], + (it->second)[9], + (it->second)[10], + (it->second)[11]); + prod->setValue(it->first, weights_time); + } + + return prod; +} + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::produceWeightGroup( + const EcalTPGWeightGroupRcd &iRecord) { + auto prod = std::make_unique(); + + const int NGROUPS = 61200; + + for (int iGroup = 0; iGroup < NGROUPS; iGroup++) { + std::map>::const_iterator it; + for (it = mapXtalToGroup_.begin(); it != mapXtalToGroup_.end(); it++) { + prod->setValue(it->first, it->second[0]); + } + } + + return prod; +} + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::producePhysicsConst( + const EcalTPGPhysicsConstRcd &iRecord) { + auto prod = std::make_unique(); + // EcalEBTrigPrimPhase2ESProducer::producePhysicsConst Needs updating if we want to keep it + + parseTextFile(); + std::map>::const_iterator it; + for (it = mapPhys_.begin(); it != mapPhys_.end(); it++) { + EcalTPGPhysicsConst::Item item; + item.EtSat = (it->second)[0]; + item.ttf_threshold_Low = (it->second)[1]; + item.ttf_threshold_High = (it->second)[2]; + item.FG_lowThreshold = (it->second)[3]; + item.FG_highThreshold = (it->second)[4]; + item.FG_lowRatio = (it->second)[5]; + item.FG_highRatio = (it->second)[6]; + prod->setValue(it->first, item); + } + + return prod; +} + +std::unique_ptr EcalEBTrigPrimPhase2ESProducer::produceBadX( + const EcalTPGCrystalStatusRcd &iRecord) { + auto prod = std::make_unique(); + + parseTextFile(); + std::map>::const_iterator it; + for (it = mapXtal_.begin(); it != mapXtal_.end(); it++) { + EcalTPGCrystalStatusCode badXValue; + badXValue.setStatusCode(0); + prod->setValue(it->first, badXValue); + } + return prod; +} + +void EcalEBTrigPrimPhase2ESProducer::parseWeightsFile() { + uint32_t id; + std::string dataCard; + std::vector param; + + int data; + std::string filename = configFilename_.fullPath(); + ; + std::string finalFileName; + size_t slash = filename.find('/'); + if (slash != 0) { + edm::FileInPath fileInPath(filename); + finalFileName = fileInPath.fullPath(); + } else { + finalFileName = filename; + edm::LogWarning("EcalEBTPGESProducer") + << "Couldnt find database file via fileinpath trying with pathname directly!!"; + } + + GzInputStream gis(finalFileName.c_str()); + while (gis >> dataCard) { + if (dataCard == "WEIGHTAMP") { + gis >> std::dec >> id; + + if (flagPrint_) { + std::cout << dataCard << " " << std::dec << id << std::endl; + } + + param.clear(); + + std::string st6; + for (int i = 0; i < maxSamplesUsed_; i++) { + gis >> std::hex >> data; + param.push_back(data); + /// debug + + if (flagPrint_) { + std::ostringstream oss; + oss << std::hex << data; + std::string result4 = oss.str(); + + st6.append("0x"); + st6.append(result4); + st6.append(" "); + } + } + + // debug + if (flagPrint_) { + std::cout << st6 << std::endl; + std::cout << std::endl; + } + + // std::cout << " WEIGHTAMP id " << id << std::endl; + mapWeight_[id] = param; + } + + if (dataCard == "WEIGHTTIME") { + gis >> std::dec >> id; + + if (flagPrint_) { + std::cout << dataCard << " " << std::dec << id << std::endl; + } + + param.clear(); + + std::string st6; + for (int i = 0; i < maxSamplesUsed_; i++) { + gis >> std::hex >> data; + //std::cout << " Parse time weight filling data " << data; + param.push_back(data); + /// debug + + if (flagPrint_) { + std::ostringstream oss; + oss << std::hex << data; + std::string result4 = oss.str(); + + st6.append("0x"); + st6.append(result4); + st6.append(" "); + } + } + + // debug + if (flagPrint_) { + std::cout << st6 << std::endl; + std::cout << std::endl; + } + mapTimeWeight_[id] = param; + } + + if (dataCard == "CRYSTAL") { + gis >> std::dec >> id; + + if (flagPrint_) { + std::cout << dataCard << " " << std::dec << id << std::endl; + } + + param.clear(); + std::string st6; + gis >> std::dec >> data; + param.push_back(data); + + if (flagPrint_) { + std::ostringstream oss; + oss << std::dec << data; + std::string result4 = oss.str(); + st6.append(result4); + st6.append(" "); + std::cout << st6 << std::endl; + std::cout << std::endl; + } + mapXtalToGroup_[id] = param; + } + + if (dataCard == "LINCONST") { + gis >> std::dec >> id; + + if (flagPrint_) { + std::cout << dataCard << " " << std::dec << id << std::endl; + } + + param.clear(); + std::string st6; + std::string st7; + + for (int i = 0; i < nLinConst_; i++) { + gis >> std::hex >> data; + param.push_back(data); + + if (flagPrint_) { + if (i < 4) { + std::ostringstream oss; + oss << std::hex << data; + std::string result6 = oss.str(); + st6.append("0x"); + st6.append(result6); + if (i != 3) + st6.append(" "); + } else if (i < 8) { + std::ostringstream oss; + oss << std::hex << data; + std::string result7 = oss.str(); + st7.append("0x"); + st7.append(result7); + if (i != 7) + st7.append(" "); + } + } + } + if (flagPrint_) { + std::cout << st6 << std::endl; + std::cout << st7 << std::endl; + } + mapXtalToLin_[id] = param; + } + } +} + +void EcalEBTrigPrimPhase2ESProducer::parseTextFile() { + if (!mapXtal_.empty()) + return; // just parse the file once! + + uint32_t id; + std::string dataCard; + std::string line; + std::ifstream infile; + std::vector param; + std::vector paramF; + int NBstripparams[2] = {4, 4}; + unsigned int data; + + std::string bufString; + std::string iString; + std::string fString; + std::string filename = "SimCalorimetry/EcalTrigPrimProducers/data/" + dbFilename_; + std::string finalFileName; + size_t slash = dbFilename_.find('/'); + if (slash != 0) { + edm::FileInPath fileInPath(filename); + finalFileName = fileInPath.fullPath(); + } else { + finalFileName = dbFilename_; + edm::LogWarning("EcalTPG") << "Couldnt find database file via fileinpath, " + "trying with pathname directly!!"; + } + + int k = 0; + + GzInputStream gis(finalFileName.c_str()); + while (gis >> dataCard) { + if (dataCard == "CRYSTAL") { + gis >> std::dec >> id; + + std::string st3; + std::string st4; + std::string st5; + + if (flagPrint_) { + // Print this comment only one time + if (k == 0) + std::cout << "COMMENT ====== barrel crystals ====== " << std::endl; + + if (k == 61200) + std::cout << "COMMENT ====== endcap crystals ====== " << std::endl; + + k = k + 1; + + std::cout << dataCard << " " << std::dec << id << std::endl; + } + + param.clear(); + for (int i = 0; i < 9; i++) { + gis >> std::hex >> data; + param.push_back(data); + + if (flagPrint_) { + if (i < 3) { + std::ostringstream oss; + oss << std::hex << data; + std::string result1 = oss.str(); + + st3.append("0x"); + st3.append(result1); + if (i != 2) + st3.append(" "); + + } else if (i > 2 && i < 6) { + std::ostringstream oss; + oss << std::hex << data; + std::string result2 = oss.str(); + + st4.append("0x"); + st4.append(result2); + if (i != 5) + st4.append(" "); + } else if (i > 5 && i < 9) { + std::ostringstream oss; + oss << std::hex << data; + std::string result3 = oss.str(); + + st5.append("0x"); + st5.append(result3); + if (i != 8) + st5.append(" "); + } + } + + } // end for + + if (flagPrint_) { + std::cout << " " << st3 << std::endl; + std::cout << " " << st4 << std::endl; + std::cout << " " << st5 << std::endl; + } + + mapXtal_[id] = param; + } + + if (dataCard == "STRIP_EB") { + gis >> std::dec >> id; + + std::string st1; + + if (flagPrint_) + std::cout << dataCard << " " << std::dec << id << std::endl; + + param.clear(); + for (int i = 0; i < NBstripparams[0]; i++) { + gis >> std::hex >> data; + param.push_back(data); + + if (flagPrint_) { + if (i == 0) { + std::cout << "0x" << std::hex << data << std::endl; + } else if (i == 1) { + std::cout << "" << std::hex << data << std::endl; + } else if (i > 1) { + std::ostringstream oss; + if (i == 2) { + oss << "0x" << std::hex << data; + std::string result4 = oss.str(); + st1.append(result4); + } else if (i == 3) { + std::ostringstream oss; + oss << " 0x" << std::hex << data; + std::string result5 = oss.str(); + + st1.append(result5); + std::cout << "" << st1 << std::endl; + } + } + } + } + + mapStrip_[0][id] = param; + } + + if (dataCard == "STRIP_EE") { + gis >> std::dec >> id; + + std::string st6; + + if (flagPrint_) { + std::cout << dataCard << " " << std::dec << id << std::endl; + } + + param.clear(); + for (int i = 0; i < NBstripparams[1]; i++) { + gis >> std::hex >> data; + param.push_back(data); + + if (flagPrint_) { + if (i == 0) { + std::cout << "0x" << std::hex << data << std::endl; + } else if (i == 1) { + std::cout << " " << std::hex << data << std::endl; + } else if (i > 1) { + std::ostringstream oss; + if (i == 2) { + oss << "0x" << std::hex << data; + std::string result4 = oss.str(); + st6.append(result4); + } else if (i == 3) { + std::ostringstream oss; + oss << " 0x" << std::hex << data; + std::string result5 = oss.str(); + + st6.append(result5); + std::cout << "" << st6 << std::endl; + } + } + } + } + + mapStrip_[1][id] = param; + } + + if (dataCard == "TOWER_EE") { + gis >> std::dec >> id; + + if (flagPrint_) + std::cout << dataCard << " " << std::dec << id << std::endl; + + param.clear(); + for (int i = 0; i < 2; i++) { + gis >> std::hex >> data; + param.push_back(data); + + if (flagPrint_) { + if (i == 1) { + std::cout << "0x" << std::dec << data << std::endl; + } else { + std::cout << " " << std::dec << data << std::endl; + } + } + } + + mapTower_[1][id] = param; + } + + if (dataCard == "TOWER_EB") { + gis >> std::dec >> id; + + if (flagPrint_) + std::cout << dataCard << " " << std::dec << id << std::endl; + + param.clear(); + for (int i = 0; i < 3; i++) { + gis >> std::dec >> data; + + if (flagPrint_) { + std::cout << " " << std::dec << data << std::endl; + } + + param.push_back(data); + } + + mapTower_[0][id] = param; + } + } +} + +/// This method is not used at all, however is a reminder that something alike will probably be needed once the mapping EB to BCPs will be in place +std::vector EcalEBTrigPrimPhase2ESProducer::getRange( + int subdet, int tccNb, int towerNbInTcc, int stripNbInTower, int xtalNbInStrip) { + std::vector range; + if (subdet == 0) { + // Barrel + range.push_back(37); // stccNbMin + range.push_back(73); // tccNbMax + range.push_back(1); // towerNbMin + range.push_back(69); // towerNbMax + range.push_back(1); // stripNbMin + range.push_back(6); // stripNbMax + range.push_back(1); // xtalNbMin + range.push_back(6); // xtalNbMax + } + + if (tccNb > 0) { + range[0] = tccNb; + range[1] = tccNb + 1; + } + if (towerNbInTcc > 0) { + range[2] = towerNbInTcc; + range[3] = towerNbInTcc + 1; + } + if (stripNbInTower > 0) { + range[4] = stripNbInTower; + range[5] = stripNbInTower + 1; + } + if (xtalNbInStrip > 0) { + range[6] = xtalNbInStrip; + range[7] = xtalNbInStrip + 1; + } + + return range; +} + +DEFINE_FWK_EVENTSETUP_MODULE(EcalEBTrigPrimPhase2ESProducer); diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/plugins/EcalEBTrigPrimPhase2Producer.cc b/SimCalorimetry/EcalEBTrigPrimProducers/plugins/EcalEBTrigPrimPhase2Producer.cc new file mode 100644 index 0000000000000..3db2b7efd790a --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimProducers/plugins/EcalEBTrigPrimPhase2Producer.cc @@ -0,0 +1,244 @@ +#include "FWCore/Framework/interface/Frameworkfwd.h" +#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/EventSetup.h" +#include "FWCore/Framework/interface/MakerMacros.h" +#include "FWCore/Utilities/interface/EDGetToken.h" +#include "FWCore/Utilities/interface/ESGetToken.h" +#include "FWCore/Utilities/interface/InputTag.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +// +#include "DataFormats/Common/interface/Handle.h" +#include "DataFormats/Provenance/interface/ProductID.h" +#include "DataFormats/Provenance/interface/ParameterSetID.h" +#include "DataFormats/Provenance/interface/Provenance.h" +#include "DataFormats/EcalDigi/interface/EcalDigiCollections.h" +#include "CondFormats/EcalObjects/interface/EcalLiteDTUPedestals.h" +#include "CondFormats/DataRecord/interface/EcalLiteDTUPedestalsRcd.h" + +#include "CondFormats/DataRecord/interface/EcalTPGCrystalStatusRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTPGCrystalStatus.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGPedestalsRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGLinearizationConstRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGAmplWeightIdMapRcd.h" +#include "CondFormats/DataRecord/interface/EcalEBPhase2TPGTimeWeightIdMapRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGWeightGroupRcd.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGAmplWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGTimeWeightIdMap.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGLinearizationConst.h" +#include "CondFormats/EcalObjects/interface/EcalEBPhase2TPGPedestals.h" +#include "CondFormats/EcalObjects/interface/EcalTPGWeightGroup.h" +#include "CondFormats/DataRecord/interface/EcalTPGTowerStatusRcd.h" +#include "CondFormats/DataRecord/interface/EcalTPGSpikeRcd.h" +#include "CondFormats/EcalObjects/interface/EcalTPGSpike.h" +#include "CondFormats/EcalObjects/interface/EcalTPGTowerStatus.h" + +#include "Geometry/CaloGeometry/interface/CaloGeometry.h" +#include "Geometry/CaloTopology/interface/EcalTrigTowerConstituentsMap.h" +#include "Geometry/Records/interface/CaloGeometryRecord.h" + +// We keep these lines for future posssible necessary additions +//#include "CondFormats/EcalObjects/interface/EcalTPGTowerStatus.h" +//#include "CondFormats/DataRecord/interface/EcalTPGStripStatusRcd.h" +//#include "CondFormats/EcalObjects/interface/EcalTPGStripStatus.h" +#include "SimCalorimetry/EcalEBTrigPrimAlgos/interface/EcalEBPhase2TrigPrimAlgo.h" +#include + +// Class declaration +/** \class EcalEBTrigPrimPhase2Producer \author L. Lutton, N. Marinelli - Univ. of Notre Dame Description: forPhase II It consumes the new Phase2 digis based on the new EB electronics and plugs in the main steering algo for TP emulation It produces the EcalEBPhase2TrigPrimDigiCollection */ + +class EcalEBPhase2TrigPrimAlgo; + +class EcalEBTrigPrimPhase2Producer : public edm::stream::EDProducer<> { +public: + explicit EcalEBTrigPrimPhase2Producer(const edm::ParameterSet& conf); + + ~EcalEBTrigPrimPhase2Producer() override; + + void beginRun(const edm::Run& run, const edm::EventSetup& es) override; + void endRun(const edm::Run&, const edm::EventSetup&) override; + void produce(edm::Event& e, const edm::EventSetup& c) override; + static void fillDescriptions(edm::ConfigurationDescriptions&); + +private: + std::unique_ptr algo_; + bool debug_; + bool famos_; + int nEvent_; + edm::EDGetTokenT tokenEBdigi_; + edm::ESGetToken + theEcalEBPhase2TPGLinearization_Token_; + edm::ESGetToken theEcalEBPhase2TPGPedestals_Token_; + + edm::ESGetToken theEcalTPGPedestals_Token_; + + edm::ESGetToken theEcalTPGCrystalStatus_Token_; + edm::ESGetToken theEcalEBTPGAmplWeightIdMap_Token_; + edm::ESGetToken theEcalEBTPGTimeWeightIdMap_Token_; + + edm::ESGetToken theEcalTPGWeightGroup_Token_; + + edm::ESGetToken theEcalTPGTowerStatus_Token_; + edm::ESGetToken theEcalTPGSpike_Token_; + + edm::ESGetToken eTTmapToken_; + edm::ESGetToken theGeometryToken_; + + int binOfMaximum_; + bool fillBinOfMaximumFromHistory_; + + unsigned long long getRecords(edm::EventSetup const& setup); + unsigned long long cacheID_; +}; + +EcalEBTrigPrimPhase2Producer::EcalEBTrigPrimPhase2Producer(const edm::ParameterSet& iConfig) + : debug_(iConfig.getParameter("Debug")), + famos_(iConfig.getParameter("Famos")), + binOfMaximum_(iConfig.getParameter("binOfMaximum")) { + tokenEBdigi_ = consumes(iConfig.getParameter("barrelEcalDigis")); + + eTTmapToken_ = esConsumes(); + theGeometryToken_ = esConsumes(); + + theEcalTPGPedestals_Token_ = + esConsumes(); + theEcalEBPhase2TPGPedestals_Token_ = + esConsumes(); + + theEcalTPGCrystalStatus_Token_ = + esConsumes(); + theEcalEBPhase2TPGLinearization_Token_ = + esConsumes(); + theEcalEBTPGAmplWeightIdMap_Token_ = + esConsumes(); + theEcalEBTPGTimeWeightIdMap_Token_ = + esConsumes(); + theEcalTPGWeightGroup_Token_ = esConsumes(); + + //register your products + produces(); +} + +void EcalEBTrigPrimPhase2Producer::beginRun(edm::Run const& run, edm::EventSetup const& setup) { + auto const& theGeometry = setup.getData(theGeometryToken_); + auto const& eTTmap = setup.getData(eTTmapToken_); + + algo_ = std::make_unique(&eTTmap, &theGeometry, binOfMaximum_, debug_); + + // get a first version of the records + cacheID_ = this->getRecords(setup); + + nEvent_ = 0; +} + +void EcalEBTrigPrimPhase2Producer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { + edm::ParameterSetDescription desc; + desc.add("Debug", false); + desc.add("Famos", false); + desc.add("BinOfMaximum", 6); // this needs to be at the same value used for the Phase2 LiteDTU digis ! + desc.add("barrelEcalDigis", edm::InputTag("simEcalUnsuppressedDigis")); +} + +unsigned long long EcalEBTrigPrimPhase2Producer::getRecords(edm::EventSetup const& setup) { + // get parameter records for xtals + auto theEcalEBPhase2TPGLinearization_handle = setup.getHandle(theEcalEBPhase2TPGLinearization_Token_); + const EcalEBPhase2TPGLinearizationConst* ecaltpLin = theEcalEBPhase2TPGLinearization_handle.product(); + // + edm::ESHandle theEcalTPGPedestals_handle = setup.getHandle(theEcalTPGPedestals_Token_); + const EcalLiteDTUPedestalsMap* ecaltpPed = theEcalTPGPedestals_handle.product(); + // + // auto theEcalEBPhase2TPGPedestals_handle = setup.getHandle(theEcalEBPhase2TPGPedestals_Token_); + //const EcalEBPhase2TPGPedestalsMap* ebTPPedestals = theEcalEBPhase2TPGPedestals_handle.product(); + // + edm::ESHandle theEcalTPGCrystalStatus_handle = setup.getHandle(theEcalTPGCrystalStatus_Token_); + const EcalTPGCrystalStatus* ecaltpgBadX = theEcalTPGCrystalStatus_handle.product(); + // + edm::ESHandle theEcalEBTPGAmplWeightIdMap_handle = + setup.getHandle(theEcalEBTPGAmplWeightIdMap_Token_); + const EcalEBPhase2TPGAmplWeightIdMap* ecaltpgAmplWeightMap = theEcalEBTPGAmplWeightIdMap_handle.product(); + // + edm::ESHandle theEcalEBTPGTimeWeightIdMap_handle = + setup.getHandle(theEcalEBTPGTimeWeightIdMap_Token_); + const EcalEBPhase2TPGTimeWeightIdMap* ecaltpgTimeWeightMap = theEcalEBTPGTimeWeightIdMap_handle.product(); + // + edm::ESHandle theEcalTPGWeightGroup_handle = setup.getHandle(theEcalTPGWeightGroup_Token_); + const EcalTPGWeightGroup* ecaltpgWeightGroup = theEcalTPGWeightGroup_handle.product(); + // These commented out lines are for reminder for possible needed implementations + //edm::ESHandle theEcalTPGTowerStatus_handle = setup.getHandle(theEcalTPGTowerStatus_Token_); + //const EcalTPGTowerStatus* ecaltpgBadTT = theEcalTPGTowerStatus_handle.product(); + // + //edm::ESHandle theEcalTPGSpike_handle = setup.getHandle(theEcalTPGSpike_Token_); + //const EcalTPGSpike* ecaltpgSpike = theEcalTPGSpike_handle.product(); + + //////////////// + algo_->setPointers(ecaltpPed, ecaltpLin, ecaltpgBadX, ecaltpgAmplWeightMap, ecaltpgTimeWeightMap, ecaltpgWeightGroup); + + return setup.get().cacheIdentifier(); + // return setup.get().cacheIdentifier(); +} + +void EcalEBTrigPrimPhase2Producer::endRun(edm::Run const& run, edm::EventSetup const& setup) { algo_.reset(); } + +EcalEBTrigPrimPhase2Producer::~EcalEBTrigPrimPhase2Producer() {} + +// ------------ method called to produce the data ------------ +void EcalEBTrigPrimPhase2Producer::produce(edm::Event& e, const edm::EventSetup& iSetup) { + nEvent_++; + + // get input collections + edm::Handle barrelDigiHandle; + + if (!e.getByToken(tokenEBdigi_, barrelDigiHandle)) { + edm::EDConsumerBase::Labels labels; + labelsForToken(tokenEBdigi_, labels); + edm::LogWarning("EcalTPG") << " Couldnt find Barrel digis " << labels.module << " and label " + << labels.productInstance << "!!!"; + } + const auto* ebdigi = barrelDigiHandle.product(); + + if (debug_) + LogDebug("EcalEBTrigPrimPhase2Producer") + << " EcalTPG" + << " =================> Treating event " << nEvent_ << ", Number of EB digis " + << barrelDigiHandle.product()->size() << std::endl; + + auto pOut = std::make_unique(); + + // invoke algorithm + algo_->run(ebdigi, *pOut); + + if (debug_) { + LogDebug("EcalEBTrigPrimPhase2Producer") + << "produce" + << " For Barrel " << pOut->size() << " TP Digis were produced" << std::endl; + } + + // debug prints if TP > 0. The number of TP with Et>0 is also used later for a LogInfo + int nonZeroTP = 0; + int nXstal = 0; + for (unsigned int i = 0; i < pOut->size(); ++i) { + nXstal++; + for (int isam = 0; isam < (*pOut)[i].size(); ++isam) { + if ((*pOut)[i][isam].encodedEt() > 0) { + nonZeroTP++; + if (debug_) { + LogDebug("EcalEBTrigPrimPhase2Producer") + << " For xStal n " << nXstal << " xTsal Id " << (((*pOut)[i])).id() << ", TP is " << (*pOut)[i] + << " (*pOut)[i][isam].raw() " << (*pOut)[i][isam].raw() << " (*pOut)[i][isam].encodedEt() " + << (*pOut)[i][isam].encodedEt() << " (*pOut)[i][isam].time() " << (*pOut)[i][isam].time() << std::endl; + } + } + } + } + + edm::LogInfo("EcalEBTrigPrimPhase2Producer") + << "EcalTPG" + << "\n =================> For Barrel , " << pOut->size() << " TP Digis were produced (including zero ones)" + << " Non zero primitives were " << nonZeroTP << std::endl; + + // put result into the Event + e.put(std::move(pOut)); +} + +DEFINE_FWK_MODULE(EcalEBTrigPrimPhase2Producer); diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/plugins/SealModules.cc b/SimCalorimetry/EcalEBTrigPrimProducers/plugins/SealModules.cc index e959e18ebaa06..f439ac86bd7cc 100644 --- a/SimCalorimetry/EcalEBTrigPrimProducers/plugins/SealModules.cc +++ b/SimCalorimetry/EcalEBTrigPrimProducers/plugins/SealModules.cc @@ -1,7 +1,4 @@ #include "FWCore/Framework/interface/MakerMacros.h" #include "EcalEBTrigPrimProducer.h" -#include "EcalEBTrigPrimAnalyzer.h" - DEFINE_FWK_MODULE(EcalEBTrigPrimProducer); -DEFINE_FWK_MODULE(EcalEBTrigPrimAnalyzer); diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/python/ecalEBTriggerPrimitivePhase2Digis_cfi.py b/SimCalorimetry/EcalEBTrigPrimProducers/python/ecalEBTriggerPrimitivePhase2Digis_cfi.py new file mode 100644 index 0000000000000..fd567eac36e9c --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimProducers/python/ecalEBTriggerPrimitivePhase2Digis_cfi.py @@ -0,0 +1,17 @@ +import FWCore.ParameterSet.Config as cms + +# +# attention: default is changed to work on unsuppressed digis!! ############## +# + +simEcalEBTriggerPrimitivePhase2Digis = cms.EDProducer("EcalEBTrigPrimPhase2Producer", + barrelEcalDigis = cms.InputTag("simEcalUnsuppressedDigis"), + binOfMaximum = cms.int32(6), + Famos = cms.bool(False), + TcpOutput = cms.bool(False), + Debug = cms.bool(False) +) + + +from Configuration.Eras.Modifier_phase2_ecalTP_devel_cff import phase2_ecalTP_devel +phase2_ecalTP_devel.toModify( simEcalEBTriggerPrimitivePhase2Digis) diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/python/ecalEBTriggerPrimitivePhase2ESProducer_cfi.py b/SimCalorimetry/EcalEBTrigPrimProducers/python/ecalEBTriggerPrimitivePhase2ESProducer_cfi.py new file mode 100644 index 0000000000000..ab45cd4f266eb --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimProducers/python/ecalEBTriggerPrimitivePhase2ESProducer_cfi.py @@ -0,0 +1,73 @@ +import os +import FWCore.ParameterSet.Config as cms + +# esmodule creating records + corresponding empty essource +EcalEBTrigPrimPhase2ESProducer = cms.ESProducer("EcalEBTrigPrimPhase2ESProducer", + DatabaseFile = cms.untracked.string('TPG_beamv5_MC_startup.txt.gz'), + WeightTextFile = cms.FileInPath('SimCalorimetry/EcalEBTrigPrimProducers/data/AmpTimeOnPeakXtalWeightsCMSSWPulse_8samples_peakOnSix_WithAndyFixes.txt.gz'), + WriteInFile = cms.bool(False) +) + +tpparams = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalEBPhase2TPGLinearizationConstRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +tpparams2 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalEBPhase2TPGPedestalsRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + + +tpparams4 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalEBPhase2TPGAmplWeightIdMapRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +tpparams17 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalEBPhase2TPGTimeWeightIdMapRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + + +tpparams5 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalTPGWeightGroupRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + + +tpparams12 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalTPGPhysicsConstRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +tpparams13 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalTPGCrystalStatusRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +tpparams14 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalTPGTowerStatusRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +tpparams15 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalTPGSpikeRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + +tpparams16 = cms.ESSource("EmptyESSource", + recordName = cms.string('EcalTPGStripStatusRcd'), + iovIsRunNotTime = cms.bool(True), + firstValid = cms.vuint32(1) +) + diff --git a/SimCalorimetry/EcalEBTrigPrimProducers/test/testPhase2_13_1_0_pre3.py b/SimCalorimetry/EcalEBTrigPrimProducers/test/testPhase2_13_1_0_pre3.py new file mode 100644 index 0000000000000..5d15178047eb2 --- /dev/null +++ b/SimCalorimetry/EcalEBTrigPrimProducers/test/testPhase2_13_1_0_pre3.py @@ -0,0 +1,164 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: TTbar_14TeV_TuneCP5_cfi --conditions auto:phase2_realistic_T15 -n 1 --era Phase2C10 --eventcontent FEVTDEBUG --relval +#9000,100 -s GEN,SIM,DIGI --datatier GEN-SIM-DIGI --beamspot HLLHC14TeV --geometry Extended2026D60 --fileout file:step1_UpToDigi.root + + +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Era_Phase2C17I13M9_cff import Phase2C17I13M9 +from Configuration.Eras.Modifier_phase2_ecal_devel_cff import phase2_ecal_devel +from Configuration.Eras.Modifier_phase2_ecalTP_devel_cff import phase2_ecalTP_devel + +process = cms.Process('DIGI',Phase2C17I13M9,phase2_ecal_devel,phase2_ecalTP_devel) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('SimGeneral.MixingModule.mixNoPU_cfi') +process.load('Configuration.Geometry.GeometryExtended2026D88Reco_cff') +process.load('Configuration.Geometry.GeometryExtended2026D88_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedHLLHC14TeV_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.Digi_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + + +process.MessageLogger = cms.Service("MessageLogger", + destinations = cms.untracked.vstring('messages'), + messages = cms.untracked.PSet(threshold = cms.untracked.string('DEBUG')), + debugModules = cms.untracked.vstring('*') + + +) + + + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + + ), + numberOfConcurrentIOVs = cms.untracked.uint32(1) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(1), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + + + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('TTbar_14TeV_TuneCP5_cfi nevts:1'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.FEVTDEBUGoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM-DIGI'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:/tmp/nancy/testGamma_Nancy.root'), + outputCommands = process.FEVTDEBUGEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:phase2_realistic_T21', '') + +process.GlobalTag.toGet = cms.VPSet( + cms.PSet(record = cms.string("EcalSimPulseShapeRcd"), + tag = cms.string("EcalSimPulseShapePhaseII"), + connect = cms.string("frontier://FrontierProd/CMS_CONDITIONS") + ) +) + + + +process.generator = cms.EDFilter("Pythia8PtGun", + PGunParameters = cms.PSet( + AddAntiParticle = cms.bool(True), + MaxEta = cms.double(1.4), + MaxPhi = cms.double(3.14159265359), + MaxPt = cms.double(1000.01), + MinEta = cms.double(-1.4), + MinPhi = cms.double(-3.14159265359), + MinPt = cms.double(0.5), + ParticleID = cms.vint32(11) + ), + PythiaParameters = cms.PSet( + parameterSets = cms.vstring() + ), + Verbosity = cms.untracked.int32(0), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single electron flat Pt 0.5 to 100 GeV ') +) + +process.ProductionFilterSequence = cms.Sequence(process.generator) + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.digitisation_step = cms.Path(process.pdigi) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.FEVTDEBUGoutput_step = cms.EndPath(process.FEVTDEBUGoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step,process.genfiltersummary_step,process.simulation_step,process.digitisation_step,process.endjob_step,process.FEVTDEBUGoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path).insert(0, process.ProductionFilterSequence) + + + +# Customisation from command line + +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion + diff --git a/SimDataFormats/GeneratorProducts/interface/GenFilterInfo.h b/SimDataFormats/GeneratorProducts/interface/GenFilterInfo.h index a197572924b4d..660a4b51824d4 100644 --- a/SimDataFormats/GeneratorProducts/interface/GenFilterInfo.h +++ b/SimDataFormats/GeneratorProducts/interface/GenFilterInfo.h @@ -14,7 +14,6 @@ class GenFilterInfo { GenFilterInfo(); GenFilterInfo(unsigned int, unsigned int); // obsolete, should be avoided for new classes GenFilterInfo(unsigned int, unsigned int, unsigned int, unsigned int, double, double, double, double); - GenFilterInfo(const GenFilterInfo&); virtual ~GenFilterInfo(); // getters diff --git a/SimDataFormats/GeneratorProducts/interface/GenLumiInfoProduct.h b/SimDataFormats/GeneratorProducts/interface/GenLumiInfoProduct.h index f48a377fc0588..f5ea7343a1e9c 100644 --- a/SimDataFormats/GeneratorProducts/interface/GenLumiInfoProduct.h +++ b/SimDataFormats/GeneratorProducts/interface/GenLumiInfoProduct.h @@ -17,7 +17,6 @@ class GenLumiInfoProduct { // constructors, destructors GenLumiInfoProduct(); GenLumiInfoProduct(const int id); - GenLumiInfoProduct(const GenLumiInfoProduct &other); virtual ~GenLumiInfoProduct(); // getters @@ -35,7 +34,6 @@ class GenLumiInfoProduct { public: XSec() : value_(-1.), error_(-1.) {} XSec(double v, double e = -1.) : value_(v), error_(e) {} - XSec(const XSec &other) : value_(other.value_), error_(other.error_) {} double value() const { return value_; } double error() const { return error_; } @@ -57,7 +55,6 @@ class GenLumiInfoProduct { public: FinalStat() : n_(0), sum_(0.0), sum2_(0.0) {} FinalStat(unsigned int n1, double sum1, double sum21) : n_(n1), sum_(sum1), sum2_(sum21) {} - FinalStat(const FinalStat &other) : n_(other.n_), sum_(other.sum_), sum2_(other.sum2_) {} unsigned int n() const { return n_; } double sum() const { return sum_; } diff --git a/SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h b/SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h index a96e96fa425ab..9bb7eeb2e4632 100644 --- a/SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h +++ b/SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h @@ -12,7 +12,6 @@ class GenRunInfoProduct { // constructors, destructors GenRunInfoProduct(); - GenRunInfoProduct(const GenRunInfoProduct &other); // getters @@ -33,7 +32,6 @@ class GenRunInfoProduct { public: XSec() : value_(-1.), error_(-1.) {} XSec(double value, double error = -1.) : value_(value), error_(error) {} - XSec(const XSec &other) : value_(other.value_), error_(other.error_) {} double value() const { return value_; } double error() const { return error_; } diff --git a/SimDataFormats/GeneratorProducts/src/GenFilterInfo.cc b/SimDataFormats/GeneratorProducts/src/GenFilterInfo.cc index ba61cc5e0d8de..1b2f3e30a6419 100644 --- a/SimDataFormats/GeneratorProducts/src/GenFilterInfo.cc +++ b/SimDataFormats/GeneratorProducts/src/GenFilterInfo.cc @@ -46,16 +46,6 @@ GenFilterInfo::GenFilterInfo(unsigned int passp, sumTotalWeights_(totalw), sumTotalWeights2_(totalw2) {} -GenFilterInfo::GenFilterInfo(const GenFilterInfo& other) - : numPassPositiveEvents_(other.numPassPositiveEvents_), - numPassNegativeEvents_(other.numPassNegativeEvents_), - numTotalPositiveEvents_(other.numTotalPositiveEvents_), - numTotalNegativeEvents_(other.numTotalNegativeEvents_), - sumPassWeights_(other.sumPassWeights_), - sumPassWeights2_(other.sumPassWeights2_), - sumTotalWeights_(other.sumTotalWeights_), - sumTotalWeights2_(other.sumTotalWeights2_) {} - GenFilterInfo::~GenFilterInfo() {} bool GenFilterInfo::mergeProduct(GenFilterInfo const& other) { diff --git a/SimDataFormats/GeneratorProducts/src/GenLumiInfoProduct.cc b/SimDataFormats/GeneratorProducts/src/GenLumiInfoProduct.cc index 543a7b33d27ad..69b9700aecf92 100644 --- a/SimDataFormats/GeneratorProducts/src/GenLumiInfoProduct.cc +++ b/SimDataFormats/GeneratorProducts/src/GenLumiInfoProduct.cc @@ -71,9 +71,6 @@ GenLumiInfoProduct::GenLumiInfoProduct() : hepidwtup_(-1) { internalProcesses_.c GenLumiInfoProduct::GenLumiInfoProduct(const int id) : hepidwtup_(id) { internalProcesses_.clear(); } -GenLumiInfoProduct::GenLumiInfoProduct(GenLumiInfoProduct const& other) - : hepidwtup_(other.hepidwtup_), internalProcesses_(other.internalProcesses_) {} - GenLumiInfoProduct::~GenLumiInfoProduct() {} bool GenLumiInfoProduct::mergeProduct(GenLumiInfoProduct const& other) { diff --git a/SimDataFormats/GeneratorProducts/src/GenRunInfoProduct.cc b/SimDataFormats/GeneratorProducts/src/GenRunInfoProduct.cc index f675e7f3406bb..bfc45ca649cf2 100644 --- a/SimDataFormats/GeneratorProducts/src/GenRunInfoProduct.cc +++ b/SimDataFormats/GeneratorProducts/src/GenRunInfoProduct.cc @@ -10,12 +10,6 @@ using namespace std; GenRunInfoProduct::GenRunInfoProduct() : externalFilterEfficiency_(-1.) {} -GenRunInfoProduct::GenRunInfoProduct(GenRunInfoProduct const &other) - : internalXSec_(other.internalXSec_), - externalXSecLO_(other.externalXSecLO_), - externalXSecNLO_(other.externalXSecNLO_), - externalFilterEfficiency_(other.externalFilterEfficiency_) {} - bool GenRunInfoProduct::isProductEqual(GenRunInfoProduct const &other) const { bool result = externalXSecLO_ == other.externalXSecLO_ && externalXSecNLO_ == other.externalXSecNLO_ && externalFilterEfficiency_ == other.externalFilterEfficiency_; diff --git a/SimFastTiming/FastTimingCommon/test/BuildFile.xml b/SimFastTiming/FastTimingCommon/test/BuildFile.xml index 93c8000877b1b..fa121a85b0c0a 100644 --- a/SimFastTiming/FastTimingCommon/test/BuildFile.xml +++ b/SimFastTiming/FastTimingCommon/test/BuildFile.xml @@ -1,6 +1,10 @@ + + + + diff --git a/SimFastTiming/FastTimingCommon/test/testBTLShape.cpp b/SimFastTiming/FastTimingCommon/test/testBTLShape.cpp new file mode 100644 index 0000000000000..21dea544b97f0 --- /dev/null +++ b/SimFastTiming/FastTimingCommon/test/testBTLShape.cpp @@ -0,0 +1,73 @@ +#include "SimFastTiming/FastTimingCommon/interface/BTLPulseShape.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include +#include +#include + +#include "TROOT.h" +#include "TStyle.h" +#include "TH1F.h" +#include "TCanvas.h" +#include "TF1.h" + +int main() { + edm::MessageDrop::instance()->debugEnabled = false; + + const unsigned int histsiz(BTLPulseShape::k1NSecBinsTotal); + + // shape constants and input amplitude + + const double ReferencePulseNpe_ = 100.; + const double TimeThreshold1_ = 20.; + const double TimeThreshold2_ = 50.; + const double Npe_to_V_ = 0.0064; + + const BTLPulseShape theShape; + + const size_t nampli(5); + const std::array npe{{8000., 4000., 3500., 1000., 100.}}; + std::vector histVect; + + // standard display of the implemented shape function + const int csize = 500; + TCanvas* showShape = new TCanvas("showShape", "showShape", csize, 2 * csize); + + for (size_t index = 0; index < nampli; index++) { + const double scale = npe[index] / ReferencePulseNpe_; + const std::array tATt( + theShape.timeAtThr(scale, TimeThreshold1_ * Npe_to_V_, TimeThreshold2_ * Npe_to_V_)); + + TString name = "BTLShape_" + std::to_string(index); + histVect.emplace_back(new TH1F(name, "Tabulated BTL shape", histsiz, 0., (float)(histsiz))); + + std::cout << "Tabulated BTL shape, scale vs reference = " << std::fixed << std::setw(6) << std::setprecision(2) + << scale << " maximum at [" << std::fixed << std::setw(6) << std::setprecision(2) << theShape.indexOfMax() + << " ] = " << std::fixed << std::setw(6) << std::setprecision(2) << theShape.timeOfMax() << std::endl; + std::cout << "Time at thresholds:\n" + << std::fixed << std::setw(8) << std::setprecision(3) << TimeThreshold1_ * Npe_to_V_ << " --> " << tATt[0] + << "\n" + << std::fixed << std::setw(8) << std::setprecision(3) << TimeThreshold2_ * Npe_to_V_ << " --> " << tATt[1] + << "\n" + << std::fixed << std::setw(8) << std::setprecision(3) << TimeThreshold1_ * Npe_to_V_ << " --> " << tATt[2] + << "\n" + << std::endl; + + for (unsigned int i = 0; i <= histsiz; ++i) { + const double time((i + 0.5) / BTLPulseShape::kNBinsPerNSec); + const double myShape(theShape(time)); + histVect[index]->SetBinContent(i, myShape * scale); + histVect[index]->SetBinError(i, 0.001); + std::cout << " bin = " << std::fixed << std::setw(4) << i << " time (ns) = " << std::fixed << std::setw(6) + << std::setprecision(3) << time << " shape = " << std::setw(11) << std::setprecision(8) + << myShape * scale << std::endl; + } + + showShape->cd(); + histVect[index]->SetStats(kFALSE); + histVect[index]->Draw("SAME"); + } + + showShape->SaveAs("BTLShape.pdf"); + + return 0; +} diff --git a/SimG4CMS/Calo/BuildFile.xml b/SimG4CMS/Calo/BuildFile.xml index 18e479eb134b2..c538379e0a464 100644 --- a/SimG4CMS/Calo/BuildFile.xml +++ b/SimG4CMS/Calo/BuildFile.xml @@ -23,7 +23,6 @@ - diff --git a/SimG4CMS/Calo/interface/HGCalNumberingScheme.h b/SimG4CMS/Calo/interface/HGCalNumberingScheme.h index e730f0c2ab5c3..10209a54c2cf0 100644 --- a/SimG4CMS/Calo/interface/HGCalNumberingScheme.h +++ b/SimG4CMS/Calo/interface/HGCalNumberingScheme.h @@ -31,7 +31,7 @@ class HGCalNumberingScheme { uint32_t getUnitID(int layer, int module, int cell, int iz, const G4ThreeVector& pos, double& wt); private: - void checkPosition(uint32_t index, const G4ThreeVector& pos, bool matchOnly, bool debug) const; + bool checkPosition(uint32_t index, const G4ThreeVector& pos, bool matchOnly, bool debug) const; const HGCalDDDConstants& hgcons_; const HGCalGeometryMode::GeometryMode mode_; diff --git a/SimG4CMS/Calo/plugins/HGCalMouseBiteTester.cc b/SimG4CMS/Calo/plugins/HGCalMouseBiteTester.cc index 0f0342283fae3..8f5ebbb880090 100644 --- a/SimG4CMS/Calo/plugins/HGCalMouseBiteTester.cc +++ b/SimG4CMS/Calo/plugins/HGCalMouseBiteTester.cc @@ -168,7 +168,12 @@ void HGCalMouseBiteTester::analyze(const edm::Event& iEvent, const edm::EventSet if (goodPoint) { //Only allowing (x, y) inside a partial wafer 11, placement index 2 partialType_ = HGCalWaferType::getPartial(index, hgcons_.getParameter()->waferInfoMap_); G4ThreeVector point(xi, yi, 0.0); - std::pair uv5 = wafer.cellUVFromXY1(xi, yi, placeIndex_, waferType_, partialType_, true, false); + std::pair uv5; + if (hgcons_.v17OrLess()) { + uv5 = wafer.cellUVFromXY1(xi, yi, placeIndex_, waferType_, partialType_, true, false); + } else { + uv5 = wafer.cellUVFromXY2(xi, yi, placeIndex_, waferType_, partialType_, true, false); + } if (guardRingPartial_.exclude(point, zside, frontBack, layer_, waferU_, waferV_)) { guard_ring_partial << xi << "," << yi << std::endl; } else if (mouseBite_.exclude(point, zside, layer_, waferU_, waferV_)) { diff --git a/SimG4CMS/Calo/src/CaloSD.cc b/SimG4CMS/Calo/src/CaloSD.cc index 1506ca39e1a99..56ad1e0eb1f99 100644 --- a/SimG4CMS/Calo/src/CaloSD.cc +++ b/SimG4CMS/Calo/src/CaloSD.cc @@ -487,7 +487,8 @@ bool CaloSD::hitExists(const G4Step* aStep, int k) { bool CaloSD::checkHit(int k) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("CaloSim") << "CaloSD: checkHit for " << k; + edm::LogVerbatim("CaloSim") << "CaloSD: checkHit for " << k << " for map " << useMap << ":" << &hitMap[k] << " Nhits " + << nCheckedHits[k] << " HC " << theHC[k] << " ID " << currentID[k]; #endif //look in the HitContainer whether a hit with the same ID already exists: bool found = false; diff --git a/SimG4CMS/Calo/src/CaloTrkProcessing.cc b/SimG4CMS/Calo/src/CaloTrkProcessing.cc index 6a0dcff9ed9be..04f4fa494e78a 100644 --- a/SimG4CMS/Calo/src/CaloTrkProcessing.cc +++ b/SimG4CMS/Calo/src/CaloTrkProcessing.cc @@ -1,3 +1,4 @@ +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "SimG4Core/Notification/interface/BeginOfEvent.h" #include "SimG4Core/Notification/interface/TrackInformation.h" #include "SimG4Core/Notification/interface/SimTrackManager.h" @@ -12,7 +13,6 @@ #include "G4Step.hh" #include "G4Track.hh" #include "G4SystemOfUnits.hh" -#include "DD4hep/Filter.h" #include //#define EDM_ML_DEBUG @@ -82,7 +82,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, G4LogicalVolume* lv = nullptr; G4String name(csps.caloNames_[i]); for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + G4String namx(DD4hep2DDDName::noNameSpace(static_cast((*lvcite)->GetName()))); if (namx == name) { lv = (*lvcite); break; @@ -107,7 +107,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, lv = nullptr; name = static_cast(csps.insideNames_[istart + k]); for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + G4String namx(DD4hep2DDDName::noNameSpace(static_cast((*lvcite)->GetName()))); if (namx == name) { lv = (*lvcite); break; @@ -129,7 +129,7 @@ CaloTrkProcessing::CaloTrkProcessing(const std::string& name, G4LogicalVolume* lv = nullptr; G4String name = static_cast(fineNames[useFines[i]]); for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { - G4String namx(static_cast(dd4hep::dd::noNamespace((*lvcite)->GetName()))); + G4String namx(DD4hep2DDDName::noNameSpace(static_cast((*lvcite)->GetName()))); if (namx == name) { lv = (*lvcite); break; diff --git a/SimG4CMS/Calo/src/ECalSD.cc b/SimG4CMS/Calo/src/ECalSD.cc index 78304d0498ffc..5b8ca4497770f 100644 --- a/SimG4CMS/Calo/src/ECalSD.cc +++ b/SimG4CMS/Calo/src/ECalSD.cc @@ -4,6 +4,7 @@ /////////////////////////////////////////////////////////////////////////////// #include "SimG4CMS/Calo/interface/ECalSD.h" #include "SimG4CMS/Calo/interface/EcalDumpGeometry.h" +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "SimG4Core/Notification/interface/TrackInformation.h" #include "Geometry/EcalCommonData/interface/EcalBarrelNumberingScheme.h" #include "Geometry/EcalCommonData/interface/EcalBaseNumber.h" @@ -18,8 +19,6 @@ #include "FWCore/ServiceRegistry/interface/Service.h" #include "CommonTools/UtilAlgos/interface/TFileService.h" -#include "DD4hep/Filter.h" - #include "G4LogicalVolumeStore.hh" #include "G4LogicalVolume.hh" #include "G4Step.hh" @@ -127,8 +126,9 @@ ECalSD::ECalSD(const std::string& name, int type0 = dumpGeom / 1000; type += (10 * type0); - if (nullptr != scheme) + if (nullptr != scheme) { setNumberingScheme(scheme); + } #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "Constructing a ECalSD with name " << GetName(); #endif @@ -218,7 +218,8 @@ double ECalSD::getEnergyDeposit(const G4Step* aStep) { edep *= wt2; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalSim") << lv->GetName() << " " << dd4hep::dd::noNamespace(lv->GetName()) + edm::LogVerbatim("EcalSim") << lv->GetName() << " " + << DD4hep2DDDName::noNameSpace(static_cast(lv->GetName())) << " Light Collection Efficiency " << weight << ":" << wt1 << " wt2= " << wt2 << " Weighted Energy Deposit " << edep / CLHEP::MeV << " MeV at " << preStepPoint->GetPosition(); @@ -292,7 +293,7 @@ uint16_t ECalSD::getRadiationLength(const G4StepPoint* hitPoint, const G4Logical double radl = hitPoint->GetMaterial()->GetRadlen(); thisX0 = (uint16_t)floor(scaleRL * crystalDepth / radl); #ifdef plotDebug - const std::string& lvname = dd4hep::dd::noNamespace(lv->GetName()); + const std::string lvname = DD4hep2DDDName::noNameSpace(static_cast(lv->GetName())); int k1 = (lvname.find("EFRY") != std::string::npos) ? 2 : 0; int k2 = (lvname.find("refl") != std::string::npos) ? 1 : 0; int kk = k1 + k2; @@ -302,7 +303,8 @@ uint16_t ECalSD::getRadiationLength(const G4StepPoint* hitPoint, const G4Logical #endif #ifdef EDM_ML_DEBUG G4ThreeVector localPoint = setToLocal(hitPoint->GetPosition(), hitPoint->GetTouchable()); - edm::LogVerbatim("EcalSim") << lv->GetName() << " " << dd4hep::dd::noNamespace(lv->GetName()) << " Global " + edm::LogVerbatim("EcalSim") << lv->GetName() << " " + << DD4hep2DDDName::noNameSpace(static_cast(lv->GetName())) << " Global " << hitPoint->GetPosition() << ":" << (hitPoint->GetPosition()).rho() << " Local " << localPoint << " Crystal Length " << crystalLength << " Radl " << radl << " crystalDepth " << crystalDepth << " Index " << thisX0 << " : " @@ -338,7 +340,7 @@ void ECalSD::initMap() { const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance(); std::map nameMap; for (auto lvi = lvs->begin(), lve = lvs->end(); lvi != lve; ++lvi) - nameMap.emplace(dd4hep::dd::noNamespace((*lvi)->GetName()), *lvi); + nameMap.emplace(DD4hep2DDDName::noNameSpace(static_cast((*lvi)->GetName())), *lvi); for (unsigned int it = 0; it < ecalSimParameters_->lvNames_.size(); ++it) { const std::string& matname = ecalSimParameters_->matNames_[it]; @@ -419,7 +421,7 @@ void ECalSD::initMap() { for (auto ite : xtalLMap) { std::string name("Unknown"); if (ite.first != nullptr) - name = dd4hep::dd::noNamespace((ite.first)->GetName()); + name = DD4hep2DDDName::noNameSpace(static_cast((ite.first)->GetName())); edm::LogVerbatim("EcalSim") << " " << i << " " << ite.first << " " << name << " L = " << ite.second; ++i; } @@ -440,13 +442,15 @@ double ECalSD::curve_LY(const G4LogicalVolume* lv) { } else { edm::LogWarning("EcalSim") << "ECalSD: light coll curve : wrong distance " << "to APD " << dapd << " crlength = " << crystalLength << ":" << crystalDepth - << " crystal name = " << lv->GetName() << " " << dd4hep::dd::noNamespace(lv->GetName()) + << " crystal name = " << lv->GetName() << " " + << DD4hep2DDDName::noNameSpace(static_cast(lv->GetName())) << " z of localPoint = " << currentLocalPoint.z() << " take weight = " << weight; } } #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "ECalSD: light coll curve : crlength = " << crystalLength << " Depth " << crystalDepth - << " crystal name = " << lv->GetName() << " " << dd4hep::dd::noNamespace(lv->GetName()) + << " crystal name = " << lv->GetName() << " " + << DD4hep2DDDName::noNameSpace(static_cast(lv->GetName())) << " z of localPoint = " << currentLocalPoint.z() << " take weight = " << weight; #endif return weight; @@ -461,8 +465,8 @@ void ECalSD::getBaseNumber(const G4Step* aStep) { //Get name and copy numbers if (theSize > 1) { for (int ii = 0; ii < theSize; ii++) { - std::string_view name = dd4hep::dd::noNamespace(touch->GetVolume(ii)->GetName()); - theBaseNumber.addLevel(std::string(name), touch->GetReplicaNumber(ii)); + std::string name = DD4hep2DDDName::noNameSpace(static_cast(touch->GetVolume(ii)->GetName())); + theBaseNumber.addLevel(name, touch->GetReplicaNumber(ii)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "ECalSD::getBaseNumber(): Adding level " << ii << ": " << name << "[" << touch->GetReplicaNumber(ii) << "]"; @@ -489,7 +493,8 @@ double ECalSD::getBirkL3(const G4Step* aStep) { weight = 1.; } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EcalSim") << "ECalSD::getBirkL3 in " << dd4hep::dd::noNamespace(mat->GetName()) << " Charge " + edm::LogVerbatim("EcalSim") << "ECalSD::getBirkL3 in " + << DD4hep2DDDName::noNameSpace(static_cast(mat->GetName())) << " Charge " << charge << " dE/dx " << dedx << " Birk Const " << rkb << " Weight = " << weight << " dE " << aStep->GetTotalEnergyDeposit(); #endif diff --git a/SimG4CMS/Calo/src/EcalDumpGeometry.cc b/SimG4CMS/Calo/src/EcalDumpGeometry.cc index c8c599d971c70..d4e8fee1cf6d0 100644 --- a/SimG4CMS/Calo/src/EcalDumpGeometry.cc +++ b/SimG4CMS/Calo/src/EcalDumpGeometry.cc @@ -3,10 +3,9 @@ #include "Geometry/EcalCommonData/interface/EcalBaseNumber.h" #include "Geometry/EcalCommonData/interface/EcalEndcapNumberingScheme.h" #include "Geometry/EcalCommonData/interface/EcalPreshowerNumberingScheme.h" +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "SimG4CMS/Calo/interface/EcalDumpGeometry.h" -#include "DD4hep/Filter.h" - #include EcalDumpGeometry::EcalDumpGeometry(const std::vector& names, @@ -20,7 +19,7 @@ EcalDumpGeometry::EcalDumpGeometry(const std::vector& names, G4cout << " Type: " << type << " Depth Names " << name1_ << ":" << name2_ << " with " << names.size() << " LVs: " << ss.str() << G4endl; for (const auto& name : names) { - std::string namex = (static_cast(dd4hep::dd::noNamespace(name))).substr(0, 4); + std::string namex = DD4hep2DDDName::noNameSpace(static_cast(name)).substr(0, 4); if (std::find(names_.begin(), names_.end(), namex) == names_.end()) names_.emplace_back(namex); } @@ -60,7 +59,7 @@ void EcalDumpGeometry::dumpTouch(G4VPhysicalVolume* pv, unsigned int leafDepth) G4LogicalVolume* lv = pv->GetLogicalVolume(); bool flag = ((type_ / 10) % 10 > 0); - std::string lvname = (static_cast(dd4hep::dd::noNamespace(lv->GetName()))); + std::string lvname = DD4hep2DDDName::noNameSpace(static_cast(lv->GetName())); std::string namex = lvname.substr(0, 4); EcalBaseNumber theBaseNumber; for (unsigned int k = 0; k < names_.size(); ++k) { @@ -73,8 +72,8 @@ void EcalDumpGeometry::dumpTouch(G4VPhysicalVolume* pv, unsigned int leafDepth) theBaseNumber.setSize(theSize + 1); std::stringstream ss; for (int ii = theSize; ii >= 0; --ii) { - std::string_view name = dd4hep::dd::noNamespace(fHistory_.GetVolume(ii)->GetName()); - theBaseNumber.addLevel(static_cast(name), fHistory_.GetVolume(ii)->GetCopyNo()); + std::string name = DD4hep2DDDName::noNameSpace(static_cast(fHistory_.GetVolume(ii)->GetName())); + theBaseNumber.addLevel(name, fHistory_.GetVolume(ii)->GetCopyNo()); ss << " " << ii << " " << name << ":" << fHistory_.GetVolume(ii)->GetCopyNo(); } uint32_t id = (((type_ % 10) == 0) ? ebNumbering_.getUnitID(theBaseNumber) diff --git a/SimG4CMS/Calo/src/HGCalNumberingScheme.cc b/SimG4CMS/Calo/src/HGCalNumberingScheme.cc index 787a82133e997..e976aa57de6b7 100644 --- a/SimG4CMS/Calo/src/HGCalNumberingScheme.cc +++ b/SimG4CMS/Calo/src/HGCalNumberingScheme.cc @@ -179,25 +179,30 @@ uint32_t HGCalNumberingScheme::getUnitID(int layer, int module, int cell, int iz #ifdef EDM_ML_DEBUG } else { edm::LogVerbatim("HGCSim") << "Radius/Phi " << id[0] << ":" << id[1] << " Type " << id[2] << " Layer|iz " << layer - << ":" << iz << " ERROR"; + << ":" << iz << " for i/p Layer " << layer << " module " << module << " cell " << cell + << " iz " << iz << " pos " << pos << " wt " << wt << " ERROR"; #endif } } #ifdef EDM_ML_DEBUG - bool matchOnly = ((mode_ == HGCalGeometryMode::Hexagon8Module) || (mode_ == HGCalGeometryMode::Hexagon8Cassette)); + bool matchOnly = hgcons_.waferHexagon8Module(); bool debug = hgcons_.waferHexagon8File(); if (debug) edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme::i/p " << det_ << ":" << layer << ":" << module << ":" << cell << ":" << iz << ":" << pos.x() << ":" << pos.y() << ":" << pos.z() << " ID " << std::hex << index << std::dec << " wt " << wt; - checkPosition(index, pos, matchOnly, debug); + bool ok = checkPosition(index, pos, matchOnly, debug); + if (matchOnly && (!ok)) + edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme::i/p " << det_ << ":" << layer << ":" << module << ":" << cell + << ":" << iz << ":" << pos.x() << ":" << pos.y() << ":" << pos.z() << " ID " << std::hex + << index << std::dec << " wt " << wt << " flag " << ok << " ERROR"; #endif return index; } -void HGCalNumberingScheme::checkPosition(uint32_t index, const G4ThreeVector& pos, bool matchOnly, bool debug) const { +bool HGCalNumberingScheme::checkPosition(uint32_t index, const G4ThreeVector& pos, bool matchOnly, bool debug) const { std::pair xy; - bool ok(false); + bool ok(false), iok(true); double z1(0), tolR(14.0), tolZ(1.0); int lay(-1); if (index == 0) { @@ -234,6 +239,8 @@ void HGCalNumberingScheme::checkPosition(uint32_t index, const G4ThreeVector& po : ""); if (matchOnly && match) ck = ""; + if (!ck.empty()) + iok = false; if (!(match && inok && outok) || debug) { edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme::Detector " << det_ << " Layer " << lay << " R " << r2 << ":" << r1 << ":" << rrange.first << ":" << rrange.second << " Z " << z2 << ":" << z1 << ":" @@ -250,11 +257,17 @@ void HGCalNumberingScheme::checkPosition(uint32_t index, const G4ThreeVector& po double dx = (xx - xy.first); double dy = (pos.y() - xy.second); double dR = std::sqrt(dx * dx + dy * dy); - ck = (dR > tolR) ? " ***** ERROR *****" : ""; + if (dR > tolR) { + ck = " ***** ERROR *****"; + iok = false; + } else { + ck = ""; + } edm::LogVerbatim("HGCSim") << "HGCalNumberingScheme " << HGCSiliconDetId(index) << " original position " << xx << ":" << pos.y() << " derived " << xy.first << ":" << xy.second << " Difference " << dR << ck; } } } + return iok; } diff --git a/SimG4CMS/Calo/src/HGCalSD.cc b/SimG4CMS/Calo/src/HGCalSD.cc index c426eb6b0eace..0743754f9fc8c 100644 --- a/SimG4CMS/Calo/src/HGCalSD.cc +++ b/SimG4CMS/Calo/src/HGCalSD.cc @@ -334,11 +334,10 @@ void HGCalSD::update(const BeginOfJob* job) { } else { throw cms::Exception("Unknown", "HGCalSD") << "Cannot find HGCalDDDConstants for " << nameX_ << "\n"; } - if ((nHC_ > 1) && calibCells_) { + if ((nHC_ > 1) && calibCells_) newCollection(collName_[1], ps_); - cellOffset_ = std::make_unique( - waferSize_, hgcons_->getUVMax(0), hgcons_->getUVMax(1), guardRingOffset_, mouseBiteCut_); - } + cellOffset_ = std::make_unique( + waferSize_, hgcons_->getUVMax(0), hgcons_->getUVMax(1), guardRingOffset_, mouseBiteCut_); } void HGCalSD::initRun() {} diff --git a/SimG4CMS/Calo/test/python/testHGCalMouseBite_cfg.py b/SimG4CMS/Calo/test/python/testHGCalMouseBite_cfg.py index 646f3c537874f..1f7cda275d83a 100644 --- a/SimG4CMS/Calo/test/python/testHGCalMouseBite_cfg.py +++ b/SimG4CMS/Calo/test/python/testHGCalMouseBite_cfg.py @@ -63,7 +63,7 @@ ) -process.load("Geometry.HGCalCommonData.hgcalMouseBiteTester_cfi") +process.load("SimG4CMS.Calo.hgcalMouseBiteTester_cfi") process.p1 = cms.Path(process.generator*process.hgcalMouseBiteTester) diff --git a/SimG4CMS/CherenkovAnalysis/BuildFile.xml b/SimG4CMS/CherenkovAnalysis/BuildFile.xml index a12305460cc41..80ab29da2e1e4 100644 --- a/SimG4CMS/CherenkovAnalysis/BuildFile.xml +++ b/SimG4CMS/CherenkovAnalysis/BuildFile.xml @@ -1,11 +1,11 @@ + - diff --git a/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h b/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h index 514d7c4a17e55..e143eb83bca89 100644 --- a/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h +++ b/SimG4CMS/CherenkovAnalysis/interface/DreamSD.h @@ -11,8 +11,6 @@ #include "G4PhysicsFreeVector.hh" -#include - #include const int MAXPHOTONS = 500; // Maximum number of photons we can store diff --git a/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc b/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc index db3fc73ca3197..59f665de5cb5f 100644 --- a/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc +++ b/SimG4CMS/CherenkovAnalysis/src/DreamSD.cc @@ -6,6 +6,7 @@ #include "DetectorDescription/Core/interface/DDValue.h" #include "DetectorDescription/DDCMS/interface/DDCompactView.h" #include "DetectorDescription/DDCMS/interface/DDFilteredView.h" +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "SimG4Core/Notification/interface/TrackInformation.h" #include "G4LogicalVolume.hh" @@ -122,7 +123,7 @@ void DreamSD::initMap(const std::string &sd) { const cms::DDFilter filter("ReadOutName", sd); cms::DDFilteredView fv((*cpvDD4hep_), filter); while (fv.firstChild()) { - std::string name = static_cast(dd4hep::dd::noNamespace(fv.name())); + std::string name = DD4hep2DDDName::noNameSpace(static_cast(fv.name())); std::vector paras(fv.parameters()); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalSim") << "DreamSD::initMap (for " << sd << "): Solid " << name << " Shape " @@ -179,7 +180,7 @@ void DreamSD::fillMap(const std::string &name, double length, double width) { for (auto lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++) { edm::LogVerbatim("EcalSim") << name << " vs " << (*lvcite)->GetName(); std::string namex = static_cast((*lvcite)->GetName()); - if (name == static_cast(dd4hep::dd::noNamespace(namex))) { + if (name == DD4hep2DDDName::noNameSpace(static_cast(namex))) { lv = (*lvcite); break; } @@ -421,7 +422,7 @@ double DreamSD::getAverageNumberOfPhotons_(const double charge, bool DreamSD::setPbWO2MaterialProperties_(G4Material *aMaterial) { std::string pbWO2Name("E_PbWO4"); std::string name = static_cast(aMaterial->GetName()); - if (static_cast(dd4hep::dd::noNamespace(name)) != pbWO2Name) { // Wrong material! + if (DD4hep2DDDName::noNameSpace(name) != pbWO2Name) { // Wrong material! edm::LogWarning("EcalSim") << "This is not the right material: " << "expecting " << pbWO2Name << ", got " << aMaterial->GetName(); return false; diff --git a/SimG4CMS/Forward/interface/ZdcSD.h b/SimG4CMS/Forward/interface/ZdcSD.h index 80f301f96c138..8ea4948a5d878 100644 --- a/SimG4CMS/Forward/interface/ZdcSD.h +++ b/SimG4CMS/Forward/interface/ZdcSD.h @@ -26,9 +26,9 @@ class ZdcSD : public CaloSD { void initRun() override; double calculateCherenkovDeposit(const G4Step *); - double calculateMeanNumberOfPhotons(int, double, double); - double photonEnergyDist(int, double, double); - double generatePhotonEnergy(int, double, double); + double calculateMeanNumberOfPhotons(double, double, double); + double photonEnergyDist(double, double, double); + double generatePhotonEnergy(double, double, double); double pmtEfficiency(double); double convertEnergyToWavelength(double); diff --git a/SimG4CMS/Forward/src/ZdcSD.cc b/SimG4CMS/Forward/src/ZdcSD.cc index 31db361f10e6c..95f16c5db92ce 100644 --- a/SimG4CMS/Forward/src/ZdcSD.cc +++ b/SimG4CMS/Forward/src/ZdcSD.cc @@ -96,6 +96,13 @@ bool ZdcSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { int primaryID = getTrackID(theTrack); currentID[0].setID(unitID, time, primaryID, depth); double energy = calculateCherenkovDeposit(aStep); + + // Russian Roulette + double wt2 = theTrack->GetWeight(); + if (wt2 > 0.0) { + energy *= wt2; + } + if (G4TrackToParticleID::isGammaElectronPositron(theTrack)) { edepositEM = energy; edepositHAD = 0; @@ -173,8 +180,6 @@ double ZdcSD::getEnergyDeposit(const G4Step* aStep) { // preStepPoint information G4StepPoint* preStepPoint = aStep->GetPreStepPoint(); - G4VPhysicalVolume* currentPV = preStepPoint->GetPhysicalVolume(); - std::string nameVolume = ForwardName::getName(currentPV->GetName()); const G4ThreeVector& hitPoint = preStepPoint->GetPosition(); const G4ThreeVector& hit_mom = preStepPoint->GetMomentumDirection(); @@ -210,6 +215,7 @@ double ZdcSD::getEnergyDeposit(const G4Step* aStep) { G4StepPoint* postStepPoint = aStep->GetPostStepPoint(); G4VPhysicalVolume* postPV = postStepPoint->GetPhysicalVolume(); std::string postnameVolume = ForwardName::getName(postPV->GetName()); + std::string nameVolume = preStepPoint->GetPhysicalVolume()->GetName(); edm::LogVerbatim("ForwardSim") << "ZdcSD:: getEnergyDeposit: \n" << " preStepPoint: " << nameVolume << "," << stepL << "," << stepE << "," << beta << "," << charge << "\n" @@ -328,28 +334,11 @@ double ZdcSD::getEnergyDeposit(const G4Step* aStep) { << "," << charge << "," << beta << "," << stepL << "," << d_qz << "," << variant << "," << meanNCherPhot << "," << poissNCherPhot << "," << NCherPhot; #endif - // --constants----------------- - // << "," << photEnSpectrDE - // << "," << nMedium - // << "," << bThreshold - // << "," << thFibDirRad - // << "," << thFullReflRad - // << "," << effPMTandTransport - // --other variables----------- - // << "," << curprocess - // << "," << nameProcess - // << "," << name - // << "," << rad - // << "," << mat } else { // determine failure mode: beta, charge, and/or nameVolume if (beta <= bThreshold) edm::LogVerbatim("ForwardSim") << "ZdcSD:: getEnergyDeposit: fail beta=" << beta; - if (charge == 0) - edm::LogVerbatim("ForwardSim") << "ZdcSD:: getEnergyDeposit: fail charge=0"; - if (!(nameVolume == "ZDC_EMFiber" || nameVolume == "ZDC_HadFiber")) - edm::LogVerbatim("ForwardSim") << "ZdcSD:: getEnergyDeposit: fail nv=" << nameVolume; } return NCherPhot; @@ -370,131 +359,120 @@ const double HBARC = 6.582119514E-16 /*eV*s*/ * 2.99792458E8 /*m/s*/; // hbar * // Calculate the Cherenkov deposit corresponding to a G4Step double ZdcSD::calculateCherenkovDeposit(const G4Step* aStep) { - G4Material* material = aStep->GetTrack()->GetMaterial(); - - if (material->GetName() != "quartz") - return 0.0; // 0 deposit if material is not quartz - else { - const G4StepPoint* pPreStepPoint = aStep->GetPreStepPoint(); - const G4StepPoint* pPostStepPoint = aStep->GetPostStepPoint(); - const G4String volumeName = pPreStepPoint->GetTouchable()->GetVolume(0)->GetLogicalVolume()->GetName(); - - G4ThreeVector pre = pPreStepPoint->GetPosition(); - G4ThreeVector post = pPostStepPoint->GetPosition(); - - if ((post - pre).mag() < 1E-9) - return 0.0; + const G4StepPoint* pPreStepPoint = aStep->GetPreStepPoint(); + G4double charge = pPreStepPoint->GetCharge() / CLHEP::eplus; + if (charge == 0.0 || aStep->GetStepLength() < 1e-9 * CLHEP::mm) + return 0.0; - //Convert step coordinates to local (fiber) coodinates - const G4ThreeVector localPre = setToLocal(pre, pPreStepPoint->GetTouchable()); - const G4ThreeVector localPost = setToLocal(post, pPreStepPoint->GetTouchable()); - // Calculate the unit direction vector in local coordinates + const G4StepPoint* pPostStepPoint = aStep->GetPostStepPoint(); - const G4ThreeVector particleDirection = (localPost - localPre) / (localPost - localPre).mag(); + G4ThreeVector pre = pPreStepPoint->GetPosition(); + G4ThreeVector post = pPostStepPoint->GetPosition(); - const G4DynamicParticle* aParticle = aStep->GetTrack()->GetDynamicParticle(); - int charge = round(aParticle->GetDefinition()->GetPDGCharge()); + //Convert step coordinates to local (fiber) coodinates + const G4ThreeVector localPre = setToLocal(pre, pPreStepPoint->GetTouchable()); + const G4ThreeVector localPost = setToLocal(post, pPreStepPoint->GetTouchable()); - if (charge == 0) - return 0.0; + // Calculate the unit direction vector in local coordinates + const G4ThreeVector particleDirection = (localPost - localPre) / (localPost - localPre).mag(); - double beta = 0.5 * (pPreStepPoint->GetBeta() + pPostStepPoint->GetBeta()); - double stepLength = aStep->GetStepLength() / 1000; // Geant4 stepLength is in "mm" + double beta = 0.5 * (pPreStepPoint->GetBeta() + pPostStepPoint->GetBeta()); + double stepLength = aStep->GetStepLength() / 1000; // Geant4 stepLength is in "mm" - int nPhotons; // Number of Cherenkov photons + int nPhotons; // Number of Cherenkov photons - nPhotons = G4Poisson(calculateMeanNumberOfPhotons(charge, beta, stepLength)); + nPhotons = G4Poisson(calculateMeanNumberOfPhotons(charge, beta, stepLength)); - double totalE = 0.0; + double totalE = 0.0; - for (int i = 0; i < nPhotons; i++) { - // uniform refractive index in PMT range -> uniform energy distribution - double photonE = EMIN + G4UniformRand() * (EMAX - EMIN); - // UPDATE: taking into account dispersion relation -> energy distribution + for (int i = 0; i < nPhotons; ++i) { + // uniform refractive index in PMT range -> uniform energy distribution + double photonE = EMIN + G4UniformRand() * (EMAX - EMIN); + // UPDATE: taking into account dispersion relation -> energy distribution - if (G4UniformRand() > pmtEfficiency(convertEnergyToWavelength(photonE))) - continue; + if (G4UniformRand() > pmtEfficiency(convertEnergyToWavelength(photonE))) + continue; - double omega = G4UniformRand() * twopi; - double thetaC = acos(1.0 / (beta * RINDEX)); + double omega = G4UniformRand() * twopi; + double cosTheta = std::min(1.0 / (beta * RINDEX), 1.0); + double sinTheta = std::sqrt((1. - cosTheta) * (1.0 + cosTheta)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("ZdcSD") << "E_gamma: " << photonE << "\t omega: " << omega << "\t thetaC: " << thetaC; + edm::LogVerbatim("ZdcSD") << "E_gamma: " << photonE << "\t omega: " << omega << "\t thetaC: " << cosTheta; #endif - // Calculate momentum direction w.r.t primary particle (z-direction) - double px = photonE * sin(thetaC) * cos(omega); - double py = photonE * sin(thetaC) * sin(omega); - double pz = photonE * cos(thetaC); - G4ThreeVector photonMomentum(px, py, pz); + // Calculate momentum direction w.r.t primary particle (z-direction) + double px = photonE * sinTheta * std::cos(omega); + double py = photonE * sinTheta * std::sin(omega); + double pz = photonE * cosTheta; + G4ThreeVector photonMomentum(px, py, pz); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("ZdcSD") << "pPR = (" << particleDirection.x() << "," << particleDirection.y() << "," - << particleDirection.z() << ")"; - edm::LogVerbatim("ZdcSD") << "pCH = (" << px << "," << py << "," << pz << ")"; + edm::LogVerbatim("ZdcSD") << "pPR = (" << particleDirection.x() << "," << particleDirection.y() << "," + << particleDirection.z() << ")"; + edm::LogVerbatim("ZdcSD") << "pCH = (" << px << "," << py << "," << pz << ")"; #endif - // Rotate to the fiber reference frame - photonMomentum.rotateUz(particleDirection); + // Rotate to the fiber reference frame + photonMomentum.rotateUz(particleDirection); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("ZdcSD") << "pLAB = (" << photonMomentum.x() << "," << photonMomentum.y() << "," - << photonMomentum.z() << ")"; + edm::LogVerbatim("ZdcSD") << "pLAB = (" << photonMomentum.x() << "," << photonMomentum.y() << "," + << photonMomentum.z() << ")"; #endif - // Get random position along G4Step - G4ThreeVector photonPosition = localPre + G4UniformRand() * (localPost - localPre); - - // 2D vectors to calculate impact position (x*,y*) - G4TwoVector r0(photonPosition); - G4TwoVector v0(photonMomentum); - - double R = 0.3; /*mm, fiber radius*/ - double R2 = 0.3 * 0.3; - - if (r0.mag() < R && photonMomentum.z() < 0.0) { - // 2nd order polynomial coefficients - double a = v0.mag2(); - double b = 2.0 * r0 * v0; - double c = r0.mag2() - R2; - - if (a < 1E-6) - totalE += 1; //photonE /*eV*/; - else { - // calculate intersection point - solving 2nd order polynomial - double t = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a); - G4ThreeVector n(r0.x() + v0.x() * t, r0.y() + v0.y() * t, 0.0); // surface normal - double cosTheta = (n * photonMomentum) / (n.mag() * photonE); // cosine of incident angle - - if (cosTheta >= NAperRINDEX) // lightguide condition - totalE += 1; //photonE /*eV*/; - } + // Get random position along G4Step + G4ThreeVector photonPosition = localPre + G4UniformRand() * (localPost - localPre); + + // 2D vectors to calculate impact position (x*,y*) + G4TwoVector r0(photonPosition); + G4TwoVector v0(photonMomentum); + + double R = 0.3; /*mm, fiber radius*/ + double R2 = 0.3 * 0.3; + + if (r0.mag() < R && photonMomentum.z() < 0.0) { + // 2nd order polynomial coefficients + double a = v0.mag2(); + double b = 2.0 * r0 * v0; + double c = r0.mag2() - R2; + + if (a < 1E-6) + totalE += 1; //photonE /*eV*/; + else { + // calculate intersection point - solving 2nd order polynomial + double t = (-b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a); + G4ThreeVector n(r0.x() + v0.x() * t, r0.y() + v0.y() * t, 0.0); // surface normal + double cosTheta = (n * photonMomentum) / (n.mag() * photonE); // cosine of incident angle + + if (cosTheta >= NAperRINDEX) // lightguide condition + totalE += 1; //photonE /*eV*/; } + } #ifdef EDM_ML_DEBUG - edm::LogVerbatim("ZdcSD") << "r = (" << photonPosition.x() << "," << photonPosition.y() << "," - << photonPosition.z() << ")" << std::endl; + edm::LogVerbatim("ZdcSD") << "r = (" << photonPosition.x() << "," << photonPosition.y() << "," << photonPosition.z() + << ")" << std::endl; #endif - } + } #ifdef EDM_ML_DEBUG - if (nPhotons > 30) { - edm::LogVerbatim("ZdcSD") << totalE; + if (nPhotons > 30) { + edm::LogVerbatim("ZdcSD") << totalE; - if (totalE > 0) - edm::LogVerbatim("ZdcSD") << pre.x() << " " << pre.y() << " " << pre.z() << " " << totalE << std::endl; - } -#endif - return totalE; + if (totalE > 0) + edm::LogVerbatim("ZdcSD") << pre.x() << " " << pre.y() << " " << pre.z() << " " << totalE; } +#endif + return totalE; } // Calculate mean number of Cherenkov photons in the sensitivity range (300-650 nm) // for a given step length for a particle with given charge and beta -double ZdcSD::calculateMeanNumberOfPhotons(int charge, double beta, double stepLength) { +double ZdcSD::calculateMeanNumberOfPhotons(double charge, double beta, double stepLength) { // Return mean number of Cherenkov photons return (ALPHA * charge * charge * stepLength) / HBARC * (EMAX - EMIN) * (1.0 - 1.0 / (beta * beta * RINDEX * RINDEX)); } // Evaluate photon pdf -double ZdcSD::photonEnergyDist(int charge, double beta, double E) { +double ZdcSD::photonEnergyDist(double charge, double beta, double E) { const std::vector ENERGY_TAB{1.75715, 1.81902, 1.88311, 1.94944, 2.0183, 2.08939, 2.16302, 2.23919, 2.31789, 2.39954, 2.48416, 2.57175, 2.66232, 2.75643, 2.85349, 2.95411, 3.05756, 3.16528, 3.2774, 3.39218, 3.5123, 3.6359, 3.76394, 3.89642, @@ -509,7 +487,7 @@ double ZdcSD::photonEnergyDist(int charge, double beta, double E) { } // Generate a photon with the given minimum energy accourding to the energy distribution -double ZdcSD::generatePhotonEnergy(int charge, double beta, double Emin) { +double ZdcSD::generatePhotonEnergy(double charge, double beta, double Emin) { double photonE; // Use rejection method diff --git a/SimG4CMS/HGCalTestBeam/plugins/BuildFile.xml b/SimG4CMS/HGCalTestBeam/plugins/BuildFile.xml index 22011317508cd..cc760d1b52380 100644 --- a/SimG4CMS/HGCalTestBeam/plugins/BuildFile.xml +++ b/SimG4CMS/HGCalTestBeam/plugins/BuildFile.xml @@ -12,11 +12,11 @@ + - diff --git a/SimG4CMS/HGCalTestBeam/plugins/HGCPassive.cc b/SimG4CMS/HGCalTestBeam/plugins/HGCPassive.cc index d9b19aeda0eda..496c52c29e1be 100644 --- a/SimG4CMS/HGCalTestBeam/plugins/HGCPassive.cc +++ b/SimG4CMS/HGCalTestBeam/plugins/HGCPassive.cc @@ -12,6 +12,7 @@ // to retreive hits #include "SimDataFormats/CaloHit/interface/PassiveHit.h" +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "SimG4Core/Notification/interface/BeginOfEvent.h" #include "SimG4Core/Notification/interface/BeginOfRun.h" #include "SimG4Core/Notification/interface/Observer.h" @@ -23,7 +24,6 @@ #include "G4TransportationManager.hh" #include "G4TouchableHistory.hh" #include "G4Track.hh" -#include "DD4hep/Filter.h" #include #include @@ -157,9 +157,9 @@ void HGCPassive::update(const G4Step *aStep) { if (((aStep->GetPostStepPoint() == nullptr) || (aStep->GetTrack()->GetNextVolume() == nullptr)) && (aStep->IsLastStepInVolume())) { #ifdef EDM_ML_DEBUG - edm::LogVerbatim("HGCSim") << static_cast(dd4hep::dd::noNamespace(plv->GetName())) << " F|L Step " - << aStep->IsFirstStepInVolume() << ":" << aStep->IsLastStepInVolume() << " Position" - << aStep->GetPreStepPoint()->GetPosition() << " Track " + edm::LogVerbatim("HGCSim") << DD4hep2DDDName::noNameSpace(static_cast(plv->GetName())) + << " F|L Step " << aStep->IsFirstStepInVolume() << ":" << aStep->IsLastStepInVolume() + << " Position" << aStep->GetPreStepPoint()->GetPosition() << " Track " << aStep->GetTrack()->GetDefinition()->GetParticleName() << " at" << aStep->GetTrack()->GetPosition() << " Volume " << aStep->GetTrack()->GetVolume() << ":" << aStep->GetTrack()->GetNextVolume() << " Status " @@ -194,7 +194,7 @@ void HGCPassive::update(const G4Step *aStep) { auto it = (init_) ? mapLV_.find(plv) : findLV(plv); #ifdef EDM_ML_DEBUG edm::LogVerbatim("HGCSim") << "Level: " << level << ":" << i << " " - << static_cast(dd4hep::dd::noNamespace(plv->GetName())) + << DD4hep2DDDName::noNameSpace(static_cast(plv->GetName())) << " flag in the List " << (it != mapLV_.end()); #endif if (it != mapLV_.end()) { @@ -239,7 +239,7 @@ G4VPhysicalVolume *HGCPassive::getTopPV() { HGCPassive::volumeIterator HGCPassive::findLV(G4LogicalVolume *plv) { auto itr = mapLV_.find(plv); if (itr == mapLV_.end()) { - std::string name = static_cast(dd4hep::dd::noNamespace(plv->GetName())); + std::string name = DD4hep2DDDName::noNameSpace(static_cast(plv->GetName())); for (unsigned int k = 0; k < LVNames_.size(); ++k) { if (name.find(LVNames_[k]) != std::string::npos) { mapLV_[plv] = std::pair(k, name); @@ -249,7 +249,7 @@ HGCPassive::volumeIterator HGCPassive::findLV(G4LogicalVolume *plv) { } } if (topLV_ == nullptr) { - if (static_cast(dd4hep::dd::noNamespace(plv->GetName())) == motherName_) + if (DD4hep2DDDName::noNameSpace(static_cast(plv->GetName())) == motherName_) topLV_ = plv; } return itr; diff --git a/SimG4CMS/HGCalTestBeam/python/HGCalTB230SepXML_cfi.py b/SimG4CMS/HGCalTestBeam/python/HGCalTB230SepXML_cfi.py new file mode 100644 index 0000000000000..4273533fb9336 --- /dev/null +++ b/SimG4CMS/HGCalTestBeam/python/HGCalTB230SepXML_cfi.py @@ -0,0 +1,21 @@ +import FWCore.ParameterSet.Config as cms + +XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource", + geomXMLFiles = cms.vstring('Geometry/CMSCommonData/data/materials.xml', + 'Geometry/CMSCommonData/data/rotations.xml', + 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/cms.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcal.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalBeam.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalcell.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalwafer.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalEE.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalCons.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalConsData.xml', + 'Geometry/HGCalTBCommonData/data/TB230/Sep230/hgcalsense.xml', + 'Geometry/HGCalTBCommonData/data/TB230/hgcProdCuts.xml', + ), + rootNodeName = cms.string('cms:OCMS') +) + + diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTB230Jul_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTB230Aug_cfg.py similarity index 98% rename from SimG4CMS/HGCalTestBeam/test/HGCalTB230Jul_cfg.py rename to SimG4CMS/HGCalTestBeam/test/HGCalTB230Aug_cfg.py index d28b02d58f24c..efa5f0f0262a3 100644 --- a/SimG4CMS/HGCalTestBeam/test/HGCalTB230Jul_cfg.py +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTB230Aug_cfg.py @@ -8,7 +8,7 @@ process.load('Configuration.StandardSequences.Services_cff') process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') process.load('Configuration.EventContent.EventContent_cff') -process.load('Geometry.HGCalTBCommonData.testTB230JulXML_cfi') +process.load('Geometry.HGCalTBCommonData.testTB230AugXML_cfi') process.load('Geometry.HGCalCommonData.hgcalEENumberingInitialization_cfi') process.load('Geometry.HGCalCommonData.hgcalEEParametersInitialization_cfi') process.load('Geometry.HcalTestBeamData.hcalTB06Parameters_cff') diff --git a/SimG4CMS/HGCalTestBeam/test/HGCalTB230Sep_cfg.py b/SimG4CMS/HGCalTestBeam/test/HGCalTB230Sep_cfg.py new file mode 100644 index 0000000000000..2d82d05bcca6e --- /dev/null +++ b/SimG4CMS/HGCalTestBeam/test/HGCalTB230Sep_cfg.py @@ -0,0 +1,134 @@ +import FWCore.ParameterSet.Config as cms +from Configuration.Eras.Modifier_hgcaltb_cff import hgcaltb + +process = cms.Process('SIM', hgcaltb) + +# import of standard configurations +process.load("FWCore.MessageService.MessageLogger_cfi") +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('Geometry.HGCalTBCommonData.testTB230SepXML_cfi') +process.load('Geometry.HGCalCommonData.hgcalEENumberingInitialization_cfi') +process.load('Geometry.HGCalCommonData.hgcalEEParametersInitialization_cfi') +process.load('Geometry.HcalTestBeamData.hcalTB06Parameters_cff') +process.load('Configuration.StandardSequences.MagneticField_0T_cff') +process.load('Configuration.StandardSequences.Generator_cff') +process.load('IOMC.EventVertexGenerators.VtxSmearedFlat_cfi') +process.load('GeneratorInterface.Core.genFilterSummary_cff') +process.load('Configuration.StandardSequences.SimIdeal_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') +process.load('SimG4CMS.HGCalTestBeam.HGCalTB23Analyzer_cfi') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(1000) +) + +if 'MessageLogger' in process.__dict__: + process.MessageLogger.G4cerr=dict() + process.MessageLogger.G4cout=dict() + process.MessageLogger.HGCSim=dict() + process.MessageLogger.CaloSim=dict() + process.MessageLogger.FlatThetaGun=dict() + process.MessageLogger.FlatEvtVtx=dict() + +# Input source +process.source = cms.Source("EmptySource") + +process.options = cms.untracked.PSet( +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('SingleMuonE200_cfi nevts:10'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.RAWSIMoutput = cms.OutputModule("PoolOutputModule", + SelectEvents = cms.untracked.PSet( + SelectEvents = cms.vstring('generation_step') + ), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('GEN-SIM'), + filterName = cms.untracked.string('') + ), + eventAutoFlushCompressedSize = cms.untracked.int32(5242880), + fileName = cms.untracked.string('file:gensim.root'), + outputCommands = process.RAWSIMEventContent.outputCommands, + splitLevel = cms.untracked.int32(0) +) + +# Additional output definition +process.TFileService = cms.Service("TFileService", + fileName = cms.string('TBGenSimSep.root') + ) + +# Other statements +process.genstepfilter.triggerConditions=cms.vstring("generation_step") +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, 'auto:run2_mc', '') + +process.generator = cms.EDProducer("FlatRandomEThetaGunProducer", + AddAntiParticle = cms.bool(False), + PGunParameters = cms.PSet( + MinE = cms.double(199.99), + MaxE = cms.double(200.01), + MinTheta = cms.double(0.0), + MaxTheta = cms.double(0.0), + MinPhi = cms.double(-3.14159265359), + MaxPhi = cms.double(3.14159265359), + PartID = cms.vint32(11) + ), + Verbosity = cms.untracked.int32(1), + firstRun = cms.untracked.uint32(1), + psethack = cms.string('single electron E 10') +) +process.VtxSmeared.MinZ = -100.0 +process.VtxSmeared.MaxZ = -100.0 +#process.VtxSmeared.MinX = -1.0 +#process.VtxSmeared.MaxX = 1.0 +#process.VtxSmeared.MinY = -1.0 +#process.VtxSmeared.MaxY = 1.0 +process.g4SimHits.OnlySDs = ['HGCalSensitiveDetector', 'HcalTB06BeamDetector'] +process.g4SimHits.HGCSD.Detectors = 1 +process.g4SimHits.HGCSD.RejectMouseBite = False +process.g4SimHits.HGCSD.RotatedWafer = False + +process.g4SimHits.CaloTrkProcessing.TestBeam = True +process.g4SimHits.HCalSD.ForTBHCAL = True +process.g4SimHits.NonBeamEvent = True +process.g4SimHits.UseMagneticField = False + +process.g4SimHits.EventVerbose = 2 +process.g4SimHits.SteppingVerbosity = 2 +process.g4SimHits.StepVerboseThreshold= 0.1 +process.g4SimHits.VerboseEvents = [1] +process.g4SimHits.VertexNumber = [] +process.g4SimHits.VerboseTracks =[] + +# Path and EndPath definitions +process.generation_step = cms.Path(process.pgen) +process.simulation_step = cms.Path(process.psim) +process.genfiltersummary_step = cms.EndPath(process.genFilterSummary) +process.analysis_step = cms.Path(process.HGCalTB23Analyzer) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.RAWSIMoutput_step = cms.EndPath(process.RAWSIMoutput) + +process.g4SimHits.Physics.type = 'SimG4Core/Physics/FTFP_BERT_EMN' + +# Schedule definition +process.schedule = cms.Schedule(process.generation_step, + process.simulation_step, +# process.analysis_step, + process.endjob_step, + process.RAWSIMoutput_step, + ) +# filter all path with the production filter sequence +for path in process.paths: + getattr(process,path)._seq = process.generator * getattr(process,path)._seq + + diff --git a/SimG4CMS/Muon/BuildFile.xml b/SimG4CMS/Muon/BuildFile.xml index 8244c9f2db440..6940021ab5bbe 100644 --- a/SimG4CMS/Muon/BuildFile.xml +++ b/SimG4CMS/Muon/BuildFile.xml @@ -1,8 +1,9 @@ - + + diff --git a/SimG4CMS/Muon/src/MuonG4Numbering.cc b/SimG4CMS/Muon/src/MuonG4Numbering.cc index ba37228633706..46092903411f3 100644 --- a/SimG4CMS/Muon/src/MuonG4Numbering.cc +++ b/SimG4CMS/Muon/src/MuonG4Numbering.cc @@ -1,10 +1,10 @@ #include "SimG4CMS/Muon/interface/MuonG4Numbering.h" +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "CondFormats/GeometryObjects/interface/MuonOffsetMap.h" #include "Geometry/MuonNumbering/interface/MuonBaseNumber.h" #include "Geometry/MuonNumbering/interface/MuonGeometryConstants.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DD4hep/Filter.h" #include "G4VPhysicalVolume.hh" #include "G4VTouchable.hh" #include "G4Step.hh" @@ -54,7 +54,7 @@ MuonBaseNumber MuonG4Numbering::PhysicalVolumeToBaseNumber(const G4Step* aStep) int copyno = vol->GetCopyNo(); int extra(0); if (dd4hep_ && (offMap_ != nullptr)) { - std::string namx = static_cast(dd4hep::dd::noNamespace(vol->GetName())); + std::string namx = DD4hep2DDDName::noNameSpace(static_cast(vol->GetName())); std::size_t last = namx.rfind('_'); std::string name = ((last == std::string::npos) ? namx : (namx.substr(0, last))); auto itr = offMap_->muonMap_.find(name); diff --git a/SimG4CMS/Tracker/src/TrackerG4SimHitNumberingScheme.cc b/SimG4CMS/Tracker/src/TrackerG4SimHitNumberingScheme.cc index 20aba434b730d..7ea0c220b4d9e 100644 --- a/SimG4CMS/Tracker/src/TrackerG4SimHitNumberingScheme.cc +++ b/SimG4CMS/Tracker/src/TrackerG4SimHitNumberingScheme.cc @@ -1,8 +1,8 @@ #include "SimG4CMS/Tracker/interface/TrackerG4SimHitNumberingScheme.h" #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h" - +#include "SimG4Core/Geometry/interface/DD4hep2DDDName.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" -#include "DD4hep/Filter.h" + #include "G4TransportationManager.hh" #include "G4Navigator.hh" #include "G4VTouchable.hh" @@ -62,9 +62,11 @@ void TrackerG4SimHitNumberingScheme::touchToNavStory(const G4VTouchable* v, int levels = v->GetHistoryDepth(); for (int k = 0; k <= levels; ++k) { - if (dd4hep::dd::noNamespace(v->GetVolume(k)->GetLogicalVolume()->GetName()) != "TOBInactive") { - st.emplace_back( - std::pair(v->GetVolume(k)->GetCopyNo(), v->GetVolume(k)->GetLogicalVolume()->GetName())); + if (DD4hep2DDDName::noNameSpace(static_cast(v->GetVolume(k)->GetLogicalVolume()->GetName())) != + "TOBInactive") { + st.emplace_back(std::pair( + v->GetVolume(k)->GetCopyNo(), + DD4hep2DDDName::noNameSpace(static_cast(v->GetVolume(k)->GetLogicalVolume()->GetName())))); #ifdef EDM_ML_DEBUG debugint.emplace_back(v->GetVolume(k)->GetCopyNo()); debugstring.emplace_back(v->GetVolume(k)->GetLogicalVolume()->GetName()); @@ -72,9 +74,9 @@ void TrackerG4SimHitNumberingScheme::touchToNavStory(const G4VTouchable* v, } } #ifdef EDM_ML_DEBUG - LogDebug("TrackerSimDebugNumbering") << " G4 TrackerG4SimHitNumberingScheme " << debugint.size(); + edm::LogVerbatim("TrackerSimDebugNumbering") << " G4 TrackerG4SimHitNumberingScheme " << debugint.size(); for (u_int32_t jj = 0; jj < debugstring.size(); jj++) - LogDebug("TrackerSimDebugNumbering") << " " << debugstring[jj]; + edm::LogVerbatim("TrackerSimDebugNumbering") << " " << debugstring[jj]; #endif } @@ -87,7 +89,7 @@ unsigned int TrackerG4SimHitNumberingScheme::g4ToNumberingScheme(const G4VToucha #ifdef EDM_ML_DEBUG dumpG4VPV(v); - LogDebug("TrackerSimDebugNumbering") << " Returning: " << directMap_[st]; + edm::LogVerbatim("TrackerSimDebugNumbering") << " Returning: " << directMap_[st]; #endif return directMap_[st]; @@ -96,9 +98,9 @@ unsigned int TrackerG4SimHitNumberingScheme::g4ToNumberingScheme(const G4VToucha void TrackerG4SimHitNumberingScheme::dumpG4VPV(const G4VTouchable* v) { int levels = v->GetHistoryDepth(); - LogDebug("TrackerSimDebugNumbering") << " NAME : " << v->GetVolume()->GetLogicalVolume()->GetName(); + edm::LogVerbatim("TrackerSimDebugNumbering") << " NAME : " << v->GetVolume()->GetLogicalVolume()->GetName(); for (int k = 0; k <= levels; k++) { - LogDebug("TrackerSimInfoNumbering") << " Hist: " << v->GetVolume(k)->GetLogicalVolume()->GetName() << " Copy " - << v->GetVolume(k)->GetCopyNo(); + edm::LogVerbatim("TrackerSimInfoNumbering") + << " Hist: " << v->GetVolume(k)->GetLogicalVolume()->GetName() << " Copy " << v->GetVolume(k)->GetCopyNo(); } } diff --git a/SimG4Core/Application/interface/StackingAction.h b/SimG4Core/Application/interface/StackingAction.h index a058971e35c78..6e997fb25a14f 100644 --- a/SimG4Core/Application/interface/StackingAction.h +++ b/SimG4Core/Application/interface/StackingAction.h @@ -79,6 +79,8 @@ class StackingAction : public G4UserStackingAction { const G4Region* regionMuonIron{nullptr}; const G4Region* regionPreShower{nullptr}; const G4Region* regionCastor{nullptr}; + const G4Region* regionZDC{nullptr}; + const G4Region* regionHGcal{nullptr}; const G4Region* regionWorld{nullptr}; // Russian roulette energy limits @@ -96,6 +98,10 @@ class StackingAction : public G4UserStackingAction { double nRusRoPreShower; double gRusRoCastor; double nRusRoCastor; + double gRusRoZDC; + double nRusRoZDC; + double gRusRoHGcal; + double nRusRoHGcal; double gRusRoWorld; double nRusRoWorld; // flags diff --git a/SimG4Core/Application/interface/SteppingAction.h b/SimG4Core/Application/interface/SteppingAction.h index cad14a885f48f..e5601908a5bc9 100644 --- a/SimG4Core/Application/interface/SteppingAction.h +++ b/SimG4Core/Application/interface/SteppingAction.h @@ -40,6 +40,7 @@ class SteppingAction : public G4UserSteppingAction { const G4VPhysicalVolume* calo{nullptr}; const CMSSteppingVerbose* steppingVerbose{nullptr}; const G4LogicalVolume* m_CMStoZDC{nullptr}; + const G4Region* m_ZDCRegion{nullptr}; double theCriticalEnergyForVacuum; double theCriticalDensity; double maxTrackTime; diff --git a/SimG4Core/Application/plugins/OscarMTProducer.cc b/SimG4Core/Application/plugins/OscarMTProducer.cc index f8b0fcd93abe6..807e59a4f1b8d 100644 --- a/SimG4Core/Application/plugins/OscarMTProducer.cc +++ b/SimG4Core/Application/plugins/OscarMTProducer.cc @@ -23,7 +23,6 @@ #include "SimG4Core/Application/interface/RunManagerMTWorker.h" #include "SimG4Core/Notification/interface/TmpSimEvent.h" #include "SimG4Core/Notification/interface/TmpSimVertex.h" -#include "SimG4Core/Notification/interface/TmpSimTrack.h" #include "SimG4Core/SensitiveDetector/interface/SensitiveTkDetector.h" #include "SimG4Core/SensitiveDetector/interface/SensitiveCaloDetector.h" @@ -270,9 +269,9 @@ void OscarMTProducer::produce(edm::Event& e, const edm::EventSetup& es) { e.put(std::move(p1)); e.put(std::move(p2)); - for (auto& tracker : sTk) { + for (auto const& tracker : sTk) { const std::vector& v = tracker->getNames(); - for (auto& name : v) { + for (auto const& name : v) { std::unique_ptr product(new edm::PSimHitContainer); tracker->fillHits(*product, name); if (0 < m_verbose && product != nullptr && !product->empty()) @@ -280,9 +279,9 @@ void OscarMTProducer::produce(edm::Event& e, const edm::EventSetup& es) { e.put(std::move(product), name); } } - for (auto& calo : sCalo) { + for (auto const& calo : sCalo) { const std::vector& v = calo->getNames(); - for (auto& name : v) { + for (auto const& name : v) { std::unique_ptr product(new edm::PCaloHitContainer); calo->fillHits(*product, name); if (0 < m_verbose && product != nullptr && !product->empty()) diff --git a/SimG4Core/Application/python/g4SimHits_cfi.py b/SimG4Core/Application/python/g4SimHits_cfi.py index 0027314c1bee1..5b8f8d3bc05be 100644 --- a/SimG4Core/Application/python/g4SimHits_cfi.py +++ b/SimG4Core/Application/python/g4SimHits_cfi.py @@ -316,6 +316,8 @@ RusRoMuonIronGamma = cms.double(0.3), RusRoPreShowerGamma = cms.double(0.3), RusRoCastorGamma = cms.double(0.3), + RusRoZDCGamma = cms.double(0.3), + RusRoHGcalGamma = cms.double(1.3), RusRoWorldGamma = cms.double(0.3), RusRoNeutronEnergyLimit = cms.double(10.0), ## (MeV) RusRoEcalNeutron = cms.double(0.1), @@ -323,6 +325,8 @@ RusRoMuonIronNeutron = cms.double(0.1), RusRoPreShowerNeutron = cms.double(0.1), RusRoCastorNeutron = cms.double(0.1), + RusRoZDCNeutron = cms.double(0.1), + RusRoHGcalNeutron = cms.double(1.1), RusRoWorldNeutron = cms.double(0.1), RusRoProtonEnergyLimit = cms.double(0.0), RusRoEcalProton = cms.double(1.0), @@ -340,7 +344,7 @@ ), SteppingAction = cms.PSet( common_maximum_time, - CMStoZDCtransport = cms.bool(False), + CMStoZDCtransport = cms.bool(False), MaxNumberOfSteps = cms.int32(20000), CMSName = cms.string('CMSE'), TrackerName = cms.string('Tracker'), @@ -687,9 +691,9 @@ ## Disable PPS from Run 3 PbPb runs and enable ZDC ## from Configuration.Eras.Modifier_pp_on_PbPb_run3_cff import pp_on_PbPb_run3 -pp_on_PbPb_run3.toModify(g4SimHits, LHCTransport = False, - SteppingAction = dict( - CMStoZDCtransport = True) ) +pp_on_PbPb_run3.toModify(g4SimHits, LHCTransport = False) +# SteppingAction = dict( +# CMStoZDCtransport = True) ) ## ## Change ECAL time slices diff --git a/SimG4Core/Application/src/EventAction.cc b/SimG4Core/Application/src/EventAction.cc index 603ef1817c009..fdbe3cf9d8716 100644 --- a/SimG4Core/Application/src/EventAction.cc +++ b/SimG4Core/Application/src/EventAction.cc @@ -2,7 +2,6 @@ #include "SimG4Core/Application/interface/SimRunInterface.h" #include "SimG4Core/Notification/interface/TmpSimEvent.h" #include "SimG4Core/Notification/interface/TmpSimVertex.h" -#include "SimG4Core/Notification/interface/TmpSimTrack.h" #include "SimG4Core/Notification/interface/BeginOfEvent.h" #include "SimG4Core/Notification/interface/EndOfEvent.h" #include "SimG4Core/Notification/interface/CMSSteppingVerbose.h" @@ -23,8 +22,6 @@ EventAction::EventAction(const edm::ParameterSet& p, m_debug(p.getUntrackedParameter("debug", false)) {} void EventAction::BeginOfEventAction(const G4Event* anEvent) { - m_trackManager->reset(); - BeginOfEvent e(anEvent); m_beginOfEventSignal(&e); @@ -41,17 +38,17 @@ void EventAction::BeginOfEventAction(const G4Event* anEvent) { void EventAction::EndOfEventAction(const G4Event* anEvent) { if (m_printRandom) { edm::LogVerbatim("SimG4CoreApplication") - << " EndOfEvent " << anEvent->GetEventID() << " Random number: " << G4UniformRand(); + << "EventACtion::EndOfEventAction: " << anEvent->GetEventID() << " Random number: " << G4UniformRand(); } if (!m_stopFile.empty() && std::ifstream(m_stopFile.c_str())) { edm::LogWarning("SimG4CoreApplication") - << "EndOfEventAction: termination signal received at event " << anEvent->GetEventID(); + << "EventACtion::EndOfEventAction: termination signal received at event " << anEvent->GetEventID(); // soft abort run m_runInterface->abortRun(true); } if (anEvent->GetNumberOfPrimaryVertex() == 0) { - edm::LogWarning("SimG4CoreApplication") << "EndOfEventAction: event " << anEvent->GetEventID() - << " must have failed (no G4PrimaryVertices found) and will be skipped "; + edm::LogWarning("SimG4CoreApplication") << "EventACtion::EndOfEventAction: event " << anEvent->GetEventID() + << " must have failed (no G4PrimaryVertices found) and will be skipped"; return; } diff --git a/SimG4Core/Application/src/LowEnergyFastSimModel.cc b/SimG4Core/Application/src/LowEnergyFastSimModel.cc index 261f7896060a3..f5e5c38f3ec2c 100644 --- a/SimG4Core/Application/src/LowEnergyFastSimModel.cc +++ b/SimG4Core/Application/src/LowEnergyFastSimModel.cc @@ -93,10 +93,16 @@ void LowEnergyFastSimModel::DoIt(const G4FastTrack& fastTrack, G4FastStep& fastS spot.SetPosition(pos); fHitMaker.make(&spot, &fastTrack); + // Russian roulette + double wt2 = track->GetWeight(); + if (wt2 <= 0.0) { + wt2 = 1.0; + } + // tail energy deposition const G4double etail = energy - inPointEnergy; const G4int nspots = etail; - const G4double tailEnergy = etail / (nspots + 1); + const G4double tailEnergy = etail * wt2 / (nspots + 1); /* edm::LogVerbatim("LowEnergyFastSimModel") << track->GetDefinition()->GetParticleName() << " Ekin(MeV)=" << energy << " material: <" diff --git a/SimG4Core/Application/src/StackingAction.cc b/SimG4Core/Application/src/StackingAction.cc index 4339142883ea5..e70fe26c07b04 100644 --- a/SimG4Core/Application/src/StackingAction.cc +++ b/SimG4Core/Application/src/StackingAction.cc @@ -3,6 +3,7 @@ #include "SimG4Core/Notification/interface/MCTruthUtil.h" #include "SimG4Core/Notification/interface/TrackInformation.h" #include "SimG4Core/Notification/interface/CMSSteppingVerbose.h" +#include "SimG4Core/Notification/interface/G4TrackToParticleID.h" #include "FWCore/MessageLogger/interface/MessageLogger.h" @@ -57,6 +58,11 @@ StackingAction::StackingAction(const TrackingAction* trka, const edm::ParameterS nRusRoCastor = p.getParameter("RusRoCastorNeutron"); nRusRoWorld = p.getParameter("RusRoWorldNeutron"); + gRusRoZDC = p.getParameter("RusRoZDCGamma"); + gRusRoHGcal = p.getParameter("RusRoHGcalGamma"); + nRusRoZDC = p.getParameter("RusRoZDCNeutron"); + nRusRoHGcal = p.getParameter("RusRoHGcalNeutron"); + if (gRusRoEnerLim > 0.0 && (gRusRoEcal < 1.0 || gRusRoHcal < 1.0 || gRusRoMuonIron < 1.0 || gRusRoPreShower < 1.0 || gRusRoCastor < 1.0 || gRusRoWorld < 1.0)) { gRRactive = true; @@ -121,6 +127,8 @@ StackingAction::StackingAction(const TrackingAction* trka, const edm::ParameterS << " HCAL Prob= " << gRusRoHcal << "\n" << " MuonIron Prob= " << gRusRoMuonIron << "\n" << " PreShower Prob= " << gRusRoPreShower << "\n" + << " HGCAL Prob= " << gRusRoHGcal << "\n" + << " ZDC Prob= " << gRusRoZDC << "\n" << " CASTOR Prob= " << gRusRoCastor << "\n" << " World Prob= " << gRusRoWorld; } @@ -132,6 +140,8 @@ StackingAction::StackingAction(const TrackingAction* trka, const edm::ParameterS << " HCAL Prob= " << nRusRoHcal << "\n" << " MuonIron Prob= " << nRusRoMuonIron << "\n" << " PreShower Prob= " << nRusRoPreShower << "\n" + << " HGCAL Prob= " << nRusRoHGcal << "\n" + << " ZDC Prob= " << nRusRoZDC << "\n" << " CASTOR Prob= " << nRusRoCastor << "\n" << " World Prob= " << nRusRoWorld; } @@ -239,9 +249,11 @@ G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* aTrac } } - if (killDeltaRay && classification != fKill && subType == fIonisation) { + if (killDeltaRay && classification != fKill && aTrack->GetParentID() > 0 && + G4TrackToParticleID::isGammaElectronPositron(aTrack)) { classification = fKill; } + if (killInCalo && classification != fKill && isThisRegion(reg, caloRegions)) { classification = fKill; } @@ -275,7 +287,7 @@ G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* aTrac double currentWeight = aTrack->GetWeight(); if (1.0 >= currentWeight) { - double prob = 1.0; + double prob = 1.001; double elim = 0.0; // neutron @@ -289,6 +301,10 @@ G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* aTrac prob = nRusRoMuonIron; } else if (reg == regionPreShower) { prob = nRusRoPreShower; + } else if (reg == regionHGcal) { + prob = nRusRoHGcal; + } else if (reg == regionZDC) { + prob = nRusRoZDC; } else if (reg == regionCastor) { prob = nRusRoCastor; } else if (reg == regionWorld) { @@ -311,6 +327,10 @@ G4ClassificationOfNewTrack StackingAction::ClassifyNewTrack(const G4Track* aTrac prob = gRusRoHcal; } else if (reg == regionMuonIron) { prob = gRusRoMuonIron; + } else if (reg == regionHGcal) { + prob = gRusRoHGcal; + } else if (reg == regionZDC) { + prob = gRusRoZDC; } else if (reg == regionCastor) { prob = gRusRoCastor; } else if (reg == regionWorld) { @@ -373,6 +393,12 @@ void StackingAction::initPointer() { if ((gRusRoCastor < 1.0 || nRusRoCastor < 1.0) && rname == "CastorRegion") { regionCastor = reg; } + if ((gRusRoZDC < 1.0 || nRusRoZDC < 1.0) && rname == "ZDCRegion") { + regionZDC = reg; + } + if ((gRusRoHGcal < 1.0 || nRusRoHGcal < 1.0) && rname == "HGCalRegion") { + regionHGcal = reg; + } if ((gRusRoWorld < 1.0 || nRusRoWorld < 1.0) && rname == "DefaultRegionForTheWorld") { regionWorld = reg; } diff --git a/SimG4Core/Application/src/SteppingAction.cc b/SimG4Core/Application/src/SteppingAction.cc index a22305baf4917..377a642149db3 100644 --- a/SimG4Core/Application/src/SteppingAction.cc +++ b/SimG4Core/Application/src/SteppingAction.cc @@ -44,7 +44,7 @@ SteppingAction::SteppingAction(const CMSSteppingVerbose* sv, const edm::Paramete << " MaxTrackTime = " << maxTrackTime / CLHEP::ns << " ns;" << " MaxZCentralCMS = " << maxZCentralCMS / CLHEP::m << " m" << " MaxTrackTimeForward = " << maxTrackTimeForward / CLHEP::ns << " ns" - << " MaxNumberOfSteps = " << maxNumberOfSteps << "\n" + << " MaxNumberOfSteps = " << maxNumberOfSteps << " ZDC: " << m_CMStoZDCtransport << "\n" << " Names of special volumes: " << trackerName_ << " " << caloName_; numberTimes = maxTrackTimes.size(); @@ -140,11 +140,18 @@ void SteppingAction::UserSteppingAction(const G4Step* aStep) { const G4LogicalVolume* lv = postStep->GetPhysicalVolume()->GetLogicalVolume(); const G4Region* theRegion = lv->GetRegion(); - // kill in dead regions excpt CMStoZDC volume + // kill in dead regions except CMStoZDC volume if (isInsideDeadRegion(theRegion) && !isForZDC(lv, std::abs(theTrack->GetParticleDefinition()->GetPDGEncoding()))) { tstat = sDeadRegion; } + // kill particles leaving ZDC + if (sAlive == sVeryForward && m_CMStoZDCtransport) { + const G4Region* preRegion = preStep->GetPhysicalVolume()->GetLogicalVolume()->GetRegion(); + if (preRegion == m_ZDCRegion && preRegion != theRegion) + tstat = sDeadRegion; + } + // kill out of time if (sAlive == tstat) { if (isOutOfTimeWindow(theRegion, time)) @@ -220,8 +227,8 @@ bool SteppingAction::initPointer() { for (auto const& pvcite : *pvs) edm::LogVerbatim("SimG4CoreApplication") << pvcite << " corresponds to " << pvcite->GetName(); #endif - const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance(); + const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance(); ekinVolumes.resize(numberEkins, nullptr); #ifdef EDM_ML_DEBUG edm::LogVerbatim("SimG4CoreApplication") << lvs->size() << " Logical volume in the store"; @@ -264,10 +271,10 @@ bool SteppingAction::initPointer() { for (auto const& rcite : *rs) edm::LogVerbatim("SimG4CoreApplication") << rcite << " corresponds to " << rcite->GetName(); #endif - if (numberTimes > 0) { - maxTimeRegions.resize(numberTimes, nullptr); - for (auto const& rcite : *rs) { - const G4String& rname = rcite->GetName(); + for (auto const& rcite : *rs) { + const G4String& rname = rcite->GetName(); + if (numberTimes > 0) { + maxTimeRegions.resize(numberTimes, nullptr); for (unsigned int i = 0; i < numberTimes; ++i) { if (rname == (G4String)(maxTimeNames[i])) { maxTimeRegions[i] = rcite; @@ -275,11 +282,8 @@ bool SteppingAction::initPointer() { } } } - } - if (ndeadRegions > 0) { - deadRegions.resize(ndeadRegions, nullptr); - for (auto const& rcite : *rs) { - const G4String& rname = rcite->GetName(); + if (ndeadRegions > 0) { + deadRegions.resize(ndeadRegions, nullptr); for (unsigned int i = 0; i < ndeadRegions; ++i) { if (rname == (G4String)(deadRegionNames[i])) { deadRegions[i] = rcite; @@ -287,6 +291,9 @@ bool SteppingAction::initPointer() { } } } + if (m_CMStoZDCtransport && rname == "ZDCRegion") { + m_ZDCRegion = rcite; + } } return true; } diff --git a/SimMuon/DTDigitizer/plugins/DTChamberMasker.cc b/SimMuon/DTDigitizer/plugins/DTChamberMasker.cc index 5f0ef724f3592..179a841a66808 100644 --- a/SimMuon/DTDigitizer/plugins/DTChamberMasker.cc +++ b/SimMuon/DTDigitizer/plugins/DTChamberMasker.cc @@ -25,7 +25,7 @@ // user include files #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/ParameterSet/interface/ParameterSet.h" #include "DataFormats/Common/interface/Handle.h" @@ -60,25 +60,22 @@ // class declaration // -class DTChamberMasker : public edm::stream::EDProducer<> { +class DTChamberMasker : public edm::global::EDProducer<> { public: explicit DTChamberMasker(const edm::ParameterSet &); - ~DTChamberMasker() override; static void fillDescriptions(edm::ConfigurationDescriptions &); private: - void produce(edm::Event &, const edm::EventSetup &) override; - - void beginRun(edm::Run const &, edm::EventSetup const &) override; + void produce(edm::StreamID, edm::Event &, const edm::EventSetup &) const override; void createMaskedChamberCollection(edm::ESHandle &); // ----------member data --------------------------- - edm::EDGetTokenT m_digiToken; - edm::ESGetToken m_agingObjToken; - std::map m_ChEffs; + const edm::EDGetTokenT m_digiToken; + const edm::EDPutTokenT m_putToken; + const edm::ESGetToken m_agingObjToken; }; // @@ -89,23 +86,24 @@ class DTChamberMasker : public edm::stream::EDProducer<> { // constructors and destructor // DTChamberMasker::DTChamberMasker(const edm::ParameterSet &iConfig) - : m_digiToken(consumes(iConfig.getParameter("digiTag"))), - m_agingObjToken(esConsumes()) { - produces(); -} - -DTChamberMasker::~DTChamberMasker() {} + : m_digiToken(consumes(iConfig.getParameter("digiTag"))), + m_putToken(produces()), + m_agingObjToken(esConsumes()) {} // // member functions // // ------------ method called to produce the data ------------ -void DTChamberMasker::produce(edm::Event &event, const edm::EventSetup &conditions) { +void DTChamberMasker::produce(edm::StreamID, edm::Event &event, const edm::EventSetup &conditions) const { edm::Service randGenService; CLHEP::HepRandomEngine &randGen = randGenService->getEngine(event.streamID()); - std::unique_ptr filteredDigis(new DTDigiCollection()); + MuonSystemAging const &agingObj = conditions.getData(m_agingObjToken); + + auto const &chEffs = agingObj.m_DTChambEffs; + + DTDigiCollection filteredDigis; if (!m_digiToken.isUninitialized()) { edm::Handle dtDigis; @@ -113,23 +111,14 @@ void DTChamberMasker::produce(edm::Event &event, const edm::EventSetup &conditio for (const auto &dtLayerId : (*dtDigis)) { uint32_t rawId = (dtLayerId.first).chamberId().rawId(); - auto chEffIt = m_ChEffs.find(rawId); + auto chEffIt = chEffs.find(rawId); - if (chEffIt == m_ChEffs.end() || randGen.flat() <= chEffIt->second) - filteredDigis->put(dtLayerId.second, dtLayerId.first); + if (chEffIt == chEffs.end() || randGen.flat() <= chEffIt->second) + filteredDigis.put(dtLayerId.second, dtLayerId.first); } } - event.put(std::move(filteredDigis)); -} - -// ------------ method called when starting to processes a run ------------ -void DTChamberMasker::beginRun(edm::Run const &run, edm::EventSetup const &iSetup) { - m_ChEffs.clear(); - - edm::ESHandle agingObj = iSetup.getHandle(m_agingObjToken); - - m_ChEffs = agingObj->m_DTChambEffs; + event.emplace(m_putToken, std::move(filteredDigis)); } // ------------ method fills 'descriptions' with the allowed parameters for the diff --git a/SimMuon/GEMDigitizer/plugins/GEMChamberMasker.cc b/SimMuon/GEMDigitizer/plugins/GEMChamberMasker.cc index ffe2efa7d79b4..e13e2fd09a70e 100644 --- a/SimMuon/GEMDigitizer/plugins/GEMChamberMasker.cc +++ b/SimMuon/GEMDigitizer/plugins/GEMChamberMasker.cc @@ -8,7 +8,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/ESGetToken.h" @@ -27,29 +27,25 @@ // class declaration // -class GEMChamberMasker : public edm::stream::EDProducer<> { +class GEMChamberMasker : public edm::global::EDProducer<> { public: explicit GEMChamberMasker(const edm::ParameterSet&); - ~GEMChamberMasker() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void produce(edm::Event&, const edm::EventSetup&) override; - - void beginRun(edm::Run const&, edm::EventSetup const&) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; // ----------member data --------------------------- - edm::InputTag digiTag_; - bool ge11Minus_; - bool ge11Plus_; - bool ge21Minus_; - bool ge21Plus_; - - edm::EDGetTokenT m_digiTag; - edm::ESGetToken m_agingObj; - std::map m_maskedGEMIDs; + const edm::InputTag digiTag_; + const bool ge11Minus_; + const bool ge11Plus_; + const bool ge21Minus_; + const bool ge21Plus_; + + const edm::EDGetTokenT m_digiTag; + const edm::EDPutTokenT m_putToken; + const edm::ESGetToken m_agingObj; }; // @@ -68,28 +64,28 @@ GEMChamberMasker::GEMChamberMasker(const edm::ParameterSet& iConfig) ge11Minus_(iConfig.getParameter("ge11Minus")), ge11Plus_(iConfig.getParameter("ge11Plus")), ge21Minus_(iConfig.getParameter("ge21Minus")), - ge21Plus_(iConfig.getParameter("ge21Plus")) { - m_digiTag = consumes(digiTag_); - m_agingObj = esConsumes(); - produces(); -} - -GEMChamberMasker::~GEMChamberMasker() {} + ge21Plus_(iConfig.getParameter("ge21Plus")), + m_digiTag(consumes(digiTag_)), + m_putToken(produces()), + m_agingObj(esConsumes()) {} // // member functions // // ------------ method called to produce the data ------------ -void GEMChamberMasker::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void GEMChamberMasker::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { using namespace edm; - std::unique_ptr filteredDigis(new GEMDigiCollection()); + GEMDigiCollection filteredDigis; + + auto const& agingObj = iSetup.getData(m_agingObj); + + auto const& maskedGEMIDs = agingObj.m_GEMChambEffs; if (!digiTag_.label().empty()) { - edm::Handle gemDigis; - iEvent.getByToken(m_digiTag, gemDigis); + GEMDigiCollection const& gemDigis = iEvent.get(m_digiTag); - for (const auto& gemLayerId : (*gemDigis)) { + for (const auto& gemLayerId : gemDigis) { auto chambId = gemLayerId.first.chamberId(); bool keepDigi = (!ge11Minus_ && chambId.station() == 1 && chambId.region() < 0) || @@ -98,27 +94,15 @@ void GEMChamberMasker::produce(edm::Event& iEvent, const edm::EventSetup& iSetup (!ge21Plus_ && chambId.station() == 2 && chambId.region() > 0); uint32_t rawId = chambId.rawId(); - if (keepDigi || m_maskedGEMIDs.find(rawId) == m_maskedGEMIDs.end()) { - filteredDigis->put(gemLayerId.second, gemLayerId.first); + if (keepDigi || maskedGEMIDs.find(rawId) == maskedGEMIDs.end()) { + filteredDigis.put(gemLayerId.second, gemLayerId.first); } } } - iEvent.put(std::move(filteredDigis)); + iEvent.emplace(m_putToken, std::move(filteredDigis)); } -// ------------ method called when starting to processes a run ------------ - -void GEMChamberMasker::beginRun(edm::Run const& run, edm::EventSetup const& iSetup) { - edm::ESHandle agingObj = iSetup.getHandle(m_agingObj); - - m_maskedGEMIDs = agingObj->m_GEMChambEffs; -} - -// ------------ method called when ending the processing of a run ------------ - -void GEMChamberMasker::endRun(edm::Run const&, edm::EventSetup const&) {} - void GEMChamberMasker::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; desc.add("digiTag", edm::InputTag("simMuonGEMDigis")); diff --git a/SimMuon/GEMDigitizer/plugins/ME0ChamberMasker.cc b/SimMuon/GEMDigitizer/plugins/ME0ChamberMasker.cc index b35992fd29b54..18f92a7e80b90 100644 --- a/SimMuon/GEMDigitizer/plugins/ME0ChamberMasker.cc +++ b/SimMuon/GEMDigitizer/plugins/ME0ChamberMasker.cc @@ -12,7 +12,7 @@ // user include files #include "FWCore/Framework/interface/Frameworkfwd.h" -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/ConsumesCollector.h" #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Utilities/interface/ESGetToken.h" @@ -31,26 +31,22 @@ // class declaration // -class ME0ChamberMasker : public edm::stream::EDProducer<> { +class ME0ChamberMasker : public edm::global::EDProducer<> { public: explicit ME0ChamberMasker(const edm::ParameterSet&); - ~ME0ChamberMasker() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void produce(edm::Event&, const edm::EventSetup&) override; - - void beginRun(edm::Run const&, edm::EventSetup const&) override; - void endRun(edm::Run const&, edm::EventSetup const&) override; + void produce(edm::StreamID, edm::Event&, const edm::EventSetup&) const override; // ----------member data --------------------------- - bool me0Minus_; - bool me0Plus_; - edm::InputTag digiTag_; - edm::EDGetTokenT m_digiTag; - edm::ESGetToken m_agingObjTag; - std::map m_maskedME0IDs; + const bool me0Minus_; + const bool me0Plus_; + const edm::InputTag digiTag_; + const edm::EDGetTokenT m_digiTag; + const edm::EDPutTokenT m_putToken; + const edm::ESGetToken m_agingObjTag; }; // @@ -67,54 +63,43 @@ class ME0ChamberMasker : public edm::stream::EDProducer<> { ME0ChamberMasker::ME0ChamberMasker(const edm::ParameterSet& iConfig) : me0Minus_(iConfig.getParameter("me0Minus")), me0Plus_(iConfig.getParameter("me0Plus")), - digiTag_(iConfig.getParameter("digiTag")) { - m_digiTag = consumes(digiTag_); - m_agingObjTag = esConsumes(); - produces(); -} - -ME0ChamberMasker::~ME0ChamberMasker() {} + digiTag_(iConfig.getParameter("digiTag")), + m_digiTag(consumes(digiTag_)), + m_putToken(produces()), + m_agingObjTag(esConsumes()) {} // // member functions // // ------------ method called to produce the data ------------ -void ME0ChamberMasker::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) { +void ME0ChamberMasker::produce(edm::StreamID, edm::Event& iEvent, const edm::EventSetup& iSetup) const { using namespace edm; - std::unique_ptr filteredDigis(new ME0DigiPreRecoCollection()); + + MuonSystemAging const& agingObj = iSetup.getData(m_agingObjTag); + + auto const& maskedME0IDs = agingObj.m_ME0ChambEffs; + + ME0DigiPreRecoCollection filteredDigis; if (!digiTag_.label().empty()) { - edm::Handle me0Digis; - iEvent.getByToken(m_digiTag, me0Digis); + ME0DigiPreRecoCollection const& me0Digis = iEvent.get(m_digiTag); - for (const auto& me0LayerId : (*me0Digis)) { + for (const auto& me0LayerId : me0Digis) { auto chambId = me0LayerId.first.chamberId(); bool keepDigi = (!me0Minus_ && chambId.region() < 0) || (!me0Plus_ && chambId.region() > 0); uint32_t rawId = chambId.rawId(); - if (keepDigi || m_maskedME0IDs.find(rawId) == m_maskedME0IDs.end()) { - filteredDigis->put(me0LayerId.second, me0LayerId.first); + if (keepDigi || maskedME0IDs.find(rawId) == maskedME0IDs.end()) { + filteredDigis.put(me0LayerId.second, me0LayerId.first); } } } - iEvent.put(std::move(filteredDigis)); + iEvent.emplace(m_putToken, std::move(filteredDigis)); } -// ------------ method called when starting to processes a run ------------ - -void ME0ChamberMasker::beginRun(edm::Run const& run, edm::EventSetup const& iSetup) { - edm::ESHandle agingObj = iSetup.getHandle(m_agingObjTag); - - m_maskedME0IDs = agingObj->m_ME0ChambEffs; -} - -// ------------ method called when ending the processing of a run ------------ - -void ME0ChamberMasker::endRun(edm::Run const&, edm::EventSetup const&) {} - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void ME0ChamberMasker::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { edm::ParameterSetDescription desc; diff --git a/SimTracker/TrackTriggerAssociation/plugins/StubAssociator.cc b/SimTracker/TrackTriggerAssociation/plugins/StubAssociator.cc index 2dfec2580aac7..9b669b53130d7 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/StubAssociator.cc +++ b/SimTracker/TrackTriggerAssociation/plugins/StubAssociator.cc @@ -1,4 +1,4 @@ -#include "FWCore/Framework/interface/stream/EDProducer.h" +#include "FWCore/Framework/interface/global/EDProducer.h" #include "FWCore/Framework/interface/Run.h" #include "FWCore/Framework/interface/EventSetup.h" #include "FWCore/Framework/interface/Event.h" @@ -34,17 +34,12 @@ namespace tt { * \author Thomas Schuh * \date 2020, Apr */ - class StubAssociator : public stream::EDProducer<> { + class StubAssociator : public global::EDProducer<> { public: explicit StubAssociator(const ParameterSet&); - ~StubAssociator() override {} private: - void beginRun(const Run&, const EventSetup&) override; - void produce(Event&, const EventSetup&) override; - void endJob() {} - // helper classe to store configurations - const Setup* setup_ = nullptr; + void produce(StreamID, Event&, const EventSetup&) const override; // ED input token of TTStubs EDGetTokenT getTokenTTStubDetSetVec_; // ED input token of TTClusterAssociation @@ -64,20 +59,16 @@ namespace tt { putTokenReconstructable_ = produces(iConfig.getParameter("BranchReconstructable")); putTokenSelection_ = produces(iConfig.getParameter("BranchSelection")); // book ES product - esGetTokenSetup_ = esConsumes(); + esGetTokenSetup_ = esConsumes(); } - void StubAssociator::beginRun(const Run& iRun, const EventSetup& iSetup) { - setup_ = &iSetup.getData(esGetTokenSetup_); - } + void StubAssociator::produce(StreamID, Event& iEvent, const EventSetup& iSetup) const { + auto const& setup = iSetup.getData(esGetTokenSetup_); - void StubAssociator::produce(Event& iEvent, const EventSetup& iSetup) { // associate TTStubs with TrackingParticles - Handle handleTTStubDetSetVec; - iEvent.getByToken(getTokenTTStubDetSetVec_, handleTTStubDetSetVec); - Handle handleTTClusterAssMap; - Handle handleTTStubAssMap; - iEvent.getByToken(getTokenTTClusterAssMap_, handleTTClusterAssMap); + Handle handleTTStubDetSetVec = iEvent.getHandle(getTokenTTStubDetSetVec_); + auto const& ttClusterAssMap = iEvent.get(getTokenTTClusterAssMap_); + map> mapTPPtrsTTStubRefs; auto isNonnull = [](const TPPtr& tpPtr) { return tpPtr.isNonnull(); }; for (TTStubDetSetVec::const_iterator ttModule = handleTTStubDetSetVec->begin(); @@ -87,8 +78,7 @@ namespace tt { const TTStubRef ttStubRef = makeRefTo(handleTTStubDetSetVec, ttStub); set tpPtrs; for (unsigned int iClus = 0; iClus < 2; iClus++) { - const vector& assocPtrs = - handleTTClusterAssMap->findTrackingParticlePtrs(ttStubRef->clusterRef(iClus)); + const vector& assocPtrs = ttClusterAssMap.findTrackingParticlePtrs(ttStubRef->clusterRef(iClus)); copy_if(assocPtrs.begin(), assocPtrs.end(), inserter(tpPtrs, tpPtrs.begin()), isNonnull); } for (const TPPtr& tpPtr : tpPtrs) @@ -96,13 +86,13 @@ namespace tt { } } // associate reconstructable TrackingParticles with TTStubs - StubAssociation reconstructable(setup_); - StubAssociation selection(setup_); + StubAssociation reconstructable(&setup); + StubAssociation selection(&setup); for (const auto& p : mapTPPtrsTTStubRefs) { - if (!setup_->useForReconstructable(*p.first) || !setup_->reconstructable(p.second)) + if (!setup.useForReconstructable(*p.first) || !setup.reconstructable(p.second)) continue; reconstructable.insert(p.first, p.second); - if (setup_->useForAlgEff(*p.first)) + if (setup.useForAlgEff(*p.first)) selection.insert(p.first, p.second); } iEvent.emplace(putTokenReconstructable_, std::move(reconstructable)); diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h b/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h index a6c1e92513f9d..da5372e2a1822 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h +++ b/SimTracker/TrackTriggerAssociation/plugins/TTClusterAssociator.h @@ -47,9 +47,6 @@ class TTClusterAssociator : public edm::stream::EDProducer<> { /// Constructors explicit TTClusterAssociator(const edm::ParameterSet& iConfig); - /// Destructor - ~TTClusterAssociator() override; - private: /// Data members edm::Handle > thePixelDigiSimLinkHandle_; @@ -64,8 +61,6 @@ class TTClusterAssociator : public edm::stream::EDProducer<> { edm::ESGetToken theTrackerGeometryToken_; /// Mandatory methods - void beginRun(const edm::Run& run, const edm::EventSetup& iSetup) override; - void endRun(const edm::Run& run, const edm::EventSetup& iSetup) override; void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; }; /// Close class @@ -93,23 +88,11 @@ TTClusterAssociator::TTClusterAssociator(const edm::ParameterSet& iConfig) { } theTrackerGeometryToken_ = esConsumes(); -} - -/// Destructor -template -TTClusterAssociator::~TTClusterAssociator() {} -/// Begin run -template -void TTClusterAssociator::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { /// Print some information when loaded edm::LogInfo("TTClusterAssociator< ") << templateNameFinder() << " > loaded."; } -/// End run -template -void TTClusterAssociator::endRun(const edm::Run& run, const edm::EventSetup& iSetup) {} - /// Implement the producer template <> void TTClusterAssociator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup); diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h b/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h index 1799fca4e867b..f43c6a9fd5a6d 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h +++ b/SimTracker/TrackTriggerAssociation/plugins/TTStubAssociator.h @@ -48,9 +48,6 @@ class TTStubAssociator : public edm::stream::EDProducer<> { /// Constructors explicit TTStubAssociator(const edm::ParameterSet& iConfig); - /// Destructor - ~TTStubAssociator() override; - private: /// Data members std::vector ttStubsInputTags_; @@ -63,8 +60,6 @@ class TTStubAssociator : public edm::stream::EDProducer<> { edm::ESGetToken theTrackerTopologyToken_; /// Mandatory methods - void beginRun(const edm::Run& run, const edm::EventSetup& iSetup) override; - void endRun(const edm::Run& run, const edm::EventSetup& iSetup) override; void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; }; /// Close class @@ -94,23 +89,11 @@ TTStubAssociator::TTStubAssociator(const edm::ParameterSet& iConfig) { theTrackerGeometryToken_ = esConsumes(); theTrackerTopologyToken_ = esConsumes(); -} - -/// Destructor -template -TTStubAssociator::~TTStubAssociator() {} -/// Begin run -template -void TTStubAssociator::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { /// Print some information when loaded edm::LogInfo("TTStubAssociator< ") << templateNameFinder() << " > loaded."; } -/// End run -template -void TTStubAssociator::endRun(const edm::Run& run, const edm::EventSetup& iSetup) {} - /// Implement the producer template <> void TTStubAssociator::produce(edm::Event& iEvent, const edm::EventSetup& iSetup); diff --git a/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h b/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h index a936057ae03c6..0c1a507a07006 100644 --- a/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h +++ b/SimTracker/TrackTriggerAssociation/plugins/TTTrackAssociator.h @@ -59,8 +59,6 @@ class TTTrackAssociator : public edm::stream::EDProducer<> { bool TTTrackAllowOneFalse2SStub; /// Mandatory methods - void beginRun(const edm::Run& run, const edm::EventSetup& iSetup) override; - void endRun(const edm::Run& run, const edm::EventSetup& iSetup) override; void produce(edm::Event& iEvent, const edm::EventSetup& iSetup) override; }; /// Close class @@ -90,22 +88,13 @@ TTTrackAssociator::TTTrackAssociator(const edm::ParameterSet& iConfig) { produces >(iTag.instance()); } -} - -/// Destructor -template -TTTrackAssociator::~TTTrackAssociator() {} - -/// Begin run -template -void TTTrackAssociator::beginRun(const edm::Run& run, const edm::EventSetup& iSetup) { /// Print some information when loaded edm::LogInfo("TTStubAssociator< ") << "TTTrackAssociator< " << templateNameFinder() << " > loaded."; } -/// End run +/// Destructor template -void TTTrackAssociator::endRun(const edm::Run& run, const edm::EventSetup& iSetup) {} +TTTrackAssociator::~TTTrackAssociator() {} /// Implement the producer template <> diff --git a/SimTransport/PPSProtonTransport/python/PPSTransportESSources_cfi.py b/SimTransport/PPSProtonTransport/python/PPSTransportESSources_cfi.py index 409420fac930c..7e6afe9b0b041 100644 --- a/SimTransport/PPSProtonTransport/python/PPSTransportESSources_cfi.py +++ b/SimTransport/PPSProtonTransport/python/PPSTransportESSources_cfi.py @@ -3,7 +3,7 @@ # beam optics from CondCore.CondDB.CondDB_cfi import * from CalibPPS.ESProducers.ctppsBeamParametersFromLHCInfoESSource_cfi import * -from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cff import * +from CalibPPS.ESProducers.ctppsInterpolatedOpticalFunctionsESSource_cfi import * ctppsInterpolatedOpticalFunctionsESSource.lhcInfoLabel = "" """ diff --git a/TauAnalysis/MCEmbeddingTools/plugins/DYToMuMuGenFilter.cc b/TauAnalysis/MCEmbeddingTools/plugins/DYToMuMuGenFilter.cc index 8bb153d2c67c6..a5206e56c9e6b 100644 --- a/TauAnalysis/MCEmbeddingTools/plugins/DYToMuMuGenFilter.cc +++ b/TauAnalysis/MCEmbeddingTools/plugins/DYToMuMuGenFilter.cc @@ -15,25 +15,17 @@ class DYToMuMuGenFilter : public edm::stream::EDFilter<> { public: explicit DYToMuMuGenFilter(const edm::ParameterSet&); - ~DYToMuMuGenFilter() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; bool filter(edm::Event&, const edm::EventSetup&) override; - void endStream() override; edm::InputTag inputTag_; edm::EDGetTokenT genParticleCollection_; edm::Handle gen_handle; - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - // ----------member data --------------------------- }; @@ -42,8 +34,6 @@ DYToMuMuGenFilter::DYToMuMuGenFilter(const edm::ParameterSet& iConfig) { genParticleCollection_ = consumes(inputTag_); } -DYToMuMuGenFilter::~DYToMuMuGenFilter() {} - bool DYToMuMuGenFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) { iEvent.getByToken(genParticleCollection_, gen_handle); @@ -81,11 +71,6 @@ bool DYToMuMuGenFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup } return false; } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void DYToMuMuGenFilter::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void DYToMuMuGenFilter::endStream() {} // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void DYToMuMuGenFilter::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { diff --git a/TauAnalysis/MCEmbeddingTools/plugins/MuMuForEmbeddingSelector.cc b/TauAnalysis/MCEmbeddingTools/plugins/MuMuForEmbeddingSelector.cc index 42125b59fae4a..f5c0eefd45e3a 100644 --- a/TauAnalysis/MCEmbeddingTools/plugins/MuMuForEmbeddingSelector.cc +++ b/TauAnalysis/MCEmbeddingTools/plugins/MuMuForEmbeddingSelector.cc @@ -39,19 +39,11 @@ class MuMuForEmbeddingSelector : public edm::stream::EDProducer<> { public: explicit MuMuForEmbeddingSelector(const edm::ParameterSet&); - ~MuMuForEmbeddingSelector() override; static void fillDescriptions(edm::ConfigurationDescriptions& descriptions); private: - void beginStream(edm::StreamID) override; void produce(edm::Event&, const edm::EventSetup&) override; - void endStream() override; - - //virtual void beginRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void endRun(edm::Run const&, edm::EventSetup const&) override; - //virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; - //virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override; // ----------member data --------------------------- edm::EDGetTokenT> ZmumuCandidates_; @@ -87,11 +79,6 @@ MuMuForEmbeddingSelector::MuMuForEmbeddingSelector(const edm::ParameterSet& iCon //now do what ever other initialization is needed } -MuMuForEmbeddingSelector::~MuMuForEmbeddingSelector() { - // do anything here that needs to be done at destruction time - // (e.g. close files, deallocate resources etc.) -} - // // member functions // @@ -120,44 +107,6 @@ void MuMuForEmbeddingSelector::produce(edm::Event& iEvent, const edm::EventSetup iEvent.put(std::move(prod)); } -// ------------ method called once each stream before processing any runs, lumis or events ------------ -void MuMuForEmbeddingSelector::beginStream(edm::StreamID) {} - -// ------------ method called once each stream after processing all runs, lumis and events ------------ -void MuMuForEmbeddingSelector::endStream() {} - -// ------------ method called when starting to processes a run ------------ -/* -void -MuMuForEmbeddingSelector::beginRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a run ------------ -/* -void -MuMuForEmbeddingSelector::endRun(edm::Run const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when starting to processes a luminosity block ------------ -/* -void -MuMuForEmbeddingSelector::beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - -// ------------ method called when ending the processing of a luminosity block ------------ -/* -void -MuMuForEmbeddingSelector::endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) -{ -} -*/ - // ------------ method fills 'descriptions' with the allowed parameters for the module ------------ void MuMuForEmbeddingSelector::fillDescriptions(edm::ConfigurationDescriptions& descriptions) { //The following says we do not know what parameters are allowed so do no validation diff --git a/TrackingTools/PatternTools/interface/bqueue.h b/TrackingTools/PatternTools/interface/bqueue.h index 79e155c60ecd0..15211d533427f 100644 --- a/TrackingTools/PatternTools/interface/bqueue.h +++ b/TrackingTools/PatternTools/interface/bqueue.h @@ -110,6 +110,7 @@ namespace cmsutils { it = t2.it; return *this; } + _bqueue_itr(const _bqueue_itr &t2) = default; friend class bqueue; private: diff --git a/Utilities/ReleaseScripts/test/BuildFile.xml b/Utilities/ReleaseScripts/test/BuildFile.xml index c33943c32914e..9c17b56d1c695 100644 --- a/Utilities/ReleaseScripts/test/BuildFile.xml +++ b/Utilities/ReleaseScripts/test/BuildFile.xml @@ -1,4 +1,6 @@ + + diff --git a/Utilities/StaticAnalyzers/scripts/edm-global-class.py b/Utilities/StaticAnalyzers/scripts/edm-global-class.py index e9937bcc8e5bf..32968f024c713 100755 --- a/Utilities/StaticAnalyzers/scripts/edm-global-class.py +++ b/Utilities/StaticAnalyzers/scripts/edm-global-class.py @@ -135,6 +135,8 @@ visited.add(node) if node in Hdg: stack = [(node, iter(Hdg[node]))] + else: + stack = [] if node in Idg: Qdg = nx.dfs_preorder_nodes(Idg, node) for q in Qdg: diff --git a/Utilities/StaticAnalyzers/src/PsetExistsFCallChecker.cpp b/Utilities/StaticAnalyzers/src/PsetExistsFCallChecker.cpp index 9860624d1eafd..b3b0c81edfb85 100644 --- a/Utilities/StaticAnalyzers/src/PsetExistsFCallChecker.cpp +++ b/Utilities/StaticAnalyzers/src/PsetExistsFCallChecker.cpp @@ -46,6 +46,8 @@ namespace clangcms { const NamedDecl *PD = llvm::dyn_cast_or_null(AC->getDecl()); if (!PD) return; + if (!PD->hasAttr()) + return; std::string pname = support::getQualifiedName(*PD); Report(mname, pname, CCE); @@ -59,6 +61,8 @@ namespace clangcms { const NamedDecl *PD = llvm::dyn_cast_or_null(AC->getDecl()); if (!PD) return; + if (!PD->hasAttr()) + return; std::string mname = support::getQualifiedName(*MD); std::string pname = support::getQualifiedName(*PD); Report(mname, pname, CE); @@ -82,6 +86,8 @@ namespace clangcms { const NamedDecl *PD = llvm::dyn_cast_or_null(AC->getDecl()); if (!PD) return; + if (!PD->hasAttr()) + return; std::string pname = support::getQualifiedName(*PD); Report(mname, pname, CE); diff --git a/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc b/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc index 358c31f8f54e6..b93032e19164d 100644 --- a/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc +++ b/Validation/CTPPS/plugins/CTPPSHepMCDistributionPlotter.cc @@ -15,8 +15,7 @@ #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" -#include "CondFormats/RunInfo/interface/LHCInfo.h" -#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondTools/RunInfo/interface/LHCInfoCombined.h" #include "TFile.h" #include "TH1D.h" @@ -29,13 +28,20 @@ class CTPPSHepMCDistributionPlotter : public edm::one::EDAnalyzer<> { public: explicit CTPPSHepMCDistributionPlotter(const edm::ParameterSet &); + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + private: void analyze(const edm::Event &, const edm::EventSetup &) override; void endJob() override; - edm::EDGetTokenT tokenHepMC_; - edm::ESGetToken lhcInfoESToken_; - std::string outputFile_; + const edm::EDGetTokenT tokenHepMC_; + + const edm::ESGetToken lhcInfoToken_; + const edm::ESGetToken lhcInfoPerLSToken_; + const edm::ESGetToken lhcInfoPerFillToken_; + const bool useNewLHCInfo_; + + const std::string outputFile_; std::unique_ptr h_vtx_x_, h_vtx_y_, h_vtx_z_, h_vtx_t_; std::unique_ptr h_xi_, h_th_x_, h_th_y_; @@ -51,7 +57,12 @@ using namespace HepMC; CTPPSHepMCDistributionPlotter::CTPPSHepMCDistributionPlotter(const edm::ParameterSet &iConfig) : tokenHepMC_(consumes(iConfig.getParameter("tagHepMC"))), - lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + + lhcInfoToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + lhcInfoPerLSToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerLSLabel")))), + lhcInfoPerFillToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerFillLabel")))), + useNewLHCInfo_(iConfig.getParameter("useNewLHCInfo")), + outputFile_(iConfig.getParameter("outputFile")), h_vtx_x_(new TH1D("h_vtx_x", ";vtx_x (mm)", 100, 0., 0.)), @@ -65,9 +76,22 @@ CTPPSHepMCDistributionPlotter::CTPPSHepMCDistributionPlotter(const edm::Paramete //---------------------------------------------------------------------------------------------------- +void CTPPSHepMCDistributionPlotter::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + + desc.add("lhcInfoLabel", "")->setComment("label of the LHCInfo record"); + desc.add("lhcInfoPerLSLabel", "")->setComment("label of the LHCInfoPerLS record"); + desc.add("lhcInfoPerFillLabel", "")->setComment("label of the LHCInfoPerFill record"); + desc.add("useNewLHCInfo", false)->setComment("flag whether to use new LHCInfoPer* records or old LHCInfo"); + + desc.add("outputFile", "")->setComment("output file"); + + descriptions.add("ctppsHepMCDistributionPlotterDefault", desc); +} + void CTPPSHepMCDistributionPlotter::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // get conditions - const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); + LHCInfoCombined lhcInfoCombined(iSetup, lhcInfoPerLSToken_, lhcInfoPerFillToken_, lhcInfoToken_, useNewLHCInfo_); // get input edm::Handle hHepMC; @@ -98,7 +122,7 @@ void CTPPSHepMCDistributionPlotter::analyze(const edm::Event &iEvent, const edm: continue; const auto &mom = part->momentum(); - const double p_nom = lhcInfo.energy(); + const double p_nom = lhcInfoCombined.energy; if (mom.rho() / p_nom < 0.7) continue; diff --git a/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc b/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc index 8d80b0246ad0a..b90706c094726 100644 --- a/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc +++ b/Validation/CTPPS/plugins/CTPPSLHCInfoPlotter.cc @@ -86,7 +86,7 @@ void CTPPSLHCInfoPlotter::fillDescriptions(edm::ConfigurationDescriptions &descr desc.add("outputFile", "")->setComment("output file"); - descriptions.add("ctppsLHCInfoPlotter", desc); + descriptions.add("ctppsLHCInfoPlotterDefault", desc); } //---------------------------------------------------------------------------------------------------- diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc index cdef4aacf5f2a..ee88320d42151 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorData.cc @@ -12,8 +12,7 @@ #include "FWCore/Framework/interface/ESHandle.h" #include "FWCore/Framework/interface/ESWatcher.h" -#include "CondFormats/RunInfo/interface/LHCInfo.h" -#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondTools/RunInfo/interface/LHCInfoCombined.h" #include "CondFormats/DataRecord/interface/CTPPSInterpolatedOpticsRcd.h" #include "CondFormats/PPSObjects/interface/LHCInterpolatedOpticalFunctionsSetCollection.h" #include "CondFormats/DataRecord/interface/PPSAssociationCutsRcd.h" @@ -53,7 +52,10 @@ class CTPPSProtonReconstructionEfficiencyEstimatorData : public edm::one::EDAnal edm::EDGetTokenT tokenTracks_; edm::EDGetTokenT tokenRecoProtonsMultiRP_; - edm::ESGetToken lhcInfoESToken_; + const edm::ESGetToken lhcInfoToken_; + const edm::ESGetToken lhcInfoPerLSToken_; + const edm::ESGetToken lhcInfoPerFillToken_; + const bool useNewLHCInfo_; edm::ESGetToken opticsESToken_; edm::ESGetToken ppsAssociationCutsToken_; @@ -243,7 +245,11 @@ CTPPSProtonReconstructionEfficiencyEstimatorData::CTPPSProtonReconstructionEffic tokenRecoProtonsMultiRP_( consumes(iConfig.getParameter("tagRecoProtonsMultiRP"))), - lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + lhcInfoToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + lhcInfoPerLSToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerLSLabel")))), + lhcInfoPerFillToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerFillLabel")))), + useNewLHCInfo_(iConfig.getParameter("useNewLHCInfo")), + opticsESToken_(esConsumes(ESInputTag("", iConfig.getParameter("opticsLabel")))), ppsAssociationCutsToken_( esConsumes(ESInputTag("", iConfig.getParameter("ppsAssociationCutsLabel")))), @@ -283,7 +289,10 @@ void CTPPSProtonReconstructionEfficiencyEstimatorData::fillDescriptions(edm::Con desc.add("tagTracks", edm::InputTag())->setComment("input tag for local lite tracks"); desc.add("tagRecoProtonsMultiRP", edm::InputTag())->setComment("input tag for multi-RP reco protons"); - desc.add("lhcInfoLabel", "")->setComment("label of LHCInfo data"); + desc.add("lhcInfoLabel", "")->setComment("label of the LHCInfo record"); + desc.add("lhcInfoPerLSLabel", "")->setComment("label of the LHCInfoPerLS record"); + desc.add("lhcInfoPerFillLabel", "")->setComment("label of the LHCInfoPerFill record"); + desc.add("useNewLHCInfo", false)->setComment("flag whether to use new LHCInfoPer* records or old LHCInfo"); desc.add("opticsLabel", "")->setComment("label of optics data"); desc.add("ppsAssociationCutsLabel", "")->setComment("label of PPSAssociationCuts data"); @@ -311,7 +320,7 @@ void CTPPSProtonReconstructionEfficiencyEstimatorData::fillDescriptions(edm::Con desc.addUntracked("verbosity", 0)->setComment("verbosity level"); - descriptions.add("ctppsProtonReconstructionEfficiencyEstimatorData", desc); + descriptions.add("ctppsProtonReconstructionEfficiencyEstimatorDataDefault", desc); } //---------------------------------------------------------------------------------------------------- @@ -321,7 +330,8 @@ void CTPPSProtonReconstructionEfficiencyEstimatorData::analyze(const edm::Event std::ostringstream os; // get conditions - const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); + const LHCInfoCombined lhcInfoCombined( + iSetup, lhcInfoPerLSToken_, lhcInfoPerFillToken_, lhcInfoToken_, useNewLHCInfo_); const auto &opticalFunctions = iSetup.getData(opticsESToken_); const auto &ppsAssociationCuts = iSetup.getData(ppsAssociationCutsToken_); @@ -660,8 +670,10 @@ void CTPPSProtonReconstructionEfficiencyEstimatorData::analyze(const edm::Event evp.idx_N = i; evp.idx_F = j; - evp.x_cut = ass_cut.isSatisfied(ass_cut.qX, tr_i.x(), tr_i.y(), lhcInfo.crossingAngle(), tr_i.x() - tr_j.x()); - evp.y_cut = ass_cut.isSatisfied(ass_cut.qY, tr_i.x(), tr_i.y(), lhcInfo.crossingAngle(), tr_i.y() - tr_j.y()); + evp.x_cut = + ass_cut.isSatisfied(ass_cut.qX, tr_i.x(), tr_i.y(), lhcInfoCombined.crossingAngle(), tr_i.x() - tr_j.x()); + evp.y_cut = + ass_cut.isSatisfied(ass_cut.qY, tr_i.x(), tr_i.y(), lhcInfoCombined.crossingAngle(), tr_i.y() - tr_j.y()); evp.match = evp.x_cut && evp.y_cut; diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc index e415b13ac01bf..07772a66c42df 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionEfficiencyEstimatorMC.cc @@ -12,8 +12,7 @@ #include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" -#include "CondFormats/RunInfo/interface/LHCInfo.h" -#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondTools/RunInfo/interface/LHCInfoCombined.h" #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" @@ -40,6 +39,8 @@ class CTPPSProtonReconstructionEfficiencyEstimatorMC : public edm::one::EDAnalyz public: explicit CTPPSProtonReconstructionEfficiencyEstimatorMC(const edm::ParameterSet &); + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + private: void analyze(const edm::Event &, const edm::EventSetup &) override; void endJob() override; @@ -53,7 +54,10 @@ class CTPPSProtonReconstructionEfficiencyEstimatorMC : public edm::one::EDAnalyz edm::EDGetTokenT tokenRecoProtonsMultiRP_; - edm::ESGetToken lhcInfoESToken_; + const edm::ESGetToken lhcInfoToken_; + const edm::ESGetToken lhcInfoPerLSToken_; + const edm::ESGetToken lhcInfoPerFillToken_; + const bool useNewLHCInfo_; unsigned int rpId_45_N_, rpId_45_F_; unsigned int rpId_56_N_, rpId_56_F_; @@ -103,7 +107,11 @@ CTPPSProtonReconstructionEfficiencyEstimatorMC::CTPPSProtonReconstructionEfficie tracksToken_(consumes(iConfig.getParameter("tagTracks"))), tokenRecoProtonsMultiRP_( consumes(iConfig.getParameter("tagRecoProtonsMultiRP"))), - lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + + lhcInfoToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + lhcInfoPerLSToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerLSLabel")))), + lhcInfoPerFillToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerFillLabel")))), + useNewLHCInfo_(iConfig.getParameter("useNewLHCInfo")), rpId_45_N_(iConfig.getParameter("rpId_45_N")), rpId_45_F_(iConfig.getParameter("rpId_45_F")), @@ -128,11 +136,37 @@ CTPPSProtonReconstructionEfficiencyEstimatorMC::CTPPSProtonReconstructionEfficie //---------------------------------------------------------------------------------------------------- +void CTPPSProtonReconstructionEfficiencyEstimatorMC::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + + desc.add("tagTracks", edm::InputTag())->setComment("input tag for local lite tracks"); + desc.add("tagRecoProtonsMultiRP", edm::InputTag())->setComment("input tag for multi-RP reco protons"); + + desc.add("lhcInfoLabel", "")->setComment("label of the LHCInfo record"); + desc.add("lhcInfoPerLSLabel", "")->setComment("label of the LHCInfoPerLS record"); + desc.add("lhcInfoPerFillLabel", "")->setComment("label of the LHCInfoPerFill record"); + desc.add("useNewLHCInfo", false)->setComment("flag whether to use new LHCInfoPer* records or old LHCInfo"); + + desc.add("rpId_45_N", 0)->setComment("decimal RP id for 45 near"); + desc.add("rpId_45_F", 0)->setComment("decimal RP id for 45 far"); + desc.add("rpId_56_N", 0)->setComment("decimal RP id for 56 near"); + desc.add("rpId_56_F", 0)->setComment("decimal RP id for 56 far"); + + desc.add("outputFile", "output.root")->setComment("output file name"); + + desc.addUntracked("verbosity", 0)->setComment("verbosity level"); + + descriptions.add("ctppsProtonReconstructionEfficiencyEstimatorMCDefault", desc); +} + +//---------------------------------------------------------------------------------------------------- + void CTPPSProtonReconstructionEfficiencyEstimatorMC::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { std::ostringstream os; // get conditions - const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); + const LHCInfoCombined lhcInfoCombined( + iSetup, lhcInfoPerLSToken_, lhcInfoPerFillToken_, lhcInfoToken_, useNewLHCInfo_); // get input edm::Handle hHepMCAfterSmearing; @@ -184,7 +218,7 @@ void CTPPSProtonReconstructionEfficiencyEstimatorMC::analyze(const edm::Event &i info.arm = (mom.z() > 0.) ? 0 : 1; - const double p_nom = lhcInfo.energy(); + const double p_nom = lhcInfoCombined.energy; info.xi = (p_nom - mom.rho()) / p_nom; particleInfo[part->barcode()] = std::move(info); diff --git a/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc b/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc index 686d0e2ade00c..647cc426083eb 100644 --- a/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc +++ b/Validation/CTPPS/plugins/CTPPSProtonReconstructionSimulationValidator.cc @@ -12,8 +12,7 @@ #include "DataFormats/CTPPSDetId/interface/CTPPSDetId.h" -#include "CondFormats/RunInfo/interface/LHCInfo.h" -#include "CondFormats/DataRecord/interface/LHCInfoRcd.h" +#include "CondTools/RunInfo/interface/LHCInfoCombined.h" #include "SimDataFormats/GeneratorProducts/interface/HepMCProduct.h" @@ -38,6 +37,8 @@ class CTPPSProtonReconstructionSimulationValidator : public edm::one::EDAnalyzer public: explicit CTPPSProtonReconstructionSimulationValidator(const edm::ParameterSet &); + static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + private: void analyze(const edm::Event &, const edm::EventSetup &) override; void endJob() override; @@ -47,7 +48,7 @@ class CTPPSProtonReconstructionSimulationValidator : public edm::one::EDAnalyzer const reco::ForwardProton &rec_pr, const HepMC::FourVector &vtx, const HepMC::FourVector &mom, - const LHCInfo &lhcInfo); + const double energy); edm::EDGetTokenT tokenHepMCBeforeSmearing_; edm::EDGetTokenT tokenHepMCAfterSmearing_; @@ -55,7 +56,10 @@ class CTPPSProtonReconstructionSimulationValidator : public edm::one::EDAnalyzer edm::EDGetTokenT tokenRecoProtonsSingleRP_; edm::EDGetTokenT tokenRecoProtonsMultiRP_; - edm::ESGetToken lhcInfoESToken_; + const edm::ESGetToken lhcInfoToken_; + const edm::ESGetToken lhcInfoPerLSToken_; + const edm::ESGetToken lhcInfoPerFillToken_; + const bool useNewLHCInfo_; std::string outputFile_; @@ -201,14 +205,35 @@ CTPPSProtonReconstructionSimulationValidator::CTPPSProtonReconstructionSimulatio consumes(iConfig.getParameter("tagRecoProtonsSingleRP"))), tokenRecoProtonsMultiRP_( consumes(iConfig.getParameter("tagRecoProtonsMultiRP"))), - lhcInfoESToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + lhcInfoToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoLabel")))), + lhcInfoPerLSToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerLSLabel")))), + lhcInfoPerFillToken_(esConsumes(ESInputTag("", iConfig.getParameter("lhcInfoPerFillLabel")))), + useNewLHCInfo_(iConfig.getParameter("useNewLHCInfo")), outputFile_(iConfig.getParameter("outputFile")) {} //---------------------------------------------------------------------------------------------------- +void CTPPSProtonReconstructionSimulationValidator::fillDescriptions(edm::ConfigurationDescriptions &descriptions) { + edm::ParameterSetDescription desc; + + desc.add("lhcInfoLabel", "")->setComment("label of the LHCInfo record"); + desc.add("lhcInfoPerLSLabel", "")->setComment("label of the LHCInfoPerLS record"); + desc.add("lhcInfoPerFillLabel", "")->setComment("label of the LHCInfoPerFill record"); + desc.add("useNewLHCInfo", false)->setComment("flag whether to use new LHCInfoPer* records or old LHCInfo"); + + desc.add("outputFile", "output.root")->setComment("output file name"); + + desc.addUntracked("verbosity", 0)->setComment("verbosity level"); + + descriptions.add("ctppsProtonReconstructionSimulationValidatorDefault", desc); +} + +//---------------------------------------------------------------------------------------------------- + void CTPPSProtonReconstructionSimulationValidator::analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) { // get conditions - const auto &lhcInfo = iSetup.getData(lhcInfoESToken_); + const LHCInfoCombined lhcInfoCombined( + iSetup, lhcInfoPerLSToken_, lhcInfoPerFillToken_, lhcInfoToken_, useNewLHCInfo_); // get input edm::Handle hHepMCBeforeSmearing; @@ -319,7 +344,7 @@ void CTPPSProtonReconstructionSimulationValidator::analyze(const edm::Event &iEv if (rec_pr.method() == reco::ForwardProton::ReconstructionMethod::multiRP) meth_idx = 1; - fillPlots(meth_idx, idx, rec_pr, vtx, mom, lhcInfo); + fillPlots(meth_idx, idx, rec_pr, vtx, mom, lhcInfoCombined.energy); } } @@ -355,8 +380,8 @@ void CTPPSProtonReconstructionSimulationValidator::fillPlots(unsigned int meth_i const reco::ForwardProton &rec_pr, const HepMC::FourVector &vtx, const HepMC::FourVector &mom, - const LHCInfo &lhcInfo) { - const double p_nom = lhcInfo.energy(); + const double energy) { + const double p_nom = energy; const double xi_simu = (p_nom - mom.rho()) / p_nom; const double th_x_simu = mom.x() / mom.rho(); const double th_y_simu = mom.y() / mom.rho(); diff --git a/Validation/CTPPS/python/ctppsHepMCDistributionPlotter_cfi.py b/Validation/CTPPS/python/ctppsHepMCDistributionPlotter_cfi.py new file mode 100644 index 0000000000000..28baf6954a35b --- /dev/null +++ b/Validation/CTPPS/python/ctppsHepMCDistributionPlotter_cfi.py @@ -0,0 +1,8 @@ +from Validation.CTPPS.CTPPSHepMCDistributionPlotterDefault_cfi import CTPPSHepMCDistributionPlotterDefault as _CTPPSHepMCDistributionPlotterDefault +CTPPSHepMCDistributionPlotter = _CTPPSHepMCDistributionPlotterDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(CTPPSHepMCDistributionPlotter, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(CTPPSHepMCDistributionPlotter, useNewLHCInfo = False) diff --git a/Validation/CTPPS/python/ctppsLHCInfoPlotter_cff.py b/Validation/CTPPS/python/ctppsLHCInfoPlotter_cff.py deleted file mode 100644 index 66f0c853de77c..0000000000000 --- a/Validation/CTPPS/python/ctppsLHCInfoPlotter_cff.py +++ /dev/null @@ -1,3 +0,0 @@ -from Validation.CTPPS.ctppsLHCInfoPlotter_cfi import * -from Configuration.Eras.Modifier_run3_common_cff import run3_common -run3_common.toModify(ctppsLHCInfoPlotter, useNewLHCInfo = True) \ No newline at end of file diff --git a/Validation/CTPPS/python/ctppsLHCInfoPlotter_cfi.py b/Validation/CTPPS/python/ctppsLHCInfoPlotter_cfi.py new file mode 100644 index 0000000000000..4b8f96416747d --- /dev/null +++ b/Validation/CTPPS/python/ctppsLHCInfoPlotter_cfi.py @@ -0,0 +1,8 @@ +from Validation.CTPPS.ctppsLHCInfoPlotterDefault_cfi import ctppsLHCInfoPlotterDefault as _ctppsLHCInfoPlotterDefault +ctppsLHCInfoPlotter = _ctppsLHCInfoPlotterDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsLHCInfoPlotter, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsLHCInfoPlotter, useNewLHCInfo = False) diff --git a/Validation/CTPPS/python/ctppsProtonReconstructionEfficiencyEstimatorData_cfi.py b/Validation/CTPPS/python/ctppsProtonReconstructionEfficiencyEstimatorData_cfi.py new file mode 100644 index 0000000000000..47d2360e623c3 --- /dev/null +++ b/Validation/CTPPS/python/ctppsProtonReconstructionEfficiencyEstimatorData_cfi.py @@ -0,0 +1,8 @@ +from Validation.CTPPS.ctppsProtonReconstructionEfficiencyEstimatorDataDefault_cfi import ctppsProtonReconstructionEfficiencyEstimatorDataDefault as _ctppsProtonReconstructionEfficiencyEstimatorDataDefault +ctppsProtonReconstructionEfficiencyEstimatorData = _ctppsProtonReconstructionEfficiencyEstimatorDataDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsProtonReconstructionEfficiencyEstimatorData, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsProtonReconstructionEfficiencyEstimatorData, useNewLHCInfo = False) diff --git a/Validation/CTPPS/python/ctppsProtonReconstructionEfficiencyEstimatorMC_cfi.py b/Validation/CTPPS/python/ctppsProtonReconstructionEfficiencyEstimatorMC_cfi.py new file mode 100644 index 0000000000000..4aa239bd04c70 --- /dev/null +++ b/Validation/CTPPS/python/ctppsProtonReconstructionEfficiencyEstimatorMC_cfi.py @@ -0,0 +1,8 @@ +from Validation.CTPPS.ctppsProtonReconstructionEfficiencyEstimatorMCDefault_cfi import ctppsProtonReconstructionEfficiencyEstimatorMCDefault as _ctppsProtonReconstructionEfficiencyEstimatorMCDefault +ctppsProtonReconstructionEfficiencyEstimatorMC = ctppsProtonReconstructionEfficiencyEstimatorMCDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsProtonReconstructionEfficiencyEstimatorMC, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsProtonReconstructionEfficiencyEstimatorMC, useNewLHCInfo = False) diff --git a/Validation/CTPPS/python/ctppsProtonReconstructionSimulationValidator_cfi.py b/Validation/CTPPS/python/ctppsProtonReconstructionSimulationValidator_cfi.py new file mode 100644 index 0000000000000..e1c1b4ddee8d9 --- /dev/null +++ b/Validation/CTPPS/python/ctppsProtonReconstructionSimulationValidator_cfi.py @@ -0,0 +1,8 @@ +from Validation.CTPPS.ctppsProtonReconstructionSimulationValidatorDefault_cfi import ctppsProtonReconstructionSimulationValidatorDefault as _ctppsProtonReconstructionSimulationValidatorDefault +ctppsProtonReconstructionSimulationValidator = ctppsProtonReconstructionSimulationValidatorDefault.clone() + +from Configuration.Eras.Modifier_run3_common_cff import run3_common +run3_common.toModify(ctppsProtonReconstructionSimulationValidator, useNewLHCInfo = True) + +from Configuration.Eras.Modifier_ctpps_directSim_cff import ctpps_directSim +ctpps_directSim.toModify(ctppsProtonReconstructionSimulationValidator, useNewLHCInfo = False) diff --git a/Validation/CTPPS/test/simu/run_multiple b/Validation/CTPPS/test/simu/run_multiple index fa9e6a2a8fff2..34cc9042cb851 100755 --- a/Validation/CTPPS/test/simu/run_multiple +++ b/Validation/CTPPS/test/simu/run_multiple @@ -20,7 +20,8 @@ pids="" function RunOne() { local config="$1" - local era="$2" + local era_mod_path="$2" + local era="$3" local cfg="simu_${config}_cfg.py" local log="simu_${config}.log" @@ -29,6 +30,7 @@ function RunOne() local out_protons="simu_${config}_protons.root" cat "$inputDir/template_cfg.py" | sed "\ + s|\$ERA_MOD_PATH|$era_mod_path|;\ s|\$ERA|$era|;\ s|\$CONFIG|$config|;\ s|\$N_EVENTS|$n_events|;\ @@ -43,13 +45,13 @@ function RunOne() #---------------------------------------------------------------------------------------------------- -RunOne "2016" "Run2_2016" +RunOne "2016" "Configuration.Eras" "Run2_2016" -RunOne "2017" "Run2_2017" +RunOne "2017" "Configuration.Eras" "Run2_2017" -RunOne "2018" "Run2_2018" +RunOne "2018" "Configuration.Eras" "Run2_2018" -RunOne "2022" "Run3" +RunOne "2022" "Configuration.ProcessModifiers" "Run3_CTPPS_directSim" rc=0 for pid in $pids diff --git a/Validation/CTPPS/test/simu/template_cfg.py b/Validation/CTPPS/test/simu/template_cfg.py index 5587411a833b9..030f071056534 100644 --- a/Validation/CTPPS/test/simu/template_cfg.py +++ b/Validation/CTPPS/test/simu/template_cfg.py @@ -1,10 +1,10 @@ import FWCore.ParameterSet.Config as cms -from Configuration.Eras.Era_$ERA_cff import * +from $ERA_MOD_PATH.Era_$ERA_cff import * process = cms.Process('CTPPSTest', $ERA) process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') -process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cff') +process.load('Validation.CTPPS.ctppsLHCInfoPlotter_cfi') process.load('Configuration.Generator.randomXiThetaGunProducer_cfi') process.load("CondCore.CondDB.CondDB_cfi") @@ -32,15 +32,8 @@ process.CondDB, toGet = cms.VPSet(cms.PSet( record = cms.string('CTPPSPixelAnalysisMaskRcd'), - tag = cms.string("CTPPSPixelAnalysisMask_Run3_v1_hlt")), - cms.PSet( - record = cms.string('LHCInfoPerLSRcd'), - tag = cms.string("LHCInfoPerLS_endFill_Run3_mc_v1")), - cms.PSet( - record = cms.string('LHCInfoPerFillRcd'), - tag = cms.string("LHCInfoPerFill_endFill_Run3_mc_v1")), - ) -) + tag = cms.string("CTPPSPixelAnalysisMask_Run3_v1_hlt")) + )) # random seeds process.RandomNumberGeneratorService = cms.Service("RandomNumberGeneratorService", diff --git a/Validation/HGCalValidation/python/hgcalValidationTPG_cfi.py b/Validation/HGCalValidation/python/hgcalValidationTPG_cfi.py index 379eaa5849e33..330e144688307 100644 --- a/Validation/HGCalValidation/python/hgcalValidationTPG_cfi.py +++ b/Validation/HGCalValidation/python/hgcalValidationTPG_cfi.py @@ -2,7 +2,7 @@ from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer from L1Trigger.L1THGCal.egammaIdentification import egamma_identification_histomax -hgcalTrigPrimValidation = DQMEDAnalyzer( +L1THGCalTrigPrimValidation = DQMEDAnalyzer( "HGCalTriggerValidator", TriggerCells = cms.InputTag('l1tHGCalConcentratorProducer:HGCalConcentratorProcessorSelection'), Clusters = cms.InputTag('l1tHGCalBackEndLayer1Producer:HGCalBackendLayer1Processor2DClustering'), diff --git a/Validation/RecoTrack/plugins/BuildFile.xml b/Validation/RecoTrack/plugins/BuildFile.xml index 089a3c17ed76b..e16d946a28f6b 100644 --- a/Validation/RecoTrack/plugins/BuildFile.xml +++ b/Validation/RecoTrack/plugins/BuildFile.xml @@ -22,6 +22,7 @@ + diff --git a/Validation/RecoTrack/plugins/TrackingNtuple.cc b/Validation/RecoTrack/plugins/TrackingNtuple.cc index 647ad1dcc3f18..e5f5dbe7b4d96 100644 --- a/Validation/RecoTrack/plugins/TrackingNtuple.cc +++ b/Validation/RecoTrack/plugins/TrackingNtuple.cc @@ -55,6 +55,8 @@ #include "MagneticField/Engine/interface/MagneticField.h" #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" +#include "DataFormats/Phase2TrackerCluster/interface/Phase2TrackerCluster1D.h" + #include "DataFormats/SiPixelDetId/interface/PixelChannelIdentifier.h" #include "DataFormats/SiStripCluster/interface/SiStripClusterTools.h" #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHitCollection.h" @@ -492,6 +494,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer { using PixelMaskContainer = edm::ContainerMask>; using StripMaskContainer = edm::ContainerMask>; + using Phase2OTMaskContainer = edm::ContainerMask>; struct TPHitIndex { TPHitIndex(unsigned int tp = 0, unsigned int simHit = 0, float to = 0, unsigned int id = 0) @@ -681,6 +684,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer { std::vector>> pixelUseMaskTokens_; std::vector>> stripUseMaskTokens_; + std::vector>> ph2OTUseMaskTokens_; std::string builderName_; const bool includeSeeds_; @@ -1287,6 +1291,7 @@ class TrackingNtuple : public edm::one::EDAnalyzer { std::vector ph2_radL; //http://cmslxr.fnal.gov/lxr/source/DataFormats/GeometrySurface/interface/MediumProperties.h std::vector ph2_bbxi; + std::vector ph2_usedMask; //////////////////// // invalid (missing/inactive/etc) hits @@ -1490,6 +1495,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) auto const& maskVPset = iConfig.getUntrackedParameterSetVector("clusterMasks"); pixelUseMaskTokens_.reserve(maskVPset.size()); stripUseMaskTokens_.reserve(maskVPset.size()); + ph2OTUseMaskTokens_.reserve(maskVPset.size()); for (auto const& mask : maskVPset) { auto index = mask.getUntrackedParameter("index"); assert(index < 64); @@ -1498,6 +1504,9 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) if (includeStripHits_) stripUseMaskTokens_.emplace_back( index, consumes(mask.getUntrackedParameter("src"))); + if (includePhase2OTHits_) + ph2OTUseMaskTokens_.emplace_back( + index, consumes(mask.getUntrackedParameter("src"))); } } @@ -1872,7 +1881,7 @@ TrackingNtuple::TrackingNtuple(const edm::ParameterSet& iConfig) t->Branch("ph2_zx", &ph2_zx); t->Branch("ph2_radL", &ph2_radL); t->Branch("ph2_bbxi", &ph2_bbxi); - t->Branch("ph2_bbxi", &ph2_bbxi); + t->Branch("ph2_usedMask", &ph2_usedMask); } //invalid hits t->Branch("inv_isBarrel", &inv_isBarrel); @@ -2299,6 +2308,7 @@ void TrackingNtuple::clearVariables() { ph2_zx.clear(); ph2_radL.clear(); ph2_bbxi.clear(); + ph2_usedMask.clear(); //invalid hits inv_isBarrel.clear(); inv_detId.clear(); @@ -3314,6 +3324,22 @@ void TrackingNtuple::fillPhase2OTHits(const edm::Event& iEvent, const TrackerTopology& tTopo, const SimHitRefKeyToIndex& simHitRefKeyToIndex, std::set& hitProductIds) { + std::vector> phase2OTMasks; + phase2OTMasks.reserve(ph2OTUseMaskTokens_.size()); + for (const auto& itoken : ph2OTUseMaskTokens_) { + edm::Handle aH; + iEvent.getByToken(itoken.second, aH); + phase2OTMasks.emplace_back(1 << itoken.first, aH.product()); + } + auto ph2OTUsedMask = [&phase2OTMasks](size_t key) { + uint64_t mask = 0; + for (auto const& m : phase2OTMasks) { + if (m.second->mask(key)) + mask |= m.first; + } + return mask; + }; + edm::Handle phase2OTHits; iEvent.getByToken(phase2OTRecHitToken_, phase2OTHits); for (auto it = phase2OTHits->begin(); it != phase2OTHits->end(); it++) { @@ -3349,6 +3375,7 @@ void TrackingNtuple::fillPhase2OTHits(const edm::Event& iEvent, ph2_zx.push_back(hit->globalPositionError().czx()); ph2_radL.push_back(hit->surface()->mediumProperties().radLen()); ph2_bbxi.push_back(hit->surface()->mediumProperties().xi()); + ph2_usedMask.push_back(ph2OTUsedMask(hit->firstClusterRef().key())); LogTrace("TrackingNtuple") << "phase2 OT cluster=" << key << " subdId=" << hitId.subdetId() << " lay=" << lay << " rawId=" << hitId.rawId() << " pos =" << hit->globalPosition(); diff --git a/Validation/RecoTrack/python/TrackValidation_cff.py b/Validation/RecoTrack/python/TrackValidation_cff.py index 7bc788fcb592c..5e0026ada5175 100644 --- a/Validation/RecoTrack/python/TrackValidation_cff.py +++ b/Validation/RecoTrack/python/TrackValidation_cff.py @@ -997,7 +997,7 @@ def _uniqueFirstLayers(layerList): trackValidatorsTrackingOnly.remove(trackValidatorGsfTracksStandalone) trackValidatorsTrackingOnly.replace(trackValidatorBHadronStandalone, trackValidatorBHadronTrackingOnly) -seedingDeepCore.toReplaceWith(trackValidatorsTrackingOnly, cms.Sequence( +(seedingDeepCore & ~fastSim).toReplaceWith(trackValidatorsTrackingOnly, cms.Sequence( trackValidatorsTrackingOnly.copy()+ trackValidatorJetCore+ trackValidatorJetCoreSeedingTrackingOnly