9 #include <analysis/VariableManager/Manager.h>
10 #include <analysis/dataobjects/Particle.h>
11 #include <analysis/dataobjects/EventShapeContainer.h>
13 #include <analysis/utility/ReferenceFrame.h>
15 #include <framework/logging/Logger.h>
16 #include <framework/datastore/StoreObjPtr.h>
17 #include <framework/utilities/Conversion.h>
19 #include <TLorentzVector.h>
23 #include <boost/algorithm/string.hpp>
34 if (arguments.size() != 1) {
35 B2ERROR(
"foxWolframR cannot be called without providing the moment order");
41 order = Belle2::convertString<int>(arguments[0]);
42 }
catch (std::invalid_argument&) {
43 B2ERROR(
"Argument of foxWolframR must be an integer");
47 if (order < 0 || order > 8) {
48 B2ERROR(
"The Fox-Wolfram moment order must be within 0 and 8.");
52 auto func = [order](
const Particle*) ->
double{
54 StoreObjPtr<EventShapeContainer> evtShapeCont;
57 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
58 return std::numeric_limits<float>::quiet_NaN();
60 if (evtShapeCont->getFWMoment(0) == 0)
62 B2INFO(
"The 0th-order FoxWolfram moment is zero");
63 return std::numeric_limits<float>::quiet_NaN();
65 return evtShapeCont->getFWMoment(order) / evtShapeCont->getFWMoment(0);
74 if (arguments.size() != 1) {
75 B2ERROR(
"foxWolframH cannot be called without providing the moment order");
81 order = Belle2::convertString<int>(arguments[0]);
82 }
catch (std::invalid_argument&) {
83 B2ERROR(
"Argument of foxWolframH must be an integer");
87 if (order < 0 || order > 8) {
88 B2ERROR(
"The Fox-Wolfram moment order must be within 0 and 8.");
92 auto func = [order](
const Particle*) ->
double{
94 StoreObjPtr<EventShapeContainer> evtShapeCont;
97 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
98 return std::numeric_limits<float>::quiet_NaN();
100 return evtShapeCont->getFWMoment(order);
109 if (arguments.size() != 2) {
110 B2ERROR(
"harmonicMoment requires two arguments: the harmonic order (0-8) and the reference axis name (thrust or collision)");
116 order = Belle2::convertString<int>(arguments[0]);
117 }
catch (std::invalid_argument&) {
118 B2ERROR(
"First argument of harmonicMoment must be an integer");
121 std::string axisName = arguments[1];
122 boost::to_lower(axisName);
124 if (order < 0 || order > 8) {
125 B2ERROR(
"The Fox-Wolfram moment order must be within 0 and 8.");
128 if (axisName !=
"thrust" && axisName !=
"collision") {
129 B2ERROR(
"Invalid axis name " << arguments[1] <<
". The valid options are thrust and collision");
133 auto func = [order, axisName](
const Particle*) ->
double{
134 StoreObjPtr<EventShapeContainer> evtShapeCont;
137 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
138 return std::numeric_limits<float>::quiet_NaN();
140 if (axisName ==
"thrust")
141 return evtShapeCont->getHarmonicMomentThrust(order);
143 return evtShapeCont->getHarmonicMomentCollision(order);
151 if (arguments.size() != 2) {
152 B2ERROR(
"cleoCone requires two arguments: the cone order (0-9) and the reference axis name (thrust or collision)");
158 order = Belle2::convertString<int>(arguments[0]);
159 }
catch (std::invalid_argument&) {
160 B2ERROR(
"Argument of cleoCone must be an integer");
163 std::string axisName = arguments[1];
164 boost::to_lower(axisName);
166 if (order < 0 || order > 8) {
167 B2ERROR(
"The CLEO cone order must be within 0 and 8.");
170 if (axisName !=
"thrust" && axisName !=
"collision") {
171 B2ERROR(
"Invalid axis name " << arguments[1] <<
". The valid options are thrust and collision");
175 auto func = [order, axisName](
const Particle*) ->
double{
176 StoreObjPtr<EventShapeContainer> evtShapeCont;
179 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
180 return std::numeric_limits<float>::quiet_NaN();
182 if (axisName ==
"thrust")
183 return evtShapeCont->getCleoConeThrust(order);
185 return evtShapeCont->getCleoConeCollision(order);
192 double foxWolframR1(
const Particle*)
194 StoreObjPtr<EventShapeContainer> evtShapeCont;
196 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
197 return std::numeric_limits<float>::quiet_NaN();
199 if (evtShapeCont->getFWMoment(0) == 0) {
200 B2ERROR(
"The 0th-order FoxWolfram moment is zero");
201 return std::numeric_limits<float>::quiet_NaN();
203 return evtShapeCont->getFWMoment(1) / evtShapeCont->getFWMoment(0);
206 double foxWolframR2(
const Particle*)
208 StoreObjPtr<EventShapeContainer> evtShapeCont;
210 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
211 return std::numeric_limits<float>::quiet_NaN();
213 if (evtShapeCont->getFWMoment(0) == 0) {
214 B2ERROR(
"The 0th-order FoxWolfram moment is zero");
215 return std::numeric_limits<float>::quiet_NaN();
217 return evtShapeCont->getFWMoment(2) / evtShapeCont->getFWMoment(0);
220 double foxWolframR3(
const Particle*)
222 StoreObjPtr<EventShapeContainer> evtShapeCont;
224 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
225 return std::numeric_limits<float>::quiet_NaN();
227 if (evtShapeCont->getFWMoment(0) == 0) {
228 B2ERROR(
"The 0th-order FoxWolfram moment is zero");
229 return std::numeric_limits<float>::quiet_NaN();
231 return evtShapeCont->getFWMoment(3) / evtShapeCont->getFWMoment(0);
234 double foxWolframR4(
const Particle*)
236 StoreObjPtr<EventShapeContainer> evtShapeCont;
238 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
239 return std::numeric_limits<float>::quiet_NaN();
241 if (evtShapeCont->getFWMoment(0) == 0) {
242 B2ERROR(
"The 0th-order FoxWolfram moment is zero");
243 return std::numeric_limits<float>::quiet_NaN();
245 return evtShapeCont->getFWMoment(4) / evtShapeCont->getFWMoment(0);
249 double harmonicMomentThrust0(
const Particle*)
251 StoreObjPtr<EventShapeContainer> evtShapeCont;
253 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
254 return std::numeric_limits<float>::quiet_NaN();
256 return evtShapeCont->getHarmonicMomentThrust(0);
259 double harmonicMomentThrust1(
const Particle*)
261 StoreObjPtr<EventShapeContainer> evtShapeCont;
263 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
264 return std::numeric_limits<float>::quiet_NaN();
266 return evtShapeCont->getHarmonicMomentThrust(1);
269 double harmonicMomentThrust2(
const Particle*)
271 StoreObjPtr<EventShapeContainer> evtShapeCont;
273 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
274 return std::numeric_limits<float>::quiet_NaN();
276 return evtShapeCont->getHarmonicMomentThrust(2);
279 double harmonicMomentThrust3(
const Particle*)
281 StoreObjPtr<EventShapeContainer> evtShapeCont;
283 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
284 return std::numeric_limits<float>::quiet_NaN();
286 return evtShapeCont->getHarmonicMomentThrust(3);
289 double harmonicMomentThrust4(
const Particle*)
291 StoreObjPtr<EventShapeContainer> evtShapeCont;
293 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
294 return std::numeric_limits<float>::quiet_NaN();
296 return evtShapeCont->getHarmonicMomentThrust(4);
300 double cleoConeThrust0(
const Particle*)
302 StoreObjPtr<EventShapeContainer> evtShapeCont;
304 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
305 return std::numeric_limits<float>::quiet_NaN();
307 return evtShapeCont->getCleoConeThrust(0);
310 double cleoConeThrust1(
const Particle*)
312 StoreObjPtr<EventShapeContainer> evtShapeCont;
314 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
315 return std::numeric_limits<float>::quiet_NaN();
317 return evtShapeCont->getCleoConeThrust(1);
320 double cleoConeThrust2(
const Particle*)
322 StoreObjPtr<EventShapeContainer> evtShapeCont;
324 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
325 return std::numeric_limits<float>::quiet_NaN();
327 return evtShapeCont->getCleoConeThrust(2);
330 double cleoConeThrust3(
const Particle*)
332 StoreObjPtr<EventShapeContainer> evtShapeCont;
334 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
335 return std::numeric_limits<float>::quiet_NaN();
337 return evtShapeCont->getCleoConeThrust(3);
340 double cleoConeThrust4(
const Particle*)
342 StoreObjPtr<EventShapeContainer> evtShapeCont;
344 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
345 return std::numeric_limits<float>::quiet_NaN();
347 return evtShapeCont->getCleoConeThrust(4);
350 double cleoConeThrust5(
const Particle*)
352 StoreObjPtr<EventShapeContainer> evtShapeCont;
354 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
355 return std::numeric_limits<float>::quiet_NaN();
357 return evtShapeCont->getCleoConeThrust(5);
360 double cleoConeThrust6(
const Particle*)
362 StoreObjPtr<EventShapeContainer> evtShapeCont;
364 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
365 return std::numeric_limits<float>::quiet_NaN();
367 return evtShapeCont->getCleoConeThrust(6);
370 double cleoConeThrust7(
const Particle*)
372 StoreObjPtr<EventShapeContainer> evtShapeCont;
374 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
375 return std::numeric_limits<float>::quiet_NaN();
377 return evtShapeCont->getCleoConeThrust(7);
380 double cleoConeThrust8(
const Particle*)
382 StoreObjPtr<EventShapeContainer> evtShapeCont;
384 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
385 return std::numeric_limits<float>::quiet_NaN();
387 return evtShapeCont->getCleoConeThrust(8);
391 double sphericity(
const Particle*)
393 StoreObjPtr<EventShapeContainer> evtShapeCont;
395 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
396 return std::numeric_limits<float>::quiet_NaN();
399 return 1.5 * (evtShapeCont->getSphericityEigenvalue(1) + evtShapeCont->getSphericityEigenvalue(2)) ;
402 double aplanarity(
const Particle*)
404 StoreObjPtr<EventShapeContainer> evtShapeCont;
406 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
407 return std::numeric_limits<float>::quiet_NaN();
410 return 1.5 * evtShapeCont->getSphericityEigenvalue(2);
413 double forwardHemisphereMass(
const Particle*)
415 StoreObjPtr<EventShapeContainer> evtShapeCont;
417 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
418 return std::numeric_limits<float>::quiet_NaN();
420 return evtShapeCont->getForwardHemisphere4Momentum().Mag();
423 double forwardHemisphereX(
const Particle*)
425 StoreObjPtr<EventShapeContainer> evtShapeCont;
427 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
428 return std::numeric_limits<float>::quiet_NaN();
430 return evtShapeCont->getForwardHemisphere4Momentum().Vect().X();
433 double forwardHemisphereY(
const Particle*)
435 StoreObjPtr<EventShapeContainer> evtShapeCont;
437 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
438 return std::numeric_limits<float>::quiet_NaN();
440 return evtShapeCont->getForwardHemisphere4Momentum().Vect().Y();
443 double forwardHemisphereZ(
const Particle*)
445 StoreObjPtr<EventShapeContainer> evtShapeCont;
447 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
448 return std::numeric_limits<float>::quiet_NaN();
450 return evtShapeCont->getForwardHemisphere4Momentum().Vect().Z();
453 double forwardHemisphereMomentum(
const Particle*)
455 StoreObjPtr<EventShapeContainer> evtShapeCont;
457 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
458 return std::numeric_limits<float>::quiet_NaN();
460 return evtShapeCont->getForwardHemisphere4Momentum().Vect().Mag();
463 double forwardHemisphereEnergy(
const Particle*)
465 StoreObjPtr<EventShapeContainer> evtShapeCont;
467 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
468 return std::numeric_limits<float>::quiet_NaN();
470 return evtShapeCont->getForwardHemisphere4Momentum().E();
476 double backwardHemisphereMass(
const Particle*)
478 StoreObjPtr<EventShapeContainer> evtShapeCont;
480 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
481 return std::numeric_limits<float>::quiet_NaN();
483 return evtShapeCont->getBackwardHemisphere4Momentum().Mag();
487 double backwardHemisphereX(
const Particle*)
489 StoreObjPtr<EventShapeContainer> evtShapeCont;
491 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
492 return std::numeric_limits<float>::quiet_NaN();
494 return evtShapeCont->getBackwardHemisphere4Momentum().Vect().X();
497 double backwardHemisphereY(
const Particle*)
499 StoreObjPtr<EventShapeContainer> evtShapeCont;
501 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
502 return std::numeric_limits<float>::quiet_NaN();
504 return evtShapeCont->getBackwardHemisphere4Momentum().Vect().Y();
507 double backwardHemisphereZ(
const Particle*)
509 StoreObjPtr<EventShapeContainer> evtShapeCont;
511 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
512 return std::numeric_limits<float>::quiet_NaN();
514 return evtShapeCont->getBackwardHemisphere4Momentum().Vect().Z();
517 double backwardHemisphereMomentum(
const Particle*)
519 StoreObjPtr<EventShapeContainer> evtShapeCont;
521 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
522 return std::numeric_limits<float>::quiet_NaN();
524 return evtShapeCont->getBackwardHemisphere4Momentum().Vect().Mag();
527 double backwardHemisphereEnergy(
const Particle*)
529 StoreObjPtr<EventShapeContainer> evtShapeCont;
531 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
532 return std::numeric_limits<float>::quiet_NaN();
534 return evtShapeCont->getBackwardHemisphere4Momentum().E();
541 double thrust(
const Particle*)
543 StoreObjPtr<EventShapeContainer> evtShapeCont;
545 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
546 return std::numeric_limits<float>::quiet_NaN();
548 return evtShapeCont->getThrust();
552 double thrustAxisX(
const Particle*)
554 StoreObjPtr<EventShapeContainer> evtShapeCont;
556 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
557 return std::numeric_limits<float>::quiet_NaN();
559 return evtShapeCont->getThrustAxis().X();
562 double thrustAxisY(
const Particle*)
564 StoreObjPtr<EventShapeContainer> evtShapeCont;
566 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
567 return std::numeric_limits<float>::quiet_NaN();
569 return evtShapeCont->getThrustAxis().Y();
572 double thrustAxisZ(
const Particle*)
574 StoreObjPtr<EventShapeContainer> evtShapeCont;
576 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
577 return std::numeric_limits<float>::quiet_NaN();
579 return evtShapeCont->getThrustAxis().Z();
583 double thrustAxisCosTheta(
const Particle*)
585 StoreObjPtr<EventShapeContainer> evtShapeCont;
587 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
588 return std::numeric_limits<float>::quiet_NaN();
590 return evtShapeCont->getThrustAxis().CosTheta();
596 if (arguments.size() == 1) {
597 auto variableName = arguments[0];
601 auto func = [var](
const Particle * particle) ->
double {
602 StoreObjPtr<EventShapeContainer> evtShapeCont;
605 B2ERROR(
"No EventShapeContainer object has been found in the datastore");
606 return std::numeric_limits<float>::quiet_NaN();
609 TVector3 newZ = evtShapeCont->getThrustAxis();
610 TVector3 newY(0, 0, 0);
611 if (newZ(2) == 0 and newZ(1) == 0)
618 TVector3 newX = newY.Cross(newZ);
620 UseReferenceFrame<CMSRotationFrame> signalframe(newX, newY, newZ);
622 return var->function(particle);
626 B2FATAL(
"Wrong number of arguments for meta function useThrustFrame. It only takes one argument, the variable name.");
631 VARIABLE_GROUP(
"EventShape");
633 REGISTER_VARIABLE(
"foxWolframR(i)", foxWolframR, R
"DOC(
634 [Eventbased] Ratio of the i-th to the 0-th order Fox Wolfram moments. The order ``i`` can go from 0 up to 8th.
636 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
637 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
639 REGISTER_VARIABLE("foxWolframH(i)", foxWolframH, R
"DOC(
640 [Eventbased] Returns i-th order Fox Wolfram moment. The order ``i`` can go from 0 up to 8th."
642 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
643 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
645 REGISTER_VARIABLE("harmonicMoment(i, axisName)", harmonicMoment, R
"DOC(
646 [Eventbased] Returns i-th order harmonic moment, calculated with respect to the axis ``axisName``. The order ``i`` can go from 0 up to 8th, the ``axisName`` can be either 'thrust' or 'collision'.
648 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
649 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
651 REGISTER_VARIABLE("cleoCone(i, axisName)", cleoCone, R
"DOC(
652 [Eventbased] Returns i-th order Cleo cone, calculated with respect to the axis ``axisName``. The order ``i`` can go from 0 up to 8th, the ``axisName`` can be either 'thrust' or 'collision'.
654 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
655 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
657 REGISTER_VARIABLE("useThrustFrame(variable)", useThrustFrame, R
"DOC(
658 Evaluates a variable value in the thrust reference frame.
660 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
661 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
665 REGISTER_VARIABLE("foxWolframR1", foxWolframR1, R
"DOC(
666 [Eventbased] Ratio of the 1-st to the 0-th order Fox Wolfram moments. This is just an alias of foxWolframR(1) defined for the user's convenience.
668 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
669 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
671 REGISTER_VARIABLE("foxWolframR2", foxWolframR2, R
"DOC(
672 [Eventbased] Ratio of the 2-nd to the 0-th order Fox Wolfram moments. This is just an alias of foxWolframR(2) defined for the user's convenience.
674 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
675 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
677 REGISTER_VARIABLE("foxWolframR3", foxWolframR3, R
"DOC(
678 [Eventbased] Ratio of the 3-rd to the 0-th order Fox Wolfram moments. This is just an alias of foxWolframR(3) defined for the user's convenience.
680 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
681 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
683 REGISTER_VARIABLE("foxWolframR4", foxWolframR4, R
"DOC(
684 [Eventbased] Ratio of the 4-th to the 0-th order Fox Wolfram moments. This is just an alias of foxWolframR(4) defined for the user's convenience.
686 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
687 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
690 REGISTER_VARIABLE("harmonicMomentThrust0", harmonicMomentThrust0, R
"DOC(
691 [Eventbased] Harmonic moment of the 0th order calculated with respect to the thrust axis.
693 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
694 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
696 REGISTER_VARIABLE("harmonicMomentThrust1", harmonicMomentThrust1, R
"DOC(
697 [Eventbased] Harmonic moment of the 1st order calculated with respect to the thrust axis.
699 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
700 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
702 REGISTER_VARIABLE("harmonicMomentThrust2", harmonicMomentThrust2, R
"DOC(
703 [Eventbased] Harmonic moment of the 2nd order calculated with respect to the thrust axis.
705 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
706 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
708 REGISTER_VARIABLE("harmonicMomentThrust3", harmonicMomentThrust3, R
"DOC(
709 [Eventbased] Harmonic moment of the 3rd order calculated with respect to the thrust axis.
711 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
712 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
714 REGISTER_VARIABLE("harmonicMomentThrust4", harmonicMomentThrust4, R
"DOC(
715 [Eventbased] Harmonic moment of the 4th order calculated with respect to the thrust axis.
717 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
718 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
721 REGISTER_VARIABLE("cleoConeThrust0", cleoConeThrust0, R
"DOC(
722 [Eventbased] 0th Cleo cone calculated with respect to the thrust axis.
724 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
725 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
727 REGISTER_VARIABLE("cleoConeThrust1", cleoConeThrust1, R
"DOC(
728 [Eventbased] 1st Cleo cone calculated with respect to the thrust axis.
730 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
731 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
733 REGISTER_VARIABLE("cleoConeThrust2", cleoConeThrust2, R
"DOC(
734 [Eventbased] 2nd Cleo cone calculated with respect to the thrust axis.
736 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
737 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
739 REGISTER_VARIABLE("cleoConeThrust3", cleoConeThrust3, R
"DOC(
740 [Eventbased] 3rd Cleo cone calculated with respect to the thrust axis.
742 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
743 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
745 REGISTER_VARIABLE("cleoConeThrust4", cleoConeThrust4, R
"DOC(
746 [Eventbased] 4th Cleo cone calculated with respect to the thrust axis.
748 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
749 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
751 REGISTER_VARIABLE("cleoConeThrust5", cleoConeThrust5, R
"DOC(
752 [Eventbased] 5th Cleo cone calculated with respect to the thrust axis.
754 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
755 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
757 REGISTER_VARIABLE("cleoConeThrust6", cleoConeThrust6, R
"DOC(
758 [Eventbased] 6th Cleo cone calculated with respect to the thrust axis.
760 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
761 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
763 REGISTER_VARIABLE("cleoConeThrust7", cleoConeThrust7, R
"DOC(
764 [Eventbased] 7th Cleo cone calculated with respect to the thrust axis.
766 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
767 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
769 REGISTER_VARIABLE("cleoConeThrust8", cleoConeThrust8, R
"DOC(
770 [Eventbased] 8th Cleo cone calculated with respect to the thrust axis.
772 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
773 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
777 REGISTER_VARIABLE("sphericity", sphericity, R
"DOC(
778 [Eventbased] Event sphericity, defined as the linear combination of the sphericity eigenvalues :math:`\\lambda_i`: :math:`S = (3/2)(\\lambda_2+\\lambda_3)`.
780 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
781 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
783 REGISTER_VARIABLE("aplanarity", aplanarity, R
"DOC(
784 [Eventbased] Event aplanarity, defined as the 3/2 of the third sphericity eigenvalue.
786 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
787 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
790 REGISTER_VARIABLE("thrust", thrust, R
"DOC(
791 [Eventbased] Event thrust.
793 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
794 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
796 REGISTER_VARIABLE("thrustAxisX", thrustAxisX, R
"DOC(
797 [Eventbased] X component of the thrust axis.
799 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
800 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
802 REGISTER_VARIABLE("thrustAxisY", thrustAxisY, R
"DOC(
803 [Eventbased] Y component of the thrust axis.
805 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
806 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
808 REGISTER_VARIABLE("thrustAxisZ", thrustAxisZ, R
"DOC(
809 [Eventbased] Z component of the thrust axis.
811 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
812 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
814 REGISTER_VARIABLE("thrustAxisCosTheta", thrustAxisCosTheta, R
"DOC(
815 [Eventbased] Cosine of the polar angle component of the thrust axis.
817 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
818 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
821 REGISTER_VARIABLE("forwardHemisphereMass", forwardHemisphereMass, R
"DOC(
822 [Eventbased] Invariant mass of the particles flying in the same direction as the thrust axis.
824 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
825 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
827 REGISTER_VARIABLE("forwardHemisphereX", forwardHemisphereX, R
"DOC(
828 [Eventbased] X component of the total momentum of the particles flying in the same direction as the thrust axis.
830 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
831 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
833 REGISTER_VARIABLE("forwardHemisphereY", forwardHemisphereY, R
"DOC(
834 [Eventbased] Y component of the total momentum of the particles flying in the same direction as the thrust axis.
836 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
837 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
839 REGISTER_VARIABLE("forwardHemisphereZ", forwardHemisphereZ, R
"DOC(
840 [Eventbased] Z component of the total momentum of the particles flying in the same direction of the thrust axis.
842 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
843 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
845 REGISTER_VARIABLE("forwardHemisphereMomentum", forwardHemisphereMomentum, R
"DOC(
846 [Eventbased] Total momentum of the particles flying in the same direction as the thrust axis.
848 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
849 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
851 REGISTER_VARIABLE("forwardHemisphereEnergy", forwardHemisphereEnergy, R
"DOC(
852 [Eventbased] Total energy of the particles flying in the same direction as the thrust axis.
854 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
855 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
858 REGISTER_VARIABLE("backwardHemisphereMass", backwardHemisphereMass, R
"DOC(
859 [Eventbased] Invariant mass of the particles flying in the direction opposite to the thrust axis.
861 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
862 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
864 REGISTER_VARIABLE("backwardHemisphereX", backwardHemisphereX, R
"DOC(
865 [Eventbased] X component of the total momentum of the particles flying in the direction opposite to the thrust axis.
867 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
868 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
870 REGISTER_VARIABLE("backwardHemisphereY", backwardHemisphereY, R
"DOC(
871 [Eventbased] Y component of the total momentum of the particles flying in the direction opposite to the thrust axis.
873 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
874 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
876 REGISTER_VARIABLE("backwardHemisphereZ", backwardHemisphereZ, R
"DOC(
877 [Eventbased] Z component of the total momentum of the particles flying in the direction opposite to the thrust axis.
879 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
880 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
882 REGISTER_VARIABLE("backwardHemisphereMomentum", backwardHemisphereMomentum, R
"DOC(
883 [Eventbased] Total momentum of the particles flying in the direction opposite to the thrust axis.
885 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
886 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
888 REGISTER_VARIABLE("backwardHemisphereEnergy", backwardHemisphereEnergy, R
"DOC(
889 [Eventbased] Total energy of the particles flying in the direction opposite to the thrust axis.
891 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
892 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
const Var * getVariable(std::string name)
Get the variable belonging to the given key.
static Manager & Instance()
get singleton instance.
std::function< double(const Particle *)> FunctionPtr
NOTE: the python interface is documented manually in analysis/doc/Variables.rst (because we use ROOT ...
Abstract base class for different kinds of events.