Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.55 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. // mock TDataFrameGuessedType (maybe better than the original?)
  4. using ToGuess = void;
  5.  
  6. // mock TH1F
  7. class TH1F {
  8. public:
  9. TH1F(unsigned int nbins, double xmin, double xmax){};
  10. };
  11.  
  12. // mock TH2F
  13. class TH2F {
  14. public:
  15. TH2F(unsigned int nbins, double xmin, double xmax, double ymin, double ymax){};
  16. };
  17.  
  18. // mock TH3F
  19. class TH3F {
  20. public:
  21. TH3F(unsigned int nbins, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax){};
  22. };
  23.  
  24. // mock TDataFrameInterface
  25. class TDataFrameInterface {
  26. public:
  27.  
  28. // Histo1D w/o weights
  29. template<typename V = ToGuess>
  30. TH1F Histo1D(TH1F&& h = TH1F{128u,0.,0.}, const std::string& v = "");
  31.  
  32. template<typename V = ToGuess>
  33. TH1F Histo1D(const std::string& v);
  34.  
  35. // Histo1D w/ weights
  36. template<typename V = ToGuess, typename W = ToGuess>
  37. TH1F Histo1D(TH1F&& h, const std::string& v, const std::string& w);
  38.  
  39. template<typename V = ToGuess, typename W = ToGuess>
  40. TH1F Histo1D(const std::string& v, const std::string& w);
  41.  
  42. template<typename V, typename W>
  43. TH1F Histo1D(TH1F&& h = TH1F{128u,0.,0.});
  44.  
  45. // Histo2D w/o weights
  46. template<typename V1 = ToGuess, typename V2 = ToGuess>
  47. TH2F Histo2D(TH2F&& h, const std::string& v1 = "", const std::string& v2 = "");
  48.  
  49. // Histo2D w/ weights
  50. template<typename V1 = ToGuess, typename V2 = ToGuess, typename W = ToGuess>
  51. TH2F Histo2D(TH2F&& h, const std::string& v1, const std::string& v2, const std::string& w);
  52.  
  53. template<typename V1, typename V2, typename W>
  54. TH2F Histo2D(TH2F&& h);
  55.  
  56. // Histo3D w/o weights
  57. template<typename V1 = ToGuess, typename V2 = ToGuess, typename V3 = ToGuess>
  58. TH3F Histo3D(TH3F&& h, const std::string& v1 = "", const std::string& v2 = "", const std::string& v3 = "");
  59.  
  60. // Histo3D w/ weights
  61. template<typename V1 = ToGuess, typename V2 = ToGuess, typename V3 = ToGuess, typename W = ToGuess>
  62. TH3F Histo3D(TH3F&& h, const std::string& v1, const std::string& v2, const std::string& v3, const std::string& w);
  63.  
  64. template<typename V1, typename V2, typename V3, typename W>
  65. TH3F Histo3D(TH3F&& h);
  66. };
  67.  
  68. int main() {
  69. TDataFrameInterface d;
  70. // histogram w/o weights -- these calls are all equivalent
  71. d.Histo1D();
  72. d.Histo1D<int>();
  73. d.Histo1D("v");
  74. d.Histo1D<int>("v");
  75.  
  76. // histogram w/ weights -- these calls are all equivalent
  77. d.Histo1D("v", "w");
  78. d.Histo1D<int>("v", "w");
  79. d.Histo1D<int, double>("v", "w");
  80. d.Histo1D<int, double>();
  81.  
  82. // histo2D w/o weights
  83. d.Histo2D(TH2F{128u,0.,1.,0.,1.});
  84. d.Histo2D(TH2F{128u,0.,1.,0.,1.}, "v1");
  85. d.Histo2D(TH2F{128u,0.,1.,0.,1.}, "v1", "v2");
  86. d.Histo2D<int>(TH2F{128u,0.,1.,0.,1.});
  87. d.Histo2D<int>(TH2F{128u,0.,1.,0.,1.}, "v1");
  88. d.Histo2D<int>(TH2F{128u,0.,1.,0.,1.}, "v1", "v2");
  89. d.Histo2D<int,int>(TH2F{128u,0.,1.,0.,1.});
  90. d.Histo2D<int,int>(TH2F{128u,0.,1.,0.,1.}, "v1");
  91. d.Histo2D<int,int>(TH2F{128u,0.,1.,0.,1.}, "v1", "v2");
  92.  
  93. // histo2D w/ weights
  94. d.Histo2D(TH2F{128u,0.,1.,0.,1.}, "v1", "v2", "w");
  95. d.Histo2D<int>(TH2F{128u,0.,1.,0.,1.}, "v1", "v2", "w");
  96. d.Histo2D<int,int>(TH2F{128u,0.,1.,0.,1.}, "v1", "v2", "w");
  97. d.Histo2D<int,int,double>(TH2F{128u,0.,1.,0.,1.}, "v1", "v2", "w");
  98. d.Histo2D<int,int,double>(TH2F{128u,0.,1.,0.,1.});
  99.  
  100. // Histo3D w/o weights
  101. d.Histo3D(TH3F{128u,0.,1.,0.,1.,0.,1.});
  102. d.Histo3D(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1");
  103. d.Histo3D(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2");
  104. d.Histo3D(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3");
  105. d.Histo3D<int>(TH3F{128u,0.,1.,0.,1.,0.,1.});
  106. d.Histo3D<int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1");
  107. d.Histo3D<int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2");
  108. d.Histo3D<int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3");
  109. d.Histo3D<int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.});
  110. d.Histo3D<int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1");
  111. d.Histo3D<int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2");
  112. d.Histo3D<int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3");
  113. d.Histo3D<int,int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1");
  114. d.Histo3D<int,int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2");
  115. d.Histo3D<int,int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3");
  116.  
  117. // Histo3D w/ weights
  118. d.Histo3D(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3", "w");
  119. d.Histo3D<int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3", "w");
  120. d.Histo3D<int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3", "w");
  121. d.Histo3D<int,int,int>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3", "w");
  122. d.Histo3D<int,int,int,double>(TH3F{128u,0.,1.,0.,1.,0.,1.}, "v1", "v2", "v3", "w");
  123. d.Histo3D<int,int,int,double>(TH3F{128u,0.,1.,0.,1.,0.,1.});
  124.  
  125. return 0;
  126. }
  127.  
  128.  
  129. // mock method implementations, for demonstration purposes only :)
  130. template <typename V>
  131. TH1F TDataFrameInterface::Histo1D(TH1F&& h, const std::string& v)
  132. {
  133. std::cout << "1D value" << std::endl;
  134. return h;
  135. }
  136.  
  137. template<typename V>
  138. TH1F TDataFrameInterface::Histo1D(const std::string& v) {
  139. return Histo1D<V>(TH1F{128u,0.,0.}, v);
  140. }
  141.  
  142. template <typename V, typename W>
  143. TH1F TDataFrameInterface::Histo1D(TH1F &&h, const std::string &v, const std::string &w)
  144. {
  145. std::cout << "1D value+weight" << std::endl;
  146. return h;
  147. }
  148.  
  149. template <typename V, typename W>
  150. TH1F TDataFrameInterface::Histo1D(const std::string &v, const std::string &w)
  151. {
  152. return Histo1D<V,W>(TH1F{128u,0.,0.}, v, w);
  153. }
  154.  
  155. template <typename V, typename W>
  156. TH1F TDataFrameInterface::Histo1D(TH1F &&h)
  157. {
  158. return Histo1D<V,W>(std::move(h),"","");
  159. }
  160.  
  161. template<typename V1, typename V2>
  162. TH2F TDataFrameInterface::Histo2D(TH2F&& h, const std::string& v1, const std::string& v2) {
  163. std::cout << "2D value" << std::endl;
  164. return h;
  165. }
  166.  
  167. template<typename V1, typename V2, typename W>
  168. TH2F TDataFrameInterface::Histo2D(TH2F&& h, const std::string& v1, const std::string& v2, const std::string& w) {
  169. std::cout << "2D value+weight" << std::endl;
  170. return h;
  171. }
  172.  
  173. template<typename V1, typename V2, typename W>
  174. TH2F TDataFrameInterface::Histo2D(TH2F&& h) {
  175. return Histo2D<V1,V2,W>(std::move(h),"","","");
  176. }
  177.  
  178. template<typename V1, typename V2, typename V3>
  179. TH3F TDataFrameInterface::Histo3D(TH3F&& h, const std::string& v1, const std::string& v2, const std::string& v3) {
  180. std::cout << "3D value" << std::endl;
  181. return h;
  182. }
  183.  
  184. template<typename V1, typename V2, typename V3, typename W>
  185. TH3F TDataFrameInterface::Histo3D(TH3F&& h, const std::string& v1, const std::string& v2, const std::string& v3, const std::string& w) {
  186. std::cout << "3D value+weight" << std::endl;
  187. return h;
  188. }
  189.  
  190. template<typename V1, typename V2, typename V3, typename W>
  191. TH3F TDataFrameInterface::Histo3D(TH3F&& h) {
  192. return Histo3D<V1, V2, V3, W>(std::move(h), "", "", "", "");
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement