470 """Generate constraints """
471 print("Generating constraints for CDC wires...")
479 # sum of wire X (BWD) in layer
480 for wire in range(0, self.wires_in_layer[layer]):
481 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), 1.)
486 # sum of wire Y (BWD) in layer
487 for wire in range(0, self.wires_in_layer[layer]):
488 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), 1.)
491 for layer in set(layers) - set(self.hemisphere):
493 # sum of wire rotations (BWD) in layer
494 for wire in range(0, self.wires_in_layer[layer]):
496 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
498 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), -math.sin(wirePhi))
499 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.cos(wirePhi))
504 # sum of wire X (FWD) in layer
505 for wire in range(0, self.wires_in_layer[layer]):
506 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), 1.)
511 # sum of wire Y (FWD) in layer
512 for wire in range(0, self.wires_in_layer[layer]):
513 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), 1.)
516 for layer in set(layers) - set(self.hemisphere):
518 # sum of wire rotations (FWD) in layer
519 for wire in range(0, self.wires_in_layer[layer]):
521 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
523 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), -math.sin(wirePhi))
524 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.cos(wirePhi))
527 for layer in self.hemisphere:
529 # sum of wire rotations (BWD) in layer ... RIGHT hemisphere
530 for wire in range(0, self.wires_in_layer[layer]):
532 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
534 if math.cos(wirePhi) <= 0.:
537 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), -math.sin(wirePhi))
538 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.cos(wirePhi))
541 for layer in self.hemisphere:
543 # sum of wire rotations (BWD) in layer ... LEFT hemisphere
544 for wire in range(0, self.wires_in_layer[layer]):
546 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
548 if math.cos(wirePhi) > 0.:
551 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), -math.sin(wirePhi))
552 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.cos(wirePhi))
555 for layer in self.hemisphere:
557 # sum of wire rotations (FWD) in layer ... RIGHT
558 for wire in range(0, self.wires_in_layer[layer]):
560 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
562 if math.cos(wirePhi) <= 0.:
565 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), -math.sin(wirePhi))
566 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.cos(wirePhi))
569 for layer in self.hemisphere:
571 # sum of wire rotations (FWD) in layer ... LEFT
572 for wire in range(0, self.wires_in_layer[layer]):
574 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
576 if math.cos(wirePhi) > 0.:
579 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), -math.sin(wirePhi))
580 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.cos(wirePhi))
584 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
586 # sum of wire rotations (BWD) in layer
587 for wire in range(0, self.wires_in_layer[layer]):
589 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
591 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
592 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
593 const.add(self.get_label(layer, 0, 0), 0.)
596 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
598 # sum of wire rotations (FWD) in layer
599 for wire in range(0, self.wires_in_layer[layer]):
601 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
603 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
604 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
605 const.add(self.get_label(layer, 0, 0), 0.)
609 for layer in self.hemisphere:
611 # sum of wire rotations (BWD) in layer
612 for wire in range(0, self.wires_in_layer[layer]):
614 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
616 if math.sin(wirePhi) >= 0:
619 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
620 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
621 const.add(self.get_label(layer, 0, 0), 0.)
624 for layer in self.hemisphere:
626 # sum of wire rotations (BWD) in layer
627 for wire in range(0, self.wires_in_layer[layer]):
629 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
631 if math.sin(wirePhi) < 0:
634 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
635 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
636 const.add(self.get_label(layer, 0, 0), 0.)
639 for layer in self.hemisphere:
641 # sum of wire rotations (FWD) in layer
642 for wire in range(0, self.wires_in_layer[layer]):
644 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
646 if math.sin(wirePhi) >= 0:
649 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
650 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
651 const.add(self.get_label(layer, 0, 0), 0.)
654 for layer in self.hemisphere:
656 # sum of wire rotations (FWD) in layer
657 for wire in range(0, self.wires_in_layer[layer]):
659 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
661 if math.sin(wirePhi) < 0:
664 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
665 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
666 const.add(self.get_label(layer, 0, 0), 0.)
672 # sum of wire rotations (BWD) in layer
673 for wire in range(0, self.wires_in_layer[layer]):
674 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
675 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
676 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
681 # sum of wire rotations (FWD) in layer
682 for wire in range(0, self.wires_in_layer[layer]):
683 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
684 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
685 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
691# ------------ Main: Generate some constraint files with default config (no time-dependence, default global tags) ------