ROOT Analysis for the Inclusive Detachted Dilepton Trigger Lines
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.

77 lines
1.6 KiB

6 months ago
  1. #include <iostream>
  2. #include "TMath.h"
  3. void println(std::string str) {
  4. std::cout << str << std::endl;
  5. }
  6. int get_ten_pow(double number) {
  7. int sign = 0;
  8. int pow = 0;
  9. if (number >= 1) {
  10. sign = 1;
  11. while (number >= 1) {
  12. // std::cout << number << " " << pow << std::endl;
  13. number = number / 10;
  14. pow++;
  15. }
  16. } else {
  17. sign = -1;
  18. while (number < 1) {
  19. number = number * 10;
  20. pow++;
  21. }
  22. }
  23. return sign * pow;
  24. }
  25. int get_decimals(double number) {
  26. int dec = 0;
  27. while ((int) number != number) {
  28. number = number * 10;
  29. dec++;
  30. }
  31. return dec;
  32. }
  33. int rounder() {
  34. // 2,543 ± 0,235 174,032 ± 82,543
  35. double val = 1.2456;// -> 4300
  36. double err = 0.2231; // -> 240
  37. std::cout << get_ten_pow(231.4345) << " " << get_ten_pow(0.0045) << std::endl;
  38. int mv = 0;
  39. if (err < 1) {
  40. mv = 1;
  41. } else {
  42. mv = -1;
  43. }
  44. int pot = 0;
  45. while((mv == 1 && err < 3) || (mv == -1 && err > 30)) {
  46. err = err * TMath::Power(10, mv);
  47. pot++;
  48. }
  49. int err_ten_pow = get_ten_pow(err);
  50. int val_ten_pow = get_ten_pow(val);
  51. int diff = TMath::Abs(err_ten_pow - val_ten_pow);
  52. double input_err = err * TMath::Power(10, -mv * pot);
  53. double round_err = TMath::Ceil(err) * TMath::Power(10, -mv * pot);
  54. int err_dec = get_decimals(round_err);
  55. diff += err_dec;
  56. double mv_val = val * TMath::Power(10, mv * diff);
  57. double round_val = TMath::Ceil(mv_val) * TMath::Power(10, -mv * diff);
  58. std::cout << val << " " << mv_val << " " << err << " " << input_err<< " " << std::endl;
  59. std::cout << val << "+-" << input_err << " -> " << round_val << "+-" << round_err << std::endl;
  60. return 0;
  61. }