472 """Generate constraints """
473 print("Generating constraints for CDC wires...")
478 layer_rigid = self.layer_rigid
483 # sum of wire X (BWD) in layer
484 for wire in range(0, self.wires_in_layer[layer]):
485 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), 1.)
490 # sum of wire Y (BWD) in layer
491 for wire in range(0, self.wires_in_layer[layer]):
492 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), 1.)
495 for layer in set(layers) - set(self.hemisphere):
497 # sum of wire rotations (BWD) in layer
498 for wire in range(0, self.wires_in_layer[layer]):
500 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
502 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), -math.sin(wirePhi))
503 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.cos(wirePhi))
508 # sum of wire X (FWD) in layer
509 for wire in range(0, self.wires_in_layer[layer]):
510 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), 1.)
515 # sum of wire Y (FWD) in layer
516 for wire in range(0, self.wires_in_layer[layer]):
517 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), 1.)
520 for layer in set(layers) - set(self.hemisphere):
522 # sum of wire rotations (FWD) in layer
523 for wire in range(0, self.wires_in_layer[layer]):
525 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
527 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), -math.sin(wirePhi))
528 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.cos(wirePhi))
531 for layer in self.hemisphere:
533 # sum of wire rotations (BWD) in layer ... RIGHT hemisphere
534 for wire in range(0, self.wires_in_layer[layer]):
536 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
538 if math.cos(wirePhi) <= 0.:
541 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), -math.sin(wirePhi))
542 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.cos(wirePhi))
545 for layer in self.hemisphere:
547 # sum of wire rotations (BWD) in layer ... LEFT hemisphere
548 for wire in range(0, self.wires_in_layer[layer]):
550 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
552 if math.cos(wirePhi) > 0.:
555 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), -math.sin(wirePhi))
556 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.cos(wirePhi))
559 for layer in self.hemisphere:
561 # sum of wire rotations (FWD) in layer ... RIGHT
562 for wire in range(0, self.wires_in_layer[layer]):
564 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
566 if math.cos(wirePhi) <= 0.:
569 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), -math.sin(wirePhi))
570 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.cos(wirePhi))
573 for layer in self.hemisphere:
575 # sum of wire rotations (FWD) in layer ... LEFT
576 for wire in range(0, self.wires_in_layer[layer]):
578 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
580 if math.cos(wirePhi) > 0.:
583 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), -math.sin(wirePhi))
584 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.cos(wirePhi))
588 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
590 # sum of wire rotations (BWD) in layer
591 for wire in range(0, self.wires_in_layer[layer]):
593 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
595 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
596 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
597 const.add(self.get_label(layer, 0, 0), 0.)
600 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
602 # sum of wire rotations (FWD) in layer
603 for wire in range(0, self.wires_in_layer[layer]):
605 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
607 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
608 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
609 const.add(self.get_label(layer, 0, 0), 0.)
613 for layer in self.hemisphere:
615 # sum of wire rotations (BWD) in layer
616 for wire in range(0, self.wires_in_layer[layer]):
618 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
620 if math.sin(wirePhi) >= 0:
623 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
624 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
625 const.add(self.get_label(layer, 0, 0), 0.)
628 for layer in self.hemisphere:
630 # sum of wire rotations (BWD) in layer
631 for wire in range(0, self.wires_in_layer[layer]):
633 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
635 if math.sin(wirePhi) < 0:
638 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
639 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
640 const.add(self.get_label(layer, 0, 0), 0.)
643 for layer in self.hemisphere:
645 # sum of wire rotations (FWD) in layer
646 for wire in range(0, self.wires_in_layer[layer]):
648 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
650 if math.sin(wirePhi) >= 0:
653 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
654 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
655 const.add(self.get_label(layer, 0, 0), 0.)
658 for layer in self.hemisphere:
660 # sum of wire rotations (FWD) in layer
661 for wire in range(0, self.wires_in_layer[layer]):
663 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
665 if math.sin(wirePhi) < 0:
668 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
669 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
670 const.add(self.get_label(layer, 0, 0), 0.)
676 # sum of wire rotations (BWD) in layer
677 for wire in range(0, self.wires_in_layer[layer]):
678 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
679 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), +math.cos(wirePhi))
680 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), +math.sin(wirePhi))
685 # sum of wire rotations (FWD) in layer
686 for wire in range(0, self.wires_in_layer[layer]):
687 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
688 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), +math.cos(wirePhi))
689 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), +math.sin(wirePhi))
695# ------------ Main: Generate some constraint files with default config (no time-dependence, default global tags) ------