1616import ROOT # pylint: disable=import-error
1717sys .path .insert (0 , '..' )
1818from cut_variation import CutVarMinimiser
19+ from cut_variation import MinimisationStatus
1920from style_formatter import set_object_style
2021
2122# pylint: disable=no-member,too-many-locals,too-many-statements
@@ -100,7 +101,8 @@ def main(config):
100101 hist_covariance_npnp = hist_rawy [0 ].Clone ("hCovNonPromptNonPrompt" )
101102 hist_corrfrac_prompt = hist_rawy [0 ].Clone ("hCorrFracPrompt" )
102103 hist_corrfrac_nonprompt = hist_rawy [0 ].Clone ("hCorrFracNonPrompt" )
103- for histo in hist_corry_prompt , hist_corry_nonprompt , hist_covariance_pnp , hist_covariance_pp , hist_covariance_npnp , hist_corrfrac_prompt , hist_corrfrac_nonprompt :
104+ hist_minimisation_status = hist_rawy [0 ].Clone ("hMinimizationStatus" )
105+ for histo in hist_corry_prompt , hist_corry_nonprompt , hist_covariance_pnp , hist_covariance_pp , hist_covariance_npnp , hist_corrfrac_prompt , hist_corrfrac_nonprompt , hist_minimisation_status :
104106 histo .Reset ()
105107 hist_corry_prompt .GetYaxis ().SetTitle ("corrected yields prompt" )
106108 hist_corry_nonprompt .GetYaxis ().SetTitle ("corrected yields non-prompt" )
@@ -109,6 +111,12 @@ def main(config):
109111 hist_covariance_npnp .GetYaxis ().SetTitle ("#sigma(non-prompt, non-prompt)" )
110112 hist_corrfrac_prompt .GetYaxis ().SetTitle ("corrected fraction prompt" )
111113 hist_corrfrac_nonprompt .GetYaxis ().SetTitle ("corrected fraction non-prompt" )
114+ hist_minimisation_status .GetYaxis ().SetTitle ("minimisation status" )
115+ hist_minimisation_status_title = ""
116+ for min_status in MinimisationStatus :
117+ hist_minimisation_status_title += (str (min_status .value ) + " = " + min_status .name + ", " )
118+ hist_minimisation_status_title = hist_minimisation_status_title [:- 2 ]
119+ hist_minimisation_status .SetTitle (hist_minimisation_status_title )
112120 set_object_style (
113121 hist_corry_prompt ,
114122 color = ROOT .kRed + 1 ,
@@ -124,6 +132,7 @@ def main(config):
124132 set_object_style (hist_covariance_pnp )
125133 set_object_style (hist_covariance_pp )
126134 set_object_style (hist_covariance_npnp )
135+ set_object_style (hist_minimisation_status )
127136 set_object_style (
128137 hist_corrfrac_prompt ,
129138 color = ROOT .kRed + 1 ,
@@ -168,6 +177,7 @@ def main(config):
168177 for ipt in range (hist_rawy [0 ].GetNbinsX ()):
169178 if pt_bin_to_process != - 1 and ipt + 1 != pt_bin_to_process :
170179 continue
180+ all_vectors_monotonous = MinimisationStatus .Success
171181 pt_min = hist_rawy [0 ].GetXaxis ().GetBinLowEdge (ipt + 1 )
172182 pt_max = hist_rawy [0 ].GetXaxis ().GetBinUpEdge (ipt + 1 )
173183 print (f"\n \n INFO: processing pt range { ipt + 1 } from { pt_min } to { pt_max } { pt_axis_title } " )
@@ -183,16 +193,18 @@ def main(config):
183193
184194 if cfg ["minimisation" ]["correlated" ]:
185195 if not (np .all (rawy [1 :] > rawy [:- 1 ]) or np .all (rawy [1 :] < rawy [:- 1 ])):
196+ all_vectors_monotonous = MinimisationStatus .MonotonyViolation
186197 print ("\0 \33 [33mWARNING! main(): the raw yield vector is not monotonous. Check the input for stability.\0 \33 [0m" )
187198 print (f"raw yield vector elements = { rawy } \n " )
188199 if not (np .all (unc_rawy [1 :] > unc_rawy [:- 1 ]) or np .all (unc_rawy [1 :] < unc_rawy [:- 1 ])):
200+ all_vectors_monotonous = MinimisationStatus .MonotonyViolation
189201 print ("\0 \33 [33mWARNING! main(): the raw yield uncertainties vector is not monotonous. Check the input for stability.\0 \33 [0m" )
190202 print (f"raw yield uncertainties vector elements = { unc_rawy } \n " )
191203
192204 minimiser = CutVarMinimiser (rawy , effp , effnp , unc_rawy , unc_effp , unc_effnp )
193205 status = minimiser .minimise_system (cfg ["minimisation" ]["correlated" ])
194206
195- if status :
207+ if status != MinimisationStatus . Fail :
196208 hist_corry_prompt .SetBinContent (ipt + 1 , minimiser .get_prompt_yield_and_error ()[0 ])
197209 hist_corry_prompt .SetBinError (ipt + 1 , minimiser .get_prompt_yield_and_error ()[1 ])
198210 hist_corry_nonprompt .SetBinContent (ipt + 1 , minimiser .get_nonprompt_yield_and_error ()[0 ])
@@ -209,6 +221,7 @@ def main(config):
209221 hist_corrfrac_prompt .SetBinError (ipt + 1 , corr_frac_prompt [1 ])
210222 hist_corrfrac_nonprompt .SetBinContent (ipt + 1 , corr_frac_nonprompt [0 ])
211223 hist_corrfrac_nonprompt .SetBinError (ipt + 1 , corr_frac_nonprompt [1 ])
224+ hist_minimisation_status .SetBinContent (ipt + 1 , max (status , all_vectors_monotonous ))
212225 if cfg ["central_efficiency" ]["computerawfrac" ]:
213226 raw_frac_prompt = minimiser .get_raw_prompt_fraction (
214227 hist_central_effp .GetBinContent (ipt + 1 ), hist_central_effnp .GetBinContent (ipt + 1 )
@@ -268,10 +281,12 @@ def main(config):
268281 canv_cov .SaveAs (f"canv_cov_{ ipt + 1 } .C" )
269282 else :
270283 print (f"Minimization for pT { pt_min } , { pt_max } not successful" )
284+ hist_minimisation_status .SetBinContent (ipt + 1 , MinimisationStatus .Fail )
271285 canv_rawy = ROOT .TCanvas ("c_rawy_minimization_error" , "Minimization error" , 500 , 500 )
272286 canv_eff = ROOT .TCanvas ("c_eff_minimization_error" , "Minimization error" , 500 , 500 )
273287 canv_frac = ROOT .TCanvas ("c_frac_minimization_error" , "Minimization error" , 500 , 500 )
274288 canv_cov = ROOT .TCanvas ("c_conv_minimization_error" , "Minimization error" , 500 , 500 )
289+ canv_unc = ROOT .TCanvas ("c_unc_minimization_error" , "Minimization error" , 500 , 500 )
275290
276291 canv_combined = ROOT .TCanvas (f"canv_combined_{ ipt } " , "" , 1000 , 1000 )
277292 canv_combined .Divide (2 , 2 )
@@ -316,6 +331,7 @@ def main(config):
316331 hist_covariance_npnp .Write ()
317332 hist_corrfrac_prompt .Write ()
318333 hist_corrfrac_nonprompt .Write ()
334+ hist_minimisation_status .Write ()
319335 if cfg ["central_efficiency" ]["computerawfrac" ]:
320336 hist_frac_raw_prompt .Write ()
321337 hist_frac_raw_nonprompt .Write ()
0 commit comments