471 def generate(self):
472 """Generate constraints """
473 print("Generating constraints for CDC wires...")
474 consts = []
475
476 layers = self.layers
477
478 layer_rigid = self.layer_rigid
479
480 if layer_rigid:
481 for layer in layers:
482 const = Constraint()
483
484 for wire in range(0, self.wires_in_layer[layer]):
485 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), 1.)
486 consts.append(const)
487
488 for layer in layers:
489 const = Constraint()
490
491 for wire in range(0, self.wires_in_layer[layer]):
492 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), 1.)
493 consts.append(const)
494
495 for layer in set(layers) - set(self.hemisphere):
496 const = Constraint()
497
498 for wire in range(0, self.wires_in_layer[layer]):
499
501
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))
504 consts.append(const)
505
506 for layer in layers:
507 const = Constraint()
508
509 for wire in range(0, self.wires_in_layer[layer]):
510 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), 1.)
511 consts.append(const)
512
513 for layer in layers:
514 const = Constraint()
515
516 for wire in range(0, self.wires_in_layer[layer]):
517 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), 1.)
518 consts.append(const)
519
520 for layer in set(layers) - set(self.hemisphere):
521 const = Constraint()
522
523 for wire in range(0, self.wires_in_layer[layer]):
524
526
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))
529 consts.append(const)
530
531 for layer in self.hemisphere:
532 const = Constraint()
533
534 for wire in range(0, self.wires_in_layer[layer]):
535
537
538 if math.cos(wirePhi) <= 0.:
539 continue
540
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))
543 consts.append(const)
544
545 for layer in self.hemisphere:
546 const = Constraint()
547
548 for wire in range(0, self.wires_in_layer[layer]):
549
551
552 if math.cos(wirePhi) > 0.:
553 continue
554
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))
557 consts.append(const)
558
559 for layer in self.hemisphere:
560 const = Constraint()
561
562 for wire in range(0, self.wires_in_layer[layer]):
563
565
566 if math.cos(wirePhi) <= 0.:
567 continue
568
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))
571 consts.append(const)
572
573 for layer in self.hemisphere:
574 const = Constraint()
575
576 for wire in range(0, self.wires_in_layer[layer]):
577
579
580 if math.cos(wirePhi) > 0.:
581 continue
582
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))
585 consts.append(const)
586
587
588 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
589 const = Constraint()
590
591 for wire in range(0, self.wires_in_layer[layer]):
592
594
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.)
598 consts.append(const)
599
600 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
601 const = Constraint()
602
603 for wire in range(0, self.wires_in_layer[layer]):
604
606
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.)
610 consts.append(const)
611
612
613 for layer in self.hemisphere:
614 const = Constraint()
615
616 for wire in range(0, self.wires_in_layer[layer]):
617
619
620 if math.sin(wirePhi) >= 0:
621 continue
622
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.)
626 consts.append(const)
627
628 for layer in self.hemisphere:
629 const = Constraint()
630
631 for wire in range(0, self.wires_in_layer[layer]):
632
634
635 if math.sin(wirePhi) < 0:
636 continue
637
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.)
641 consts.append(const)
642
643 for layer in self.hemisphere:
644 const = Constraint()
645
646 for wire in range(0, self.wires_in_layer[layer]):
647
649
650 if math.sin(wirePhi) >= 0:
651 continue
652
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.)
656 consts.append(const)
657
658 for layer in self.hemisphere:
659 const = Constraint()
660
661 for wire in range(0, self.wires_in_layer[layer]):
662
664
665 if math.sin(wirePhi) < 0:
666 continue
667
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.)
671 consts.append(const)
672
673 if self.cdc_radius:
674 const = Constraint()
675 for layer in layers:
676
677 for wire in range(0, self.wires_in_layer[layer]):
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))
681 consts.append(const)
682
683 const = Constraint()
684 for layer in layers:
685
686 for wire in range(0, self.wires_in_layer[layer]):
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))
690 consts.append(const)
691
692 return consts
693
694
695
static const CDCWire * getInstance(const WireID &wireID)
Getter from the wireID convenience object. Does not construct a new object.
Class to identify a wire inside the CDC.