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 B2ERROR(
"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)
617 TVector3 newX = newY.Cross(newZ);
619 UseReferenceFrame<CMSRotationFrame> signalframe(newX, newY, newZ);
621 return var->function(particle);
625 B2FATAL(
"Wrong number of arguments for meta function useThrustFrame. It only takes one argument, the variable name.");
630 VARIABLE_GROUP(
"EventShape");
632 REGISTER_VARIABLE(
"foxWolframR(i)", foxWolframR, R
"DOC(
633 [Eventbased] Ratio of the i-th to the 0-th order Fox Wolfram moments. The order ``i`` can go from 0 up to 8th.
635 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
636 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
638 REGISTER_VARIABLE("foxWolframH(i)", foxWolframH, R
"DOC(
639 [Eventbased] Returns i-th order Fox Wolfram moment. The order ``i`` can go from 0 up to 8th."
641 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
642 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
644 REGISTER_VARIABLE("harmonicMoment(i, axisName)", harmonicMoment, R
"DOC(
645 [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'.
647 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
648 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
650 REGISTER_VARIABLE("cleoCone(i, axisName)", cleoCone, R
"DOC(
651 [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'.
653 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
654 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
656 REGISTER_VARIABLE("useThrustFrame(variable)", useThrustFrame, R
"DOC(
657 Evaluates a variable value in the thrust reference frame.
659 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
660 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
664 REGISTER_VARIABLE("foxWolframR1", foxWolframR1, R
"DOC(
665 [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.
667 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
668 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
670 REGISTER_VARIABLE("foxWolframR2", foxWolframR2, R
"DOC(
671 [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.
673 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
674 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
676 REGISTER_VARIABLE("foxWolframR3", foxWolframR3, R
"DOC(
677 [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.
679 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
680 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
682 REGISTER_VARIABLE("foxWolframR4", foxWolframR4, R
"DOC(
683 [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.
685 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
686 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
689 REGISTER_VARIABLE("harmonicMomentThrust0", harmonicMomentThrust0, R
"DOC(
690 [Eventbased] Harmonic moment of the 0th order calculated with respect to the thrust axis.
692 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
693 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
695 REGISTER_VARIABLE("harmonicMomentThrust1", harmonicMomentThrust1, R
"DOC(
696 [Eventbased] Harmonic moment of the 1st order calculated with respect to the thrust axis.
698 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
699 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
701 REGISTER_VARIABLE("harmonicMomentThrust2", harmonicMomentThrust2, R
"DOC(
702 [Eventbased] Harmonic moment of the 2nd order calculated with respect to the thrust axis.
704 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
705 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
707 REGISTER_VARIABLE("harmonicMomentThrust3", harmonicMomentThrust3, R
"DOC(
708 [Eventbased] Harmonic moment of the 3rd order calculated with respect to the thrust axis.
710 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
711 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
713 REGISTER_VARIABLE("harmonicMomentThrust4", harmonicMomentThrust4, R
"DOC(
714 [Eventbased] Harmonic moment of the 4th order calculated with respect to the thrust axis.
716 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
717 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
720 REGISTER_VARIABLE("cleoConeThrust0", cleoConeThrust0, R
"DOC(
721 [Eventbased] 0th Cleo cone calculated with respect to the thrust axis.
723 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
724 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
726 REGISTER_VARIABLE("cleoConeThrust1", cleoConeThrust1, R
"DOC(
727 [Eventbased] 1st Cleo cone calculated with respect to the thrust axis.
729 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
730 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
732 REGISTER_VARIABLE("cleoConeThrust2", cleoConeThrust2, R
"DOC(
733 [Eventbased] 2nd Cleo cone calculated with respect to the thrust axis.
735 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
736 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
738 REGISTER_VARIABLE("cleoConeThrust3", cleoConeThrust3, R
"DOC(
739 [Eventbased] 3rd Cleo cone calculated with respect to the thrust axis.
741 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
742 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
744 REGISTER_VARIABLE("cleoConeThrust4", cleoConeThrust4, R
"DOC(
745 [Eventbased] 4th Cleo cone calculated with respect to the thrust axis.
747 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
748 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
750 REGISTER_VARIABLE("cleoConeThrust5", cleoConeThrust5, R
"DOC(
751 [Eventbased] 5th Cleo cone calculated with respect to the thrust axis.
753 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
754 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
756 REGISTER_VARIABLE("cleoConeThrust6", cleoConeThrust6, R
"DOC(
757 [Eventbased] 6th Cleo cone calculated with respect to the thrust axis.
759 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
760 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
762 REGISTER_VARIABLE("cleoConeThrust7", cleoConeThrust7, R
"DOC(
763 [Eventbased] 7th Cleo cone calculated with respect to the thrust axis.
765 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
766 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
768 REGISTER_VARIABLE("cleoConeThrust8", cleoConeThrust8, R
"DOC(
769 [Eventbased] 8th Cleo cone calculated with respect to the thrust axis.
771 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
772 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
776 REGISTER_VARIABLE("sphericity", sphericity, R
"DOC(
777 [Eventbased] Event sphericity, defined as the linear combination of the sphericity eigenvalues :math:`\\lambda_i`: :math:`S = (3/2)(\\lambda_2+\\lambda_3)`.
779 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
780 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
782 REGISTER_VARIABLE("aplanarity", aplanarity, R
"DOC(
783 [Eventbased] Event aplanarity, defined as the 3/2 of the third sphericity eigenvalue.
785 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
786 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
789 REGISTER_VARIABLE("thrust", thrust, R
"DOC(
790 [Eventbased] Event thrust.
792 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
793 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
795 REGISTER_VARIABLE("thrustAxisX", thrustAxisX, R
"DOC(
796 [Eventbased] X component of the thrust axis.
798 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
799 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
801 REGISTER_VARIABLE("thrustAxisY", thrustAxisY, R
"DOC(
802 [Eventbased] Y component of the thrust axis.
804 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
805 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
807 REGISTER_VARIABLE("thrustAxisZ", thrustAxisZ, R
"DOC(
808 [Eventbased] Z component of the thrust axis.
810 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
811 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
813 REGISTER_VARIABLE("thrustAxisCosTheta", thrustAxisCosTheta, R
"DOC(
814 [Eventbased] Cosine of the polar angle component of the thrust axis.
816 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
817 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
820 REGISTER_VARIABLE("forwardHemisphereMass", forwardHemisphereMass, R
"DOC(
821 [Eventbased] Invariant mass of the particles flying in the same direction as the thrust axis.
823 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
824 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
826 REGISTER_VARIABLE("forwardHemisphereX", forwardHemisphereX, R
"DOC(
827 [Eventbased] X component of the total momentum of the particles flying in the same direction as the thrust axis.
829 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
830 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
832 REGISTER_VARIABLE("forwardHemisphereY", forwardHemisphereY, R
"DOC(
833 [Eventbased] Y component of the total momentum of the particles flying in the same direction as the thrust axis.
835 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
836 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
838 REGISTER_VARIABLE("forwardHemisphereZ", forwardHemisphereZ, R
"DOC(
839 [Eventbased] Z component of the total momentum of the particles flying in the same direction of the thrust axis.
841 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
842 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
844 REGISTER_VARIABLE("forwardHemisphereMomentum", forwardHemisphereMomentum, R
"DOC(
845 [Eventbased] Total momentum of the particles flying in the same direction as the thrust axis.
847 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
848 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
850 REGISTER_VARIABLE("forwardHemisphereEnergy", forwardHemisphereEnergy, R
"DOC(
851 [Eventbased] Total energy of the particles flying in the same direction as the thrust axis.
853 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
854 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
857 REGISTER_VARIABLE("backwardHemisphereMass", backwardHemisphereMass, R
"DOC(
858 [Eventbased] Invariant mass of the particles flying in the direction opposite to the thrust axis.
860 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
861 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
863 REGISTER_VARIABLE("backwardHemisphereX", backwardHemisphereX, R
"DOC(
864 [Eventbased] X component of the total momentum of the particles flying in the direction opposite to the thrust axis.
866 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
867 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
869 REGISTER_VARIABLE("backwardHemisphereY", backwardHemisphereY, R
"DOC(
870 [Eventbased] Y component of the total momentum of the particles flying in the direction opposite to the thrust axis.
872 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
873 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
875 REGISTER_VARIABLE("backwardHemisphereZ", backwardHemisphereZ, R
"DOC(
876 [Eventbased] Z component of the total momentum of the particles flying in the direction opposite to the thrust axis.
878 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
879 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
881 REGISTER_VARIABLE("backwardHemisphereMomentum", backwardHemisphereMomentum, R
"DOC(
882 [Eventbased] Total momentum of the particles flying in the direction opposite to the thrust axis.
884 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
885 .. seealso:: :ref:`analysis_eventshape` and `modularAnalysis.buildEventShape`.
887 REGISTER_VARIABLE("backwardHemisphereEnergy", backwardHemisphereEnergy, R
"DOC(
888 [Eventbased] Total energy of the particles flying in the direction opposite to the thrust axis.
890 .. warning:: You have to run the Event Shape builder module for this variable to be meaningful.
891 .. 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.