8 ROOT.gROOT.SetBatch(
True)
9 ROOT.PyConfig.IgnoreCommandLineOptions =
True 16 "CMSSW_6_2_0": {
"default":
"PRE_ST62_V8"},
17 "CMSSW_6_2_0_SLHC15": {
"UPG2019withGEM":
"DES19_62_V8",
"UPG2023SHNoTaper":
"DES23_62_V1"},
18 "CMSSW_6_2_0_SLHC17": {
"UPG2019withGEM":
"DES19_62_V8",
"UPG2023SHNoTaper":
"DES23_62_V1"},
19 "CMSSW_6_2_0_SLHC20": {
"UPG2019withGEM":
"DES19_62_V8",
"UPG2023SHNoTaper":
"DES23_62_V1_UPG2023SHNoTaper"},
20 "CMSSW_6_2_0_SLHC22": {
"UPG2023SHNoTaper":
"PH2_1K_FB_V6_UPG23SHNoTaper",
22 "2023GReco":
"PH2_1K_FB_V6_UPG23SHNoTaper",
"2023GRecoPU35":
"",
"2023GRecoPU140":
"",
"2023GRecoPU200":
"",
23 "2023tilted":
"PH2_1K_FB_V6_UPG23SHNoTaper",
"2023tiltedPU35":
"",
"2023tiltedPU140":
"",
"2023tiltedPU200":
""},
24 "CMSSW_6_2_0_SLHC26": {
"LHCCRefPU140":
"DES23_62_V1_LHCCRefPU140",
"LHCCRefPU200":
"DES23_62_V1_LHCCRefPU200",
26 "2023GReco":
"",
"2023GRecoPU35":
"",
"2023GRecoPU140":
"DES23_62_V1_LHCCRefPU140",
"2023GRecoPU200":
"DES23_62_V1_LHCCRefPU200",
27 "2023tilted":
"",
"2023tiltedPU35":
"",
"2023tiltedPU140":
"DES23_62_V1_LHCCRefPU140",
"2023tiltedPU200":
"DES23_62_V1_LHCCRefPU200"},
28 "CMSSW_6_2_0_SLHC27_phase1": {
"default":
"DES17_62_V8_UPG17"},
29 "CMSSW_7_0_0": {
"default":
"POSTLS170_V3",
"fullsim_50ns":
"POSTLS170_V4"},
30 "CMSSW_7_0_0_AlcaCSA14": {
"default":
"POSTLS170_V5_AlcaCSA14",
"fullsim_50ns":
"POSTLS170_V6_AlcaCSA14"},
31 "CMSSW_7_0_7_pmx": {
"default":
"PLS170_V7AN1",
"fullsim_50ns":
"PLS170_V6AN1"},
32 "CMSSW_7_0_9_patch3": {
"default":
"PLS170_V7AN2",
"fullsim_50ns":
"PLS170_V6AN2"},
33 "CMSSW_7_0_9_patch3_Premix": {
"default":
"PLS170_V7AN2",
"fullsim_50ns":
"PLS170_V6AN2"},
34 "CMSSW_7_1_0": {
"default":
"POSTLS171_V15",
"fullsim_50ns":
"POSTLS171_V16"},
35 "CMSSW_7_1_9": {
"default":
"POSTLS171_V17",
"fullsim_50ns":
"POSTLS171_V18"},
36 "CMSSW_7_1_9_patch2": {
"default":
"POSTLS171_V17",
"fullsim_50ns":
"POSTLS171_V18"},
37 "CMSSW_7_1_10_patch2": {
"default":
"MCRUN2_71_V1",
"fullsim_50ns":
"MCRUN2_71_V0"},
38 "CMSSW_7_2_0_pre5": {
"default":
"POSTLS172_V3",
"fullsim_50ns":
"POSTLS172_V4"},
39 "CMSSW_7_2_0_pre7": {
"default":
"PRE_LS172_V11",
"fullsim_50ns":
"PRE_LS172_V12"},
40 "CMSSW_7_2_0_pre8": {
"default":
"PRE_LS172_V15",
"fullsim_50ns":
"PRE_LS172_V16"},
41 "CMSSW_7_2_0": {
"default":
"PRE_LS172_V15",
"fullsim_50ns":
"PRE_LS172_V16"},
42 "CMSSW_7_2_0_PHYS14": {
"default":
"PHYS14_25_V1_Phys14"},
43 "CMSSW_7_2_2_patch1": {
"default":
"MCRUN2_72_V1",
"fullsim_50ns":
"MCRUN2_72_V0"},
44 "CMSSW_7_2_2_patch1_Fall14DR": {
"default":
"MCRUN2_72_V3_71XGENSIM"},
46 "CMSSW_7_3_0_pre1": {
"default":
"PRE_LS172_V15",
"fullsim_50ns":
"PRE_LS172_V16"},
48 "CMSSW_7_3_0_pre2": {
"default":
"MCRUN2_73_V1",
"fullsim_50ns":
"MCRUN2_73_V0"},
49 "CMSSW_7_3_0_pre3": {
"default":
"MCRUN2_73_V5",
"fullsim_50ns":
"MCRUN2_73_V4"},
50 "CMSSW_7_3_0": {
"default":
"MCRUN2_73_V7",
"fullsim_50ns":
"MCRUN2_73_V6"},
51 "CMSSW_7_3_0_71XGENSIM": {
"default":
"MCRUN2_73_V7_71XGENSIM"},
52 "CMSSW_7_3_0_71XGENSIM_FIXGT": {
"default":
"MCRUN2_73_V9_71XGENSIM_FIXGT"},
53 "CMSSW_7_3_1_patch1": {
"default":
"MCRUN2_73_V9",
"fastsim":
"MCRUN2_73_V7"},
54 "CMSSW_7_3_1_patch1_GenSim_7113": {
"default":
"MCRUN2_73_V9_GenSim_7113"},
55 "CMSSW_7_3_3": {
"default":
"MCRUN2_73_V11",
"fullsim_50ns":
"MCRUN2_73_V10",
"fastsim":
"MCRUN2_73_V13"},
56 "CMSSW_7_4_0_pre1": {
"default":
"MCRUN2_73_V5",
"fullsim_50ns":
"MCRUN2_73_V4"},
57 "CMSSW_7_4_0_pre2": {
"default":
"MCRUN2_73_V7",
"fullsim_50ns":
"MCRUN2_73_V6"},
58 "CMSSW_7_4_0_pre2_73XGENSIM": {
"default":
"MCRUN2_73_V7_73XGENSIM_Pythia6",
"fullsim_50ns":
"MCRUN2_73_V6_73XGENSIM_Pythia6"},
59 "CMSSW_7_4_0_pre5": {
"default":
"MCRUN2_73_V7",
"fullsim_50ns":
"MCRUN2_73_V6"},
60 "CMSSW_7_4_0_pre5_BS": {
"default":
"MCRUN2_73_V9_postLS1beamspot",
"fullsim_50ns":
"MCRUN2_73_V8_postLS1beamspot"},
61 "CMSSW_7_4_0_pre6": {
"default":
"MCRUN2_74_V1",
"fullsim_50ns":
"MCRUN2_74_V0"},
62 "CMSSW_7_4_0_pre8": {
"default":
"MCRUN2_74_V7",
"fullsim_25ns":
"MCRUN2_74_V5_AsympMinGT",
"fullsim_50ns":
"MCRUN2_74_V4_StartupMinGT"},
63 "CMSSW_7_4_0_pre8_minimal": {
"default":
"MCRUN2_74_V5_MinGT",
"fullsim_25ns":
"MCRUN2_74_V5_AsympMinGT",
"fullsim_50ns":
"MCRUN2_74_V4_StartupMinGT"},
64 "CMSSW_7_4_0_pre8_25ns_asymptotic": {
"default":
"MCRUN2_74_V7"},
65 "CMSSW_7_4_0_pre8_50ns_startup": {
"default":
"MCRUN2_74_V6"},
66 "CMSSW_7_4_0_pre8_50ns_asympref": {
"default":
"MCRUN2_74_V5A_AsympMinGT"},
67 "CMSSW_7_4_0_pre8_50ns_asymptotic": {
"default":
"MCRUN2_74_V7A_AsympGT"},
68 "CMSSW_7_4_0_pre8_ROOT6": {
"default":
"MCRUN2_74_V7"},
69 "CMSSW_7_4_0_pre8_pmx": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
70 "CMSSW_7_4_0_pre8_pmx_v2": {
"default":
"MCRUN2_74_V7_gs_pre7",
"fullsim_50ns":
"MCRUN2_74_V6_gs_pre7"},
71 "CMSSW_7_4_0_pre8_pmx_v3": {
"default":
"MCRUN2_74_V7_bis",
"fullsim_50ns":
"MCRUN2_74_V6_bis"},
72 "CMSSW_7_4_0_pre9": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
73 "CMSSW_7_4_0_pre9_ROOT6": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
74 "CMSSW_7_4_0_pre9_extended": {
"default":
"MCRUN2_74_V7_extended"},
75 "CMSSW_7_4_0": {
"default":
"MCRUN2_74_V7_gensim_740pre7",
"fullsim_50ns":
"MCRUN2_74_V6_gensim_740pre7",
"fastsim":
"MCRUN2_74_V7"},
76 "CMSSW_7_4_0_71XGENSIM": {
"default":
"MCRUN2_74_V7_GENSIM_7_1_15",
"fullsim_50ns":
"MCRUN2_74_V6_GENSIM_7_1_15"},
77 "CMSSW_7_4_0_71XGENSIM_PU": {
"default":
"MCRUN2_74_V7_gs7115_puProd",
"fullsim_50ns":
"MCRUN2_74_V6_gs7115_puProd"},
78 "CMSSW_7_4_0_71XGENSIM_PXworst": {
"default":
"MCRUN2_74_V7C_pxWorst_gs7115",
"fullsim_50ns":
"MCRUN2_74_V6A_pxWorst_gs7115"},
79 "CMSSW_7_4_0_71XGENSIM_PXbest": {
"default":
"MCRUN2_74_V7D_pxBest_gs7115",
"fullsim_50ns":
"MCRUN2_74_V6B_pxBest_gs7115"},
80 "CMSSW_7_4_0_pmx": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
81 "CMSSW_7_4_1": {
"default":
"MCRUN2_74_V9_gensim_740pre7",
"fullsim_50ns":
"MCRUN2_74_V8_gensim_740pre7",
"fastsim":
"MCRUN2_74_V9"},
82 "CMSSW_7_4_1_71XGENSIM": {
"default":
"MCRUN2_74_V9_gensim71X",
"fullsim_50ns":
"MCRUN2_74_V8_gensim71X"},
83 "CMSSW_7_4_1_extended": {
"default":
"MCRUN2_74_V9_extended"},
84 "CMSSW_7_4_3": {
"default":
"MCRUN2_74_V9",
"fullsim_50ns":
"MCRUN2_74_V8",
"fastsim":
"MCRUN2_74_V9",
"fastsim_25ns":
"MCRUN2_74_V9_fixMem"},
85 "CMSSW_7_4_3_extended": {
"default":
"MCRUN2_74_V9_ext",
"fastsim":
"MCRUN2_74_V9_fixMem"},
86 "CMSSW_7_4_3_pmx": {
"default":
"MCRUN2_74_V9_ext",
"fullsim_50ns":
"MCRUN2_74_V8",
"fastsim":
"MCRUN2_74_V9_fixMem"},
87 "CMSSW_7_4_3_patch1_unsch": {
"default":
"MCRUN2_74_V9_unsch",
"fullsim_50ns":
"MCRUN2_74_V8_unsch"},
88 "CMSSW_7_4_4": {
"default":
"MCRUN2_74_V9_38Tbis",
"fullsim_50ns":
"MCRUN2_74_V8_38Tbis"},
89 "CMSSW_7_4_4_0T": {
"default":
"MCRUN2_740TV1_0Tv2",
"fullsim_50ns":
"MCRUN2_740TV0_0TV2",
"fullsim_25ns":
"MCRUN2_740TV1_0TV2"},
90 "CMSSW_7_4_6_patch6": {
"default":
"MCRUN2_74_V9_scheduled",
"fullsim_50ns":
"MCRUN2_74_V8_scheduled"},
91 "CMSSW_7_4_6_patch6_unsch": {
"default":
"MCRUN2_74_V9",
"fullsim_50ns":
"MCRUN2_74_V8"},
92 "CMSSW_7_4_6_patch6_noCCC": {
"default":
"MCRUN2_74_V9_unsch_noCCC",
"fullsim_50ns":
"MCRUN2_74_V8_unsch_noCCC"},
93 "CMSSW_7_4_6_patch6_noCCC_v3": {
"default":
"MCRUN2_74_V9_unsch_noCCC_v3",
"fullsim_50ns":
"MCRUN2_74_V8_unsch_noCCC_v3"},
94 "CMSSW_7_4_6_patch6_BS": {
"default":
"74X_mcRun2_asymptotic_realisticBS_v0_2015Jul24",
"fullsim_50ns":
"74X_mcRun2_startup_realisticBS_v0_2015Jul24PU",
"fullsim_25ns":
"74X_mcRun2_asymptotic_realisticBS_v0_2015Jul24PU"},
95 "CMSSW_7_4_8_patch1_MT": {
"default":
"MCRUN2_74_V11_mulTrh",
"fullsim_50ns":
"MCRUN2_74_V10_mulTrh",},
96 "CMSSW_7_4_12": {
"default":
"74X_mcRun2_asymptotic_v2",
"fullsim_25ns":
"74X_mcRun2_asymptotic_v2_v2",
"fullsim_50ns":
"74X_mcRun2_startup_v2_v2"},
97 "CMSSW_7_5_0_pre1": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
98 "CMSSW_7_5_0_pre2": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
99 "CMSSW_7_5_0_pre3": {
"default":
"MCRUN2_74_V7",
"fullsim_50ns":
"MCRUN2_74_V6"},
100 "CMSSW_7_5_0_pre4": {
"default":
"MCRUN2_75_V1",
"fullsim_50ns":
"MCRUN2_75_V0"},
101 "CMSSW_7_5_0_pre5": {
"default":
"MCRUN2_75_V5",
"fullsim_50ns":
"MCRUN2_75_V4"},
102 "CMSSW_7_5_0_pre6": {
"default":
"75X_mcRun2_asymptotic_v1",
"fullsim_50ns":
"75X_mcRun2_startup_v1"},
103 "CMSSW_7_5_0": {
"default":
"75X_mcRun2_asymptotic_v1",
"fullsim_50ns":
"75X_mcRun2_startup_v1"},
104 "CMSSW_7_5_0_71XGENSIM": {
"default":
"75X_mcRun2_asymptotic_v1_gs7115",
"fullsim_50ns":
"75X_mcRun2_startup_v1_gs7115"},
105 "CMSSW_7_5_1": {
"default":
"75X_mcRun2_asymptotic_v3",
"fullsim_50ns":
"75X_mcRun2_startup_v3"},
106 "CMSSW_7_5_1_71XGENSIM": {
"default":
"75X_mcRun2_asymptotic_v3_gs7118",
"fullsim_50ns":
"75X_mcRun2_startup_v3_gs7118"},
107 "CMSSW_7_5_2": {
"default":
"75X_mcRun2_asymptotic_v5",
"fullsim_50ns":
"75X_mcRun2_startup_v4"},
108 "CMSSW_7_6_0_pre1": {
"default":
"75X_mcRun2_asymptotic_v1",
"fullsim_50ns":
"75X_mcRun2_startup_v1"},
109 "CMSSW_7_6_0_pre2": {
"default":
"75X_mcRun2_asymptotic_v2",
"fullsim_50ns":
"75X_mcRun2_startup_v2"},
110 "CMSSW_7_6_0_pre3": {
"default":
"75X_mcRun2_asymptotic_v2",
"fullsim_50ns":
"75X_mcRun2_startup_v2"},
111 "CMSSW_7_6_0_pre4": {
"default":
"76X_mcRun2_asymptotic_v1",
"fullsim_50ns":
"76X_mcRun2_startup_v1"},
112 "CMSSW_7_6_0_pre5": {
"default":
"76X_mcRun2_asymptotic_v1",
"fullsim_50ns":
"76X_mcRun2_startup_v1"},
113 "CMSSW_7_6_0_pre6": {
"default":
"76X_mcRun2_asymptotic_v4",
"fullsim_50ns":
"76X_mcRun2_startup_v4"},
114 "CMSSW_7_6_0_pre7": {
"default":
"76X_mcRun2_asymptotic_v5",
"fullsim_50ns":
"76X_mcRun2_startup_v5",
"fastsim":
"76X_mcRun2_asymptotic_v5_resub"},
115 "CMSSW_7_6_0": {
"default":
"76X_mcRun2_asymptotic_v11",
"fullsim_50ns":
"76X_mcRun2_startup_v11"},
116 "CMSSW_7_6_0_71XGENSIM": {
"default":
"76X_mcRun2_asymptotic_v11_gs7120p2rlBS",
"fullsim_50ns":
"76X_mcRun2_startup_v11_gs7120p2rlBS"},
117 "CMSSW_7_6_2": {
"default":
"76X_mcRun2_asymptotic_v12",
"fullsim_50ns":
"76X_mcRun2_startup_v11"},
118 "CMSSW_7_6_3_patch2_0T": {
"default":
"76X_mcRun2_0T_v1_0Tv1GT"},
119 "CMSSW_8_0_0_pre1": {
"default":
"76X_mcRun2_asymptotic_v11",
"fullsim_50ns":
"76X_mcRun2_startup_v11"},
120 "CMSSW_8_0_0_pre2": {
"default":
"76X_mcRun2_asymptotic_v12",
"fullsim_50ns":
"76X_mcRun2_startup_v11"},
121 "CMSSW_8_0_0_pre2_phase1": {
"default":
"76X_upgrade2017_design_v7"},
122 "CMSSW_8_0_0_pre2_phase1_rereco": {
"default":
"76X_upgrade2017_design_v7_rereco"},
123 "CMSSW_8_0_0_pre3_phase1": {
"default":
"76X_upgrade2017_design_v8"},
124 "CMSSW_8_0_0_pre3_phase1_pythia8": {
"default":
"76X_upgrade2017_design_v8_pythia8"},
125 "CMSSW_8_0_0_pre4": {
"default":
"76X_mcRun2_asymptotic_v13",
"fullsim_50ns":
"76X_mcRun2_startup_v12"},
126 "CMSSW_8_0_0_pre4_phase1": {
"default":
"76X_upgrade2017_design_v8_UPG17"},
127 "CMSSW_8_0_0_pre4_phase1_13TeV": {
"default":
"76X_upgrade2017_design_v8_UPG17"},
128 "CMSSW_8_0_0_pre4_ecal15fb": {
"default":
"80X_mcRun2_asymptotic_2016EcalTune_15fb_v0_ecal15fbm1"},
129 "CMSSW_8_0_0_pre4_ecal30fb": {
"default":
"80X_mcRun2_asymptotic_2016EcalTune_30fb_v0_ecal30fbm1"},
130 "CMSSW_8_0_0_pre5": {
"default":
"80X_mcRun2_asymptotic_v1",
"fullsim_50ns":
"80X_mcRun2_startup_v1"},
131 "CMSSW_8_0_0_pre5_phase1": {
"default":
"80X_upgrade2017_design_v1_UPG17"},
132 "CMSSW_8_0_0_pre6": {
"default":
"80X_mcRun2_asymptotic_v4"},
133 "CMSSW_8_0_0_pre6_phase1": {
"default":
"80X_upgrade2017_design_v3_UPG17"},
134 "CMSSW_8_0_0_pre6_MT": {
"default":
"80X_mcRun2_asymptotic_v4_multiCoreResub"},
135 "CMSSW_8_0_0": {
"default":
"80X_mcRun2_asymptotic_v4"},
136 "CMSSW_8_0_0_patch1_phase1": {
"default":
"80X_upgrade2017_design_v4_UPG17"},
137 "CMSSW_8_0_0_patch1_phase1_rereco": {
"default":
"80X_upgrade2017_design_v4_UPG17_rereco"},
138 "CMSSW_8_0_0_patch2": {
"default":
"80X_mcRun2_asymptotic_v5_refGT"},
139 "CMSSW_8_0_0_patch2_pixDynIneff": {
"default":
"80X_mcRun2_asymptotic_v5_2016PixDynIneff_targetGT"},
142 "CMSSW_8_0_0_patch2": {
"default":
"80X_mcRun2_asymptotic_v5_refGT_resub"},
143 "CMSSW_8_0_0_patch2_pixDynIneff": {
"default":
"80X_mcRun2_asymptotic_v5_2016PixDynIneff_targetGT_resub"},
144 "CMSSW_8_0_1": {
"default":
"80X_mcRun2_asymptotic_v6"},
145 "CMSSW_8_0_1_71XGENSIM": {
"default":
"80X_mcRun2_asymptotic_v6_gs7120p2"},
146 "CMSSW_8_0_1_gcc530": {
"default":
"80X_mcRun2_asymptotic_v6_gcc530"},
147 "CMSSW_8_0_3_71XGENSIM": {
"default":
"80X_mcRun2_asymptotic_2016_v3_gs7120p2NewGTv3"},
148 "CMSSW_8_0_3_71XGENSIM_hcal": {
"default":
"80X_mcRun2_asymptotic_2016_v3_gs71xNewGtHcalCust"},
149 "CMSSW_8_0_3_71XGENSIM_tec": {
"default":
"80X_mcRun2_asymptotic_SiStripBad_TEC_CL62_for2016_v1_mc_gs7120p2TrkCoolLoop"},
150 "CMSSW_8_0_5": {
"default":
"80X_mcRun2_asymptotic_v12_gs7120p2",
"fastsim":
"80X_mcRun2_asymptotic_v12"},
151 "CMSSW_8_0_5_pmx": {
"default":
"80X_mcRun2_asymptotic_v12_gs7120p2_resub",
"fastsim":
"80X_mcRun2_asymptotic_v12"},
152 "CMSSW_8_0_10": {
"default":
"80X_mcRun2_asymptotic_v14"},
153 "CMSSW_8_0_10_patch1_BS": {
"default":
"80X_mcRun2_asymptotic_RealisticBS_25ns_13TeV2016_v1_mc_realisticBS2016"},
154 "CMSSW_8_0_11": {
"default":
"80X_mcRun2_asymptotic_v14"},
155 "CMSSW_8_0_15": {
"default":
"80X_mcRun2_asymptotic_v16_gs7120p2",
"fastsim":
"80X_mcRun2_asymptotic_v16"},
156 "CMSSW_8_0_16": {
"default":
"80X_mcRun2_asymptotic_v16_gs7120p2",
"fastsim":
"80X_mcRun2_asymptotic_v16"},
157 "CMSSW_8_0_16_Tranche4GT": {
"default":
"80X_mcRun2_asymptotic_2016_TrancheIV_v0_gs7120p2_Tranch4GT",
"fastsim":
"80X_mcRun2_asymptotic_2016_TrancheIV_v0_Tranch4GT"},
158 "CMSSW_8_1_0_pre1": {
"default":
"80X_mcRun2_asymptotic_v6"},
159 "CMSSW_8_1_0_pre1_phase1": {
"default":
"80X_upgrade2017_design_v4_UPG17",
"fullsim_25ns":
"80X_upgrade2017_design_v4_UPG17PU35"},
160 "CMSSW_8_1_0_pre2": {
"default":
"80X_mcRun2_asymptotic_v10_gs810pre2",
"fastsim":
"80X_mcRun2_asymptotic_v10"},
161 "CMSSW_8_1_0_pre2_phase1": {
"default":
"80X_upgrade2017_design_v9_UPG17designGT",
"fullsim_25ns":
"80X_upgrade2017_design_v9_UPG17PU35designGT"},
162 "CMSSW_8_1_0_pre2_phase1_realGT": {
"default":
"80X_upgrade2017_realistic_v1_UPG17realGT",
"fullsim_25ns":
"80X_upgrade2017_realistic_v1_UPG17PU35realGT"},
163 "CMSSW_8_1_0_pre3": {
"default":
"80X_mcRun2_asymptotic_v12"},
164 "CMSSW_8_1_0_pre3_phase1": {
"default":
"80X_upgrade2017_realistic_v3_UPG17",
"fullsim_25ns":
"80X_upgrade2017_realistic_v3_UPG17PU35"},
165 "CMSSW_8_1_0_pre4": {
"default":
"80X_mcRun2_asymptotic_v13"},
166 "CMSSW_8_1_0_pre4_phase1": {
"default":
"80X_upgrade2017_realistic_v4_UPG17",
"fullsim_25ns":
"80X_upgrade2017_realistic_v4_UPG17PU35"},
167 "CMSSW_8_1_0_pre5": {
"default":
"80X_mcRun2_asymptotic_v13"},
168 "CMSSW_8_1_0_pre5_phase1": {
"default":
"80X_upgrade2017_realistic_v4_resubUPG17",
"fullsim_25ns":
"80X_upgrade2017_realistic_v4_resubUPG17PU35"},
169 "CMSSW_8_1_0_pre6": {
"default":
"80X_mcRun2_asymptotic_v14"},
170 "CMSSW_8_1_0_pre6_phase1": {
"default":
"81X_upgrade2017_realistic_v0_UPG17",
"fullsim_25ns":
"81X_upgrade2017_realistic_v0_UPG17PU35"},
171 "CMSSW_8_1_0_pre7": {
"default":
"81X_mcRun2_asymptotic_v0"},
172 "CMSSW_8_1_0_pre7_phase1": {
"default":
"81X_upgrade2017_realistic_v2_UPG17",
"fullsim_25ns":
"81X_upgrade2017_realistic_v2_UPG17PU35"},
173 "CMSSW_8_1_0_pre7_phase1_newGT": {
"default":
"81X_upgrade2017_realistic_v3_UPG17newGT",
"fullsim_25ns":
"81X_upgrade2017_realistic_v3_UPG17PU35newGTresub"},
174 "CMSSW_8_1_0_pre7_phase2": {
"2023GReco":
"81X_mcRun2_asymptotic_v0_2023GReco",
"2023GRecoPU35":
"",
"2023GRecoPU140":
"81X_mcRun2_asymptotic_v0_2023GRecoPU140resubmit2",
"2023GRecoPU200":
"81X_mcRun2_asymptotic_v0_2023GRecoPU200resubmit2",
175 "2023tilted":
"81X_mcRun2_asymptotic_v0_2023tilted",
"2023tiltedPU35":
"",
"2023tiltedPU140":
"81X_mcRun2_asymptotic_v0_2023tiltedPU140resubmit2",
"2023tiltedPU200":
"81X_mcRun2_asymptotic_v0_2023tiltedPU200resubmit2"},
176 "CMSSW_8_1_0_pre8": {
"default":
"81X_mcRun2_asymptotic_v1"},
177 "CMSSW_8_1_0_pre8_phase1": {
"default":
"81X_upgrade2017_realistic_v3_UPG17",
"fullsim_25ns":
"81X_upgrade2017_realistic_v3_UPG17PU35"},
178 "CMSSW_8_1_0_pre8_phase1_newGT": {
"default":
"81X_upgrade2017_realistic_v4_UPG17newGT",
"fullsim_25ns":
"81X_upgrade2017_realistic_v4_UPG17PU35newGT"},
179 "CMSSW_8_1_0_pre8_phase1_newGT2": {
"default":
"81X_upgrade2017_realistic_v5_UPG17newGTset2",
"fullsim_25ns":
"81X_upgrade2017_realistic_v5_UPG17PU35newGTset2"},
180 "CMSSW_8_1_0_pre8_phase2": {
"2023GReco":
"81X_mcRun2_asymptotic_v1_resub2023GReco",
"2023GRecoPU35":
"81X_mcRun2_asymptotic_v1_resub2023GRecoPU35",
"2023GRecoPU140":
"81X_mcRun2_asymptotic_v1_resub2023GRecoPU140",
"2023GRecoPU200":
"81X_mcRun2_asymptotic_v1_resub2023GRecoPU200",
181 "2023tilted":
"81X_mcRun2_asymptotic_v1_2023tilted",
"2023tiltedPU35":
"81X_mcRun2_asymptotic_v1_2023tiltedPU",
"2023tiltedPU140":
"81X_mcRun2_asymptotic_v1_2023tiltedPU140",
"2023tiltedPU200":
"81X_mcRun2_asymptotic_v1_2023tiltedPU200"},
182 "CMSSW_8_1_0_pre9": {
"default":
"81X_mcRun2_asymptotic_v2"},
183 "CMSSW_8_1_0_pre9_Geant4102": {
"default":
"81X_mcRun2_asymptotic_v2"},
184 "CMSSW_8_1_0_pre9_phase1": {
"default":
"81X_upgrade2017_realistic_v5_UPG17",
"fullsim_25ns":
"81X_upgrade2017_realistic_v5_UPG17PU35"},
185 "CMSSW_8_1_0_pre9_phase1_newGT": {
"default":
"81X_upgrade2017_realistic_v6_UPG17newGT",
"fullsim_25ns":
"81X_upgrade2017_realistic_v6_UPG17PU35newGT"},
188 _releasePostfixes = [
"_AlcaCSA14",
"_PHYS14",
"_TEST",
"_71XGENSIM_pmx",
"_gcc530_pmx",
"_pmx_v2",
"_pmx_v3",
"_pmx",
"_Fall14DR",
"_71XGENSIM_FIXGT",
"_71XGENSIM_PU",
"_71XGENSIM_PXbest",
"_71XGENSIM_PXworst",
"_71XGENSIM_hcal",
"_71XGENSIM_tec",
"_71XGENSIM",
"_73XGENSIM",
"_BS",
"_GenSim_7113",
"_extended",
189 "_25ns_asymptotic",
"_50ns_startup",
"_50ns_asympref",
"_50ns_asymptotic",
"_minimal",
"_0T",
"_unsch",
"_noCCC_v3",
"_noCCC",
"_MT",
"_phase1_rereco",
"_phase1_pythia8",
"_phase1_13TeV",
"_phase1_realGT",
"_phase1_newGT2",
"_phase1_newGT",
"_phase1",
"_phase2",
"_ecal15fb",
"_ecal30fb",
"_pixDynIneff",
"_gcc530",
"_Tranche4GT"]
191 for pf
in _releasePostfixes:
193 return release.replace(pf,
"")
201 sample -- Sample object 202 release -- CMSSW release string 204 if not release
in _globalTags:
205 print "Release %s not found from globaltag map in validation.py" % release
207 gtmap = _globalTags[release]
208 if sample.hasOverrideGlobalTag():
209 ogt = sample.overrideGlobalTag()
211 gtmap = _globalTags[ogt[release]]
213 if sample.hasScenario():
214 return gtmap[sample.scenario()]
215 if sample.pileupEnabled():
216 puType = sample.pileupType()
218 return gtmap.get(
"fullsim_50ns", gtmap[
"default"])
220 return gtmap.get(
"fullsim_25ns", gtmap[
"default"])
222 fsgt = gtmap.get(
"fastsim", gtmap[
"default"])
223 if sample.pileupEnabled():
224 puType = sample.pileupType()
226 return gtmap.get(
"fastsim_25ns", fsgt)
228 return gtmap[
"default"]
232 "6_2_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_6_2_x/",
233 "7_0_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_0_x/",
234 "7_1_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_1_x/",
235 "7_2_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_2_x/",
236 "7_3_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_3_x/",
237 "7_4_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_4_x/",
238 "7_5_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_5_x/",
239 "7_6_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_7_6_x/",
240 "8_0_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_8_0_x/",
241 "8_1_X":
"https://cmsweb.cern.ch/dqm/relval/data/browse/ROOT/RelVal/CMSSW_8_1_x/",
244 _doElectronSamples = [
246 "RelValSingleElectronPt35",
247 "RelValSingleElectronPt10",
249 _doConversionSamples = [
251 "RelValH125GGgluonfusion",
255 """Get RelVal download URL for a given release.""" 256 version_re = re.compile(
"CMSSW_(?P<X>\d+)_(?P<Y>\d+)")
257 m = version_re.search(release)
259 raise Exception(
"Regex %s does not match to release version %s" % (version_re.pattern, release))
260 version =
"%s_%s_X" % (m.group(
"X"), m.group(
"Y"))
261 if not version
in _relvalUrls:
262 print "No RelVal URL for version %s, please update _relvalUrls" % version
264 return _relvalUrls[version]
267 if plotterFolder.onlyForPileup()
and not sample.pileupEnabled():
269 if plotterFolder.onlyForElectron()
and not sample.doElectron():
271 if plotterFolder.onlyForConversion()
and not sample.doConversion():
276 """Represents a RelVal sample.""" 277 def __init__(self, sample, append=None, midfix=None, putype=None, punum=0,
278 fastsim=
False, fastsimCorrespondingFullsimPileup=
None,
279 doElectron=
None, doConversion=
None,
280 version=
"v1", dqmVersion=
"0001", scenario=
None, overrideGlobalTag=
None, appendGlobalTag=
""):
284 sample -- String for name of the sample 287 append -- String for a variable name within the DWM file names, to be directly appended to sample name (e.g. "HS"; default None) 288 midfix -- String for a variable name within the DQM file names, to be appended after underscore to "sample name+append" (e.g. "13", "UP15"; default None) 289 putype -- String for pileup type (e.g. "25ns"/"50ns" for FullSim, "AVE20" for FastSim; default None) 290 punum -- String for amount of pileup (default None) 291 fastsim -- Bool indicating the FastSim status (default False) 292 fastsimCorrespondingFullSimPileup -- String indicating what is the FullSim pileup sample corresponding this FastSim sample. Must be set if fastsim=True and putype!=None (default None) 293 doElectron -- Bool specifying if electron-specific plots should be produced (default depends on sample) 294 doConversion -- Bool specifying if conversion-specific plots should be produced (default depends on sample) 295 version -- String for dataset/DQM file version (default "v1") 296 scenario -- Geometry scenario for upgrade samples (default None) 297 overrideGlobalTag -- GlobalTag obtained from release information (in the form of {"release": "actualRelease"}; default None) 298 appendGlobalTag -- String to append to GlobalTag (intended for one-time hacks; default "") 313 if doElectron
is not None:
317 if doConversion
is not None:
326 """Return a tuple uniquely identifying the sample, to be used e.g. as a key to dict""" 330 """Get the sample name""" 334 """Get the sample name""" 341 """Return True if sample has pileup (for HTML generation)""" 342 return self.
_putype is not None 345 """Return True if pileup plots are enabled (for plot generation)""" 349 """Return "PU"/"noPU" corresponding the pileup status""" 356 """Return the pileup type""" 357 if isinstance(self.
_putype, dict):
358 return self._putype.get(release, self.
_putype[
"default"])
373 return self._version.get(release, self.
_version[
"default"])
390 """Return True for FastSim sample""" 394 """Return True for FullSim sample""" 400 def dirname(self, newRepository, newRelease, newSelection):
401 """Return the output directory name 404 newRepository -- String for base directory for output files 405 newRelease -- String for CMSSW release 406 newSelection -- String for histogram selection 411 return "{newRepository}/{newRelease}/{newSelection}{pileup}/{sample}".
format(
412 newRepository=newRepository, newRelease=newRelease, newSelection=newSelection,
413 pileup=pileup, sample=sample)
416 """Return the DQM file name 419 newRelease -- String for CMSSW release 444 fname =
'DQM_V{dqmVersion}_R000000001__{sample}{midfix}__{newrelease}-{pileup}{globaltag}{appendGlobalTag}{fastsim}-{version}__DQMIO.root'.
format(
445 sample=sample, midfix=midfix, newrelease=
_stripRelease(newRelease),
446 pileup=pileup, globaltag=globalTag, appendGlobalTag=self.
_appendGlobalTag, fastsim=fastsim,
453 """Return the dataset pattern 456 newRelease -- String for CMSSW release 464 fastsim =
"_FastSim-" 469 return "{sample}/{newrelease}-{pileup}{globaltag}{fastsim}{version}/GEN-SIM-{digi}RECO".
format(
470 sample=self.
_sample, newrelease=newRelease,
471 pileup=pileup, globaltag=globalTag, fastsim=fastsim, digi=digi,
472 version=self.
version(newRelease)
476 """Base class for Tracking/Vertex validation.""" 477 def __init__(self, fullsimSamples, fastsimSamples, refRelease, refRepository, newRelease, newRepository, newFileModifier=None, selectionName=""):
481 fullsimSamples -- List of Sample objects for FullSim samples (may be empty) 482 fastsimSamples -- List of Sample objects for FastSim samples (may be empty) 483 refRelease -- String for reference CMSSW release (can be None for no reference release) 484 newRepository -- String for directory whete to put new files 485 newRelease -- CMSSW release to be validated 486 refRepository -- String for directory where reference root files are 487 newFileModifier -- If given, a function to modify the names of the new files (function takes a string and returns a string) 488 selectionName -- If given, use this string as the selection name (appended to GlobalTag for directory names) 493 print >>sys.stderr,
'Error: CMSSW environment variables are not available.' 494 print >>sys.stderr,
' Please run cmsenv' 513 """Download DQM files. Requires grid certificate and asks your password for it.""" 517 filenames =
filter(
lambda f:
not os.path.exists(f), filenames)
518 if len(filenames) == 0:
519 print "All files already downloaded" 523 urls = [relvalUrl+f
for f
in filenames]
524 certfile = os.path.join(os.environ[
"HOME"],
".globus",
"usercert.pem")
525 if not os.path.exists(certfile):
526 print "Certificate file {certfile} does not exist, unable to download RelVal files from {url}".
format(certfile=certfile, url=relvalUrl)
528 keyfile = os.path.join(os.environ[
"HOME"],
".globus",
"userkey.pem")
529 if not os.path.exists(certfile):
530 print "Private key file {keyfile} does not exist, unable to download RelVal files from {url}".
format(keyfile=keyfile, url=relvalUrl)
534 cmd = [
"curl",
"--cert-type",
"PEM",
"--cert", certfile,
"--key", keyfile,
"-k"]
536 cmd.extend([
"-O", u])
537 print "Downloading %d files from RelVal URL %s:" % (len(filenames), relvalUrl)
538 print " "+
"\n ".
join(filenames)
539 print "Please provide your private key pass phrase when curl asks it" 540 ret = subprocess.call(cmd)
542 print "Downloading failed with exit code %d" % ret
548 p = subprocess.Popen([
"file", f], stdout=subprocess.PIPE)
549 stdout = p.communicate()[0]
550 if p.returncode != 0:
551 print "file command failed with exit code %d" % p.returncode
553 if not "ROOT" in stdout:
554 print "File {f} is not ROOT, please check the correct version, GlobalTag etc. from {url}".
format(f=f, url=relvalUrl)
556 if os.path.exists(f):
564 def doPlots(self, plotter, plotterDrawArgs={}, limitSubFoldersOnlyTo=None, htmlReport=html.HtmlReportDummy(), doFastVsFull=
True, doPhase2PU=
False):
565 """Create validation plots. 568 plotter -- plotting.Plotter object that does the plotting 571 plotterDrawArgs -- Dictionary for additional arguments to Plotter.draw() (default: {}) 572 limitSubFoldersOnlyTo -- If not None, should be a dictionary from string to an object. The string is the name of a PlotFolder, and the object is PlotFolder-type specific to limit the subfolders to be processed. In general case the object is a list of strings, but e.g. for track iteration plots it is a function taking the algo and quality as parameters. 573 htmlReport -- Object returned by createHtmlReport(), in case HTML report generation is desired 574 doFastVsFull -- Do FastSim vs. FullSim comparison? (default: True) 575 doPhase2PU -- Do Phase2 PU 200 vs. 140 comparison (default: False) 584 if not os.path.exists(harvestedFile):
585 print "Harvested file %s does not exist!" % harvestedFile
588 plotterInstance = plotter.readDirs(harvestedFile)
589 htmlReport.beginSample(sample)
590 for plotterFolder, dqmSubFolder
in plotterInstance.iterFolders(limitSubFoldersOnlyTo=limitSubFoldersOnlyTo):
593 plotFiles = self.
_doPlots(sample, harvestedFile, plotterFolder, dqmSubFolder, htmlReport)
594 htmlReport.addPlots(plotterFolder, dqmSubFolder, plotFiles)
606 correspondingFull =
None 608 if fast.name() != full.name():
610 if fast.pileupEnabled():
611 if not full.pileupEnabled():
613 if fast.fastsimCorrespondingFullsimPileup() != full.pileupType():
616 if full.pileupEnabled():
619 if correspondingFull
is None:
620 correspondingFull = full
622 raise Exception(
"Got multiple compatible FullSim samples for FastSim sample %s %s" % (fast.name(), fast.pileup()))
623 if correspondingFull
is None:
624 print "WARNING: Did not find compatible FullSim sample for FastSim sample %s %s, omitting FastSim vs. FullSim comparison" % (fast.name(), fast.pileup())
629 plotterInstance = self._plotter.readDirs(harvestedFile)
630 htmlReport.beginSample(fast, fastVsFull=
True)
631 for plotterFolder, dqmSubFolder
in plotterInstance.iterFolders(limitSubFoldersOnlyTo=limitSubFoldersOnlyTo):
634 plotFiles = self.
_doPlotsFastFull(fast, correspondingFull, plotterFolder, dqmSubFolder, htmlReport)
635 htmlReport.addPlots(plotterFolder, dqmSubFolder, plotFiles)
638 def _stripScenario(name):
639 puindex = name.find(
"PU")
642 return name[:puindex]
646 if sample.pileupNumber() == 140:
647 key = (sample.name(), _stripScenario(sample.scenario()))
648 if key
in pu140samples:
649 raise Exception(
"Duplicate entry for sample %s in scenario %s" % (sample.name(), sample.scenar()))
650 pu140samples[key] = sample
653 if sample.pileupNumber() != 200:
655 key = (sample.name(), _stripScenario(sample.scenario()))
656 if not key
in pu140samples:
659 sample_pu140 = pu140samples[key]
663 plotterInstance = self._plotter.readDirs(harvestedFile)
664 htmlReport.beginSample(sample, pileupComparison=
"vs. PU140")
665 for plotterFolder, dqmSubFolder
in plotterInstance.iterFolders(limitSubFoldersOnlyTo=limitSubFoldersOnlyTo):
668 plotFiles = self.
_doPlotsPileup(sample_pu140, sample, plotterFolder, dqmSubFolder, htmlReport)
669 htmlReport.addPlots(plotterFolder, dqmSubFolder, plotFiles)
677 def _createRefSelection(selectionName):
678 sel = refGlobalTag+selectionNameBase+selectionName
679 if sample.pileupEnabled():
684 refSelection = _createRefSelection(plotterFolder.getSelectionName(dqmSubFolder))
688 triedRefValFiles = []
692 for selName
in plotterFolder.getSelectionNameIterator(dqmSubFolder):
693 refSel = _createRefSelection(selName)
694 refdir = os.path.join(*(tmp+[refSel, sample.name()]))
697 refValFilePath = os.path.join(refdir, valname)
698 if os.path.exists(refValFilePath):
699 refSelection = refSel
700 refValFile = ROOT.TFile.Open(refValFilePath)
703 triedRefValFiles.append(refValFilePath)
704 if refValFile
is None:
705 if len(triedRefValFiles) == 1:
707 print "Reference file %s not found" % triedRefValFiles[0]
710 print "None of the possible reference files %s not found" %
",".
join(triedRefValFiles)
712 return (refValFile, refSelection)
714 def _doPlots(self, sample, harvestedFile, plotterFolder, dqmSubFolder, htmlReport):
715 """Do the real plotting work for a given sample and DQM subfolder""" 720 selectionNameBase =
"_"+sample.pileup()
721 newSelection = newGlobalTag+selectionNameBase+plotterFolder.getSelectionName(dqmSubFolder)
722 if sample.pileupEnabled():
725 newSelection +=
"_"+newPu
727 valname =
"val.{sample}.root".
format(sample=sample.name())
730 (refValFile, refSelection) = self.
_getRefFileAndSelection(sample, plotterFolder, dqmSubFolder, selectionNameBase, valname)
736 tmp.extend([newSelection, sample.name()])
737 newsubdir = os.path.join(*tmp)
742 newValFile =
_copySubDir(harvestedFile, valname, plotterFolder.getPossibleDQMFolders(), dqmSubFolder.subfolder
if dqmSubFolder
is not None else None)
747 print "Comparing ref and new {sim} {sample} {translatedFolder}".
format(
748 sim=
"FullSim" if not sample.fastsim()
else "FastSim",
749 sample=sample.name(), translatedFolder=
str(dqmSubFolder.translated)
if dqmSubFolder
is not None else "")
750 rootFiles = [refValFile, newValFile]
755 plotterFolder.create(rootFiles, legendLabels, dqmSubFolder, isPileupSample=sample.pileupEnabled())
758 if len(fileList) > 0:
759 fileList.append(valname)
762 for tableCreator
in plotterFolder.getTableCreators():
763 htmlReport.addTable(tableCreator.create(rootFiles, legendLabels, dqmSubFolder))
766 if refValFile
is not None:
769 if len(fileList) == 0:
774 print "Plotter produced multiple files with names",
", ".
join(dups)
775 print "Typically this is a naming problem in the plotter configuration" 779 print "Moving plots and %s to %s" % (valname, newdir)
780 if not os.path.exists(newdir):
783 shutil.move(f, os.path.join(newdir, f))
784 return map(
lambda n: os.path.join(newsubdir, n), fileList)
786 def _doPlotsFastFull(self, fastSample, fullSample, plotterFolder, dqmSubFolder, htmlReport):
787 """Do the real plotting work for FastSim vs. FullSim for a given algorithm, quality flag, and sample.""" 793 tmp = plotterFolder.getSelectionName(dqmSubFolder)
794 fastSelection = fastGlobalTag+
"_"+fastSample.pileup()+tmp
795 fullSelection = fullGlobalTag+
"_"+fullSample.pileup()+tmp
796 if fullSample.pileupEnabled():
797 fullSelection +=
"_"+fullSample.pileupType(self.
_newRelease)
798 fastSelection +=
"_"+fastSample.pileupType(self.
_newRelease)
802 fulldir = os.path.join(self.
_newBaseDir, fullSelection, fullSample.name())
803 newsubdir = os.path.join(
"fastfull", self.
_newRelease, fastSelection, fastSample.name())
807 valname =
"val.{sample}.root".
format(sample=fastSample.name())
808 fastValFilePath = os.path.join(fastdir, valname)
809 if not os.path.exists(fastValFilePath)
and plotting.verbose:
810 print "FastSim file %s not found" % fastValFilePath
811 fullValFilePath = os.path.join(fulldir, valname)
812 if not os.path.exists(fullValFilePath)
and plotting.verbose:
813 print "FullSim file %s not found" % fullValFilePath
815 fastValFile = ROOT.TFile.Open(fastValFilePath)
816 fullValFile = ROOT.TFile.Open(fullValFilePath)
820 print "Comparing FullSim and FastSim {sample} {translatedFolder}".
format(
821 sample=fastSample.name(), translatedFolder=
str(dqmSubFolder.translated)
if dqmSubFolder
is not None else "")
822 rootFiles = [fullValFile, fastValFile]
827 plotterFolder.create(rootFiles, legendLabels, dqmSubFolder, isPileupSample=fastSample.pileupEnabled(), requireAllHistograms=
True)
831 for tableCreator
in plotterFolder.getTableCreators():
832 htmlReport.addTable(tableCreator.create(rootFiles, legendLabels, dqmSubFolder))
837 if len(fileList) == 0:
842 print "Plotter produced multiple files with names",
", ".
join(dups)
843 print "Typically this is a naming problem in the plotter configuration" 847 print "Moving plots to %s" % (newdir)
848 if not os.path.exists(newdir):
851 shutil.move(f, os.path.join(newdir, f))
852 return map(
lambda n: os.path.join(newsubdir, n), fileList)
854 def _doPlotsPileup(self, pu140Sample, pu200Sample, plotterFolder, dqmSubFolder, htmlReport):
855 """Do the real plotting work for two pileup scenarios for a given algorithm, quality flag, and sample.""" 861 tmp = plotterFolder.getSelectionName(dqmSubFolder)
862 pu140Selection = pu140GlobalTag+
"_"+pu140Sample.pileup()+tmp+
"_"+pu140Sample.pileupType(self.
_newRelease)
863 pu200Selection = pu200GlobalTag+
"_"+pu200Sample.pileup()+tmp+
"_"+pu200Sample.pileupType(self.
_newRelease)
866 pu140dir = os.path.join(self.
_newBaseDir, pu140Selection, pu140Sample.name())
867 pu200dir = os.path.join(self.
_newBaseDir, pu200Selection, pu200Sample.name())
868 newsubdir = os.path.join(
"pileup", self.
_newRelease, pu200Selection, pu200Sample.name())
872 valname =
"val.{sample}.root".
format(sample=pu140Sample.name())
873 pu140ValFilePath = os.path.join(pu140dir, valname)
874 if not os.path.exists(pu140ValFilePath):
876 print "PU140 file %s not found" % pu140ValFilePath
878 pu200ValFilePath = os.path.join(pu200dir, valname)
879 if not os.path.exists(pu200ValFilePath):
881 print "PU200 file %s not found" % pu200ValFilePath
884 pu140ValFile = ROOT.TFile.Open(pu140ValFilePath)
885 pu200ValFile = ROOT.TFile.Open(pu200ValFilePath)
889 print "Comparing PU140 and PU200 {sample} {translatedFolder}".
format(
890 sample=pu200Sample.name(), translatedFolder=
str(dqmSubFolder.translated)
if dqmSubFolder
is not None else "")
891 rootFiles = [pu140ValFile, pu200ValFile]
896 plotterFolder.create(rootFiles, legendLabels, dqmSubFolder, isPileupSample=pu140Sample.pileupEnabled(), requireAllHistograms=
True)
900 for tableCreator
in plotterFolder.getTableCreators():
901 htmlReport.addTable(tableCreator.create(rootFiles, legendLabels, dqmSubFolder))
906 if len(fileList) == 0:
911 print "Plotter produced multiple files with names",
", ".
join(dups)
912 print "Typically this is a naming problem in the plotter configuration" 916 print "Moving plots to %s" % (newdir)
917 if not os.path.exists(newdir):
920 shutil.move(f, os.path.join(newdir, f))
921 return map(
lambda n: os.path.join(newsubdir, n), fileList)
925 """Copy a subdirectory from oldfile to newfile. 928 oldfile -- String for source TFile 929 newfile -- String for destination TFile 930 basenames -- List of strings for base directories, first existing one is picked 931 dirname -- String for directory name under the base directory 933 oldf = ROOT.TFile.Open(oldfile)
936 for basename
in basenames:
937 dirold = oldf.GetDirectory(basename)
941 raise Exception(
"Did not find any of %s directories from file %s" % (
",".
join(basenames), oldfile))
943 d = dirold.Get(dirname)
945 raise Exception(
"Did not find directory %s under %s" % (dirname, dirold.GetPath()))
948 newf = ROOT.TFile.Open(newfile,
"RECREATE")
950 for d
in basenames[0].
split(
"/"):
951 dirnew = dirnew.mkdir(d)
953 dirnew = dirnew.mkdir(dirname)
960 """Copy non-TTree objects from src TDirectory to dst TDirectory.""" 961 keys = src.GetListOfKeys()
963 classname = key.GetClassName()
964 cl = ROOT.TClass.GetClass(classname)
967 if not (cl.InheritsFrom(
"TTree")
and cl.InheritsFrom(
"TDirectory")):
984 def __init__(self, label, name, fileLegends, pileup=True, customPileupLabel=""):
1027 if not os.path.exists(newdir):
1034 raise Exception(
"HTML report object already created. There is probably some logic error in the calling code.")
1038 def doPlots(self, plotters, plotterDrawArgs={}, **kwargs):
1044 self._htmlReport.beginSample(sample)
1047 for f
in sample.files():
1048 if os.path.exists(f):
1049 self._openFiles.append(ROOT.TFile.Open(f))
1051 print "File %s not found (from sample %s), ignoring it" % (f, sample.name())
1052 self._openFiles.append(
None)
1054 for plotter
in plotters:
1063 plotterInstance = plotter.readDirs(*self.
_openFiles)
1064 for plotterFolder, dqmSubFolder
in plotterInstance.iterFolders(limitSubFoldersOnlyTo=limitSubFoldersOnlyTo):
1067 plotFiles = self.
_doPlots(plotterFolder, dqmSubFolder)
1068 if len(plotFiles) > 0:
1069 self._htmlReport.addPlots(plotterFolder, dqmSubFolder, plotFiles)
1075 for tableCreator
in plotterFolder.getTableCreators():
1076 self._htmlReport.addTable(tableCreator.create(self.
_openFiles, self.
_labels, dqmSubFolder))
1078 newsubdir = self.
_subdirprefix+plotterFolder.getSelectionName(dqmSubFolder)
1079 newdir = os.path.join(self.
_newdir, newsubdir)
1081 if len(fileList) == 0:
1086 print "Plotter produced multiple files with names",
", ".
join(dups)
1087 print "Typically this is a naming problem in the plotter configuration" 1090 print "Moving plots to %s" % newdir
1091 if not os.path.exists(newdir):
1094 shutil.move(f, os.path.join(newdir, f))
1095 return map(
lambda n: os.path.join(newsubdir, n), fileList)
def __init__(self, sample, append=None, midfix=None, putype=None, punum=0, fastsim=False, fastsimCorrespondingFullsimPileup=None, doElectron=None, doConversion=None, version="v1", dqmVersion="0001", scenario=None, overrideGlobalTag=None, appendGlobalTag="")
_fastsimCorrespondingFullsimPileup
def _getGlobalTag(sample, release)
def _doPlotsPileup(self, pu140Sample, pu200Sample, plotterFolder, dqmSubFolder, htmlReport)
def createHtmlReport(self, validationName="")
def _getSelectionName(self, args, kwargs)
def customPileupLabel(self)
def dirname(self, newRepository, newRelease, newSelection)
def filename(self, newRelease)
def _getDirectoryName(self, args, kwargs)
def __init__(self, label, name, fileLegends, pileup=True, customPileupLabel="")
def datasetpattern(self, newRelease)
def _doPlots(self, plotterFolder, dqmSubFolder)
def pileupType(self, release=None)
def _doFastsimFastVsFullPlots(self, limitSubFoldersOnlyTo, htmlReport)
def _getRelValUrl(release)
def _stripRelease(release)
def _processPlotsForSample(plotterFolder, sample)
def hasOverrideGlobalTag(self)
def _doPlotsFastFull(self, fastSample, fullSample, plotterFolder, dqmSubFolder, htmlReport)
def version(self, release=None)
def doPlots(self, plotters, plotterDrawArgs={}, kwargs)
def __init__(self, fullsimSamples, fastsimSamples, refRelease, refRepository, newRelease, newRepository, newFileModifier=None, selectionName="")
static std::string join(char **cmd)
def _copySubDir(oldfile, newfile, basenames, dirname)
def _doPhase2PileupPlots(self, limitSubFoldersOnlyTo, htmlReport)
def doPlots(self, plotter, plotterDrawArgs={}, limitSubFoldersOnlyTo=None, htmlReport=html.HtmlReportDummy(), doFastVsFull=True, doPhase2PU=False)
def fastsimCorrespondingFullsimPileup(self)
def createHtmlReport(self)
def _doPlotsForPlotter(self, plotter, sample, limitSubFoldersOnlyTo=None)
def __init__(self, samples, newdir)
def _getRefFileAndSelection(self, sample, plotterFolder, dqmSubFolder, selectionNameBase, valname)
def _doPlots(self, sample, harvestedFile, plotterFolder, dqmSubFolder, htmlReport)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
def overrideGlobalTag(self)