Belle II Software development
CDCWireConstraints Class Reference
Inheritance diagram for CDCWireConstraints:
Constraints

Public Member Functions

 __init__ (self, filename='cdc-wire-constraints.txt', layers=None, layer_rigid=True, layer_radius=None, cdc_radius=False, hemisphere=None)
 
 configure_collector (self, collector)
 
 get_label (self, layer, wire, parameter)
 
 generate (self)
 

Public Attributes

 layers = layers
 set list of layers
 
 layer_rigid = layer_rigid
 6 x 56 (6/layer) constraints.
 
 layer_radius = layer_radius
 set list of layer radii
 
 cdc_radius = cdc_radius
 2 Constraints: Sum(dr)=0 for all wires in CDC at each end-plate -> "average CDC radius" kept same by this constraint (1 per CDC)
 
 hemisphere = hemisphere
 set list of layers
 
 filename = filename
 File name.
 

Static Public Attributes

list wires_in_layer
 CDC layer/wire configuration.
 

Detailed Description

Various constraints for CDC wires (w.r.t. layers)

Definition at line 386 of file constraints.py.

Constructor & Destructor Documentation

◆ __init__()

__init__ ( self,
filename = 'cdc-wire-constraints.txt',
layers = None,
layer_rigid = True,
layer_radius = None,
cdc_radius = False,
hemisphere = None )
Initialize constraint

Parameters
----------
filename : str
  Can override the default file name
layers : list (int)
  List of layer numbers for which to generate the constraints (default is 0..55)
layer_rigid : bool
  6 constraints - fix sum of shifts of wire ends in x/y/rotation at fwd/bwd end-plate
layer_radius : list(int)
  2 constraints to fix average change of layer radius (wires in layer moving away from origin) for all layers in list
cdc_radius : bool
  1 constraint - fix average change in CDC radius from all wires
hemisphere : list(int)
  Modifies rigid and layer_radius (layer_radius constraint is added if not present for selected layer(s))
  constraint by splitting the constraints for a given list of layers to L/R up/down half of CDC

Definition at line 403 of file constraints.py.

410 hemisphere=None):
411 """Initialize constraint
412
413 Parameters
414 ----------
415 filename : str
416 Can override the default file name
417 layers : list (int)
418 List of layer numbers for which to generate the constraints (default is 0..55)
419 layer_rigid : bool
420 6 constraints - fix sum of shifts of wire ends in x/y/rotation at fwd/bwd end-plate
421 layer_radius : list(int)
422 2 constraints to fix average change of layer radius (wires in layer moving away from origin) for all layers in list
423 cdc_radius : bool
424 1 constraint - fix average change in CDC radius from all wires
425 hemisphere : list(int)
426 Modifies rigid and layer_radius (layer_radius constraint is added if not present for selected layer(s))
427 constraint by splitting the constraints for a given list of layers to L/R up/down half of CDC
428
429 """
430
431 super().__init__(filename)
432
433 if layers is None:
434 layers = list(range(0, 56))
435
436 self.layers = layers
437
441 self.layer_rigid = layer_rigid
442
444 if layer_radius is None:
445 layer_radius = []
446
447 self.layer_radius = layer_radius
448
450 self.cdc_radius = cdc_radius
451
452 if hemisphere is None:
453 hemisphere = []
454
455 self.hemisphere = hemisphere
456

Member Function Documentation

◆ configure_collector()

configure_collector ( self,
collector )
Enables wire-by-wire derivatives in collector

Reimplemented from Constraints.

Definition at line 457 of file constraints.py.

457 def configure_collector(self, collector):
458 """Enables wire-by-wire derivatives in collector
459 """
460 basf2.B2WARNING("Adding CDC wire constraints -> enabling wire-by-wire alignment derivatives")
461 collector.param('enableWireByWireAlignment', True)
462

◆ generate()

generate ( self)
Generate constraints 

Reimplemented from Constraints.

Definition at line 471 of file constraints.py.

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 # 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.)
486 consts.append(const)
487
488 for layer in layers:
489 const = Constraint()
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.)
493 consts.append(const)
494
495 for layer in set(layers) - set(self.hemisphere):
496 const = Constraint()
497 # sum of wire rotations (BWD) in layer
498 for wire in range(0, self.wires_in_layer[layer]):
499
500 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # 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.)
511 consts.append(const)
512
513 for layer in layers:
514 const = Constraint()
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.)
518 consts.append(const)
519
520 for layer in set(layers) - set(self.hemisphere):
521 const = Constraint()
522 # sum of wire rotations (FWD) in layer
523 for wire in range(0, self.wires_in_layer[layer]):
524
525 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # sum of wire rotations (BWD) in layer ... RIGHT hemisphere
534 for wire in range(0, self.wires_in_layer[layer]):
535
536 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (BWD) in layer ... LEFT hemisphere
548 for wire in range(0, self.wires_in_layer[layer]):
549
550 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer ... RIGHT
562 for wire in range(0, self.wires_in_layer[layer]):
563
564 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer ... LEFT
576 for wire in range(0, self.wires_in_layer[layer]):
577
578 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # layer_radius:
588 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
589 const = Constraint()
590 # sum of wire rotations (BWD) in layer
591 for wire in range(0, self.wires_in_layer[layer]):
592
593 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer
603 for wire in range(0, self.wires_in_layer[layer]):
604
605 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # hemisphere:
613 for layer in self.hemisphere:
614 const = Constraint()
615 # sum of wire rotations (BWD) in layer
616 for wire in range(0, self.wires_in_layer[layer]):
617
618 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (BWD) in layer
631 for wire in range(0, self.wires_in_layer[layer]):
632
633 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer
646 for wire in range(0, self.wires_in_layer[layer]):
647
648 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer
661 for wire in range(0, self.wires_in_layer[layer]):
662
663 wirePhi = Belle2.CDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # 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))
681 consts.append(const)
682
683 const = Constraint()
684 for layer in layers:
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))
690 consts.append(const)
691
692 return consts
693
694
695# ------------ Main: Generate some constraint files with default config (no time-dependence, default global tags) ------
static const CDCWire * getInstance(const WireID &wireID)
Getter from the wireID convenience object. Does not construct a new object.
Definition CDCWire.cc:24
Class to identify a wire inside the CDC.
Definition WireID.h:34

◆ get_label()

get_label ( self,
layer,
wire,
parameter )
Return GlobalLabel for wire parameter

Definition at line 463 of file constraints.py.

463 def get_label(self, layer, wire, parameter):
464 """Return GlobalLabel for wire parameter"""
465
466 wireid = Belle2.WireID(layer, wire).getEWire()
467 label = Belle2.GlobalLabel()
468 label.construct(Belle2.CDCAlignment.getGlobalUniqueID(), wireid, parameter)
469 return label.label()
470

Member Data Documentation

◆ cdc_radius

cdc_radius = cdc_radius

2 Constraints: Sum(dr)=0 for all wires in CDC at each end-plate -> "average CDC radius" kept same by this constraint (1 per CDC)

Definition at line 450 of file constraints.py.

◆ filename

filename = filename
inherited

File name.

Definition at line 72 of file constraints.py.

◆ hemisphere

hemisphere = hemisphere

set list of layers

Definition at line 455 of file constraints.py.

◆ layer_radius

layer_radius = layer_radius

set list of layer radii

Definition at line 447 of file constraints.py.

◆ layer_rigid

layer_rigid = layer_rigid

6 x 56 (6/layer) constraints.

Sum(dX_B/dY_B/drot_B/dX_FB/dY_FB/drot_FB)=0 for all wires in each layer -> removes the basic unconstrained DoF when aligning wires and layers simultaneously. Average shift and rotation of wires in layer (at each end-plate) = 0. -> coherent movements of wires absorbed in layer parameters

Definition at line 441 of file constraints.py.

◆ layers

layers = layers

set list of layers

Definition at line 436 of file constraints.py.

◆ wires_in_layer

list wires_in_layer
static
Initial value:
= [
160, 160, 160, 160, 160, 160, 160, 160,
160, 160, 160, 160, 160, 160,
192, 192, 192, 192, 192, 192,
224, 224, 224, 224, 224, 224,
256, 256, 256, 256, 256, 256,
288, 288, 288, 288, 288, 288,
320, 320, 320, 320, 320, 320,
352, 352, 352, 352, 352, 352,
384, 384, 384, 384, 384, 384]

CDC layer/wire configuration.

Definition at line 392 of file constraints.py.


The documentation for this class was generated from the following file: