You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
5.8 KiB

10 months ago
7 months ago
10 months ago
7 months ago
10 months ago
10 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
7 months ago
10 months ago
10 months ago
7 months ago
10 months ago
10 months ago
10 months ago
9 months ago
9 months ago
9 months ago
10 months ago
9 months ago
10 months ago
  1. # flake8: noqaq
  2. import os
  3. import subprocess
  4. import argparse
  5. from parameterisations.parameterise_magnet_kink_electron import parameterise_magnet_kink
  6. from parameterisations.parameterise_track_model_electron import parameterise_track_model
  7. from parameterisations.parameterise_search_window import parameterise_search_window
  8. from parameterisations.parameterise_field_integral import parameterise_field_integral
  9. from parameterisations.parameterise_hough_histogram import parameterise_hough_histogram
  10. from parameterisations.utils.preselection_trackinglosses import preselection
  11. from parameterisations.train_forward_ghost_mlps import (
  12. train_default_forward_ghost_mlp,
  13. train_veloUT_forward_ghost_mlp,
  14. )
  15. from parameterisations.train_matching_ghost_mlps import train_matching_ghost_mlp
  16. from parameterisations.utils.parse_tmva_matrix_to_array import (
  17. parse_tmva_matrix_to_array,
  18. )
  19. parser = argparse.ArgumentParser()
  20. parser.add_argument(
  21. "--field-params",
  22. action="store_true",
  23. help="Enables determination of magnetic field parameterisations.",
  24. )
  25. parser.add_argument(
  26. "--forward-weights",
  27. action="store_true",
  28. help="Enables determination of weights used by neural networks.",
  29. )
  30. parser.add_argument(
  31. "--matching-weights",
  32. action="store_true",
  33. # default=True,
  34. help="Enables determination of weights used by neural networks.",
  35. )
  36. parser.add_argument(
  37. "-p",
  38. "--prepare",
  39. action="store_true",
  40. help="Enables preparation of data for matching.",
  41. )
  42. parser.add_argument(
  43. "--prepare-params-data",
  44. action="store_true",
  45. help="Enables preparation of data for magnetic field parameterisations.",
  46. )
  47. parser.add_argument(
  48. "--prepare-weights-data",
  49. action="store_true",
  50. help="Enables preparation of data for NN weight determination.",
  51. )
  52. args = parser.parse_args()
  53. selected = "data/tracking_losses_ntuple_B_BJpsi_def_selected.root"
  54. if args.prepare_params_data:
  55. selection = "isElectron == 1 && pt > 10 && p > 1500 && p < 100000 && !std::isnan(ideal_state_770_x) && !std::isnan(ideal_state_9410_x) && !std::isnan(ideal_state_10000_x) && std::abs(match_chi2) < 5"
  56. print("Run selection cuts =", selection)
  57. selected_b = preselection(
  58. cuts=selection,
  59. input_file="data/tracking_losses_ntuple_B_def.root",
  60. )
  61. selected_bj = preselection(
  62. cuts=selection,
  63. input_file="data/tracking_losses_ntuple_BJpsi_def.root",
  64. )
  65. merge_cmd = ["hadd", "-fk", selected, selected_b, selected_bj]
  66. print("Concatenate polarities ...")
  67. subprocess.run(merge_cmd, check=True)
  68. cpp_files = []
  69. if args.field_params:
  70. print("Parameterise magnet kink position ...")
  71. cpp_files.append(parameterise_magnet_kink(input_file=selected))
  72. print("Parameterise track model ...")
  73. cpp_files.append(parameterise_track_model(input_file=selected))
  74. # selected_all_p = (
  75. # "nn_neural_net_training/data/param_data_B_default_thesis_selected_all_p.root"
  76. # )
  77. # if args.prepare_params_data:
  78. # selection_all_momenta = "chi2_comb < 5 && pid != 11"
  79. # print()
  80. # print("Run selection cuts =", selection_all_momenta)
  81. # selected_md_all_p = preselection(
  82. # cuts=selection_all_momenta,
  83. # outfile_postfix="selected_all_p",
  84. # input_file="nn_neural_net_training/data/param_data_B_default_thesis.root",
  85. # )
  86. # if args.field_params:
  87. # print("Parameterise magnet kink position ...")
  88. # cpp_files.append(parameterise_magnet_kink(input_file=selected_all_p))
  89. # print("Parameterise track model ...")
  90. # cpp_files.append(parameterise_track_model(input_file=selected_all_p))
  91. # print("Parameterise search window ...")
  92. # cpp_files.append(parameterise_search_window(input_file=selected_all_p))
  93. # print("Parameterise magnetic field integral ...")
  94. # cpp_files.append(parameterise_field_integral(input_file=selected_all_p))
  95. # print("Parameterise Hough histogram binning ...")
  96. # cpp_files.append(parameterise_hough_histogram(input_file=selected_all_p))
  97. ###>>>
  98. ghost_data = "neural_net_training/data/ghost_data.root"
  99. if args.prepare_weights_data:
  100. merge_cmd = [
  101. "hadd",
  102. "-fk",
  103. ghost_data,
  104. "data/ghost_data_MD.root",
  105. "data/ghost_data_MU.root",
  106. ]
  107. print("Concatenate polarities for neural network training ...")
  108. subprocess.run(merge_cmd, check=True)
  109. ###<<<
  110. if args.forward_weights:
  111. train_default_forward_ghost_mlp(prepare_data=args.prepare_weights_data)
  112. # FIXME: use env variable instead
  113. os.chdir(os.path.dirname(os.path.realpath(__file__)))
  114. train_veloUT_forward_ghost_mlp(prepare_data=args.prepare_weights_data)
  115. # this ensures that the directory is correct
  116. os.chdir(os.path.dirname(os.path.realpath(__file__)))
  117. cpp_files += parse_tmva_matrix_to_array(
  118. [
  119. "neural_net_training/result/GhostNNDataSet/weights/TMVAClassification_default_forward_ghost_mlp.class.C",
  120. "neural_net_training/result/GhostNNDataSet/weights/TMVAClassification_veloUT_forward_ghost_mlp.class.C",
  121. ],
  122. )
  123. ###>>>
  124. if args.matching_weights:
  125. os.chdir(os.path.dirname(os.path.realpath(__file__)))
  126. train_matching_ghost_mlp(
  127. prepare_data=args.prepare,
  128. input_file="data/ghost_data_B_default_phi_eta.root",
  129. tree_name="PrMatchNN_3e224c41.PrMCDebugMatchToolNN/MVAInputAndOutput",
  130. outdir="neural_net_training",
  131. exclude_electrons=False,
  132. only_electrons=True,
  133. )
  134. # this ensures that the directory is correct
  135. os.chdir(os.path.dirname(os.path.realpath(__file__)))
  136. cpp_files += parse_tmva_matrix_to_array(
  137. [
  138. "neural_net_training/result/MatchNNDataSet/weights/TMVAClassification_matching_mlp.class.C",
  139. ],
  140. simd_type=True,
  141. )
  142. ###<<<
  143. for file in cpp_files:
  144. subprocess.run(
  145. [
  146. "clang-format",
  147. "-i",
  148. f"{file}",
  149. ],
  150. )