469 def generate(self):
470 """Generate constraints """
471 print("Generating constraints for CDC wires...")
472 consts = []
473
474 layers = self.layers
475
476 if self.layer_rigid:
477 for layer in layers:
478 const = Constraint()
479
480 for wire in range(0, self.wires_in_layer[layer]):
481 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdX), 1.)
482 consts.append(const)
483
484 for layer in layers:
485 const = Constraint()
486
487 for wire in range(0, self.wires_in_layer[layer]):
488 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireBwdY), 1.)
489 consts.append(const)
490
491 for layer in set(layers) - set(self.hemisphere):
492 const = Constraint()
493
494 for wire in range(0, self.wires_in_layer[layer]):
495
497
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))
500 consts.append(const)
501
502 for layer in layers:
503 const = Constraint()
504
505 for wire in range(0, self.wires_in_layer[layer]):
506 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdX), 1.)
507 consts.append(const)
508
509 for layer in layers:
510 const = Constraint()
511
512 for wire in range(0, self.wires_in_layer[layer]):
513 const.add(self.get_label(layer, wire, Belle2.CDCAlignment.wireFwdY), 1.)
514 consts.append(const)
515
516 for layer in set(layers) - set(self.hemisphere):
517 const = Constraint()
518
519 for wire in range(0, self.wires_in_layer[layer]):
520
522
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))
525 consts.append(const)
526
527 for layer in self.hemisphere:
528 const = Constraint()
529
530 for wire in range(0, self.wires_in_layer[layer]):
531
533
534 if math.cos(wirePhi) <= 0.:
535 continue
536
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))
539 consts.append(const)
540
541 for layer in self.hemisphere:
542 const = Constraint()
543
544 for wire in range(0, self.wires_in_layer[layer]):
545
547
548 if math.cos(wirePhi) > 0.:
549 continue
550
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))
553 consts.append(const)
554
555 for layer in self.hemisphere:
556 const = Constraint()
557
558 for wire in range(0, self.wires_in_layer[layer]):
559
561
562 if math.cos(wirePhi) <= 0.:
563 continue
564
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))
567 consts.append(const)
568
569 for layer in self.hemisphere:
570 const = Constraint()
571
572 for wire in range(0, self.wires_in_layer[layer]):
573
575
576 if math.cos(wirePhi) > 0.:
577 continue
578
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))
581 consts.append(const)
582
583
584 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
585 const = Constraint()
586
587 for wire in range(0, self.wires_in_layer[layer]):
588
590
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.)
594 consts.append(const)
595
596 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
597 const = Constraint()
598
599 for wire in range(0, self.wires_in_layer[layer]):
600
602
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.)
606 consts.append(const)
607
608
609 for layer in self.hemisphere:
610 const = Constraint()
611
612 for wire in range(0, self.wires_in_layer[layer]):
613
615
616 if math.sin(wirePhi) >= 0:
617 continue
618
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.)
622 consts.append(const)
623
624 for layer in self.hemisphere:
625 const = Constraint()
626
627 for wire in range(0, self.wires_in_layer[layer]):
628
630
631 if math.sin(wirePhi) < 0:
632 continue
633
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.)
637 consts.append(const)
638
639 for layer in self.hemisphere:
640 const = Constraint()
641
642 for wire in range(0, self.wires_in_layer[layer]):
643
645
646 if math.sin(wirePhi) >= 0:
647 continue
648
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.)
652 consts.append(const)
653
654 for layer in self.hemisphere:
655 const = Constraint()
656
657 for wire in range(0, self.wires_in_layer[layer]):
658
660
661 if math.sin(wirePhi) < 0:
662 continue
663
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.)
667 consts.append(const)
668
669 if self.cdc_radius:
670 const = Constraint()
671 for layer in layers:
672
673 for wire in range(0, self.wires_in_layer[layer]):
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))
677 consts.append(const)
678
679 const = Constraint()
680 for layer in layers:
681
682 for wire in range(0, self.wires_in_layer[layer]):
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))
686 consts.append(const)
687
688 return consts
689
690
691
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.