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 384 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 401 of file constraints.py.

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

Member Function Documentation

◆ configure_collector()

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

Reimplemented from Constraints.

Definition at line 455 of file constraints.py.

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

◆ generate()

generate ( self)
Generate constraints 

Reimplemented from Constraints.

Definition at line 469 of file constraints.py.

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 # 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.)
482 consts.append(const)
483
484 for layer in layers:
485 const = Constraint()
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.)
489 consts.append(const)
490
491 for layer in set(layers) - set(self.hemisphere):
492 const = Constraint()
493 # sum of wire rotations (BWD) in layer
494 for wire in range(0, self.wires_in_layer[layer]):
495
496 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # 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.)
507 consts.append(const)
508
509 for layer in layers:
510 const = Constraint()
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.)
514 consts.append(const)
515
516 for layer in set(layers) - set(self.hemisphere):
517 const = Constraint()
518 # sum of wire rotations (FWD) in layer
519 for wire in range(0, self.wires_in_layer[layer]):
520
521 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # sum of wire rotations (BWD) in layer ... RIGHT hemisphere
530 for wire in range(0, self.wires_in_layer[layer]):
531
532 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (BWD) in layer ... LEFT hemisphere
544 for wire in range(0, self.wires_in_layer[layer]):
545
546 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer ... RIGHT
558 for wire in range(0, self.wires_in_layer[layer]):
559
560 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer ... LEFT
572 for wire in range(0, self.wires_in_layer[layer]):
573
574 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # layer_radius:
584 for layer in [lyr for lyr in self.layer_radius if lyr not in self.hemisphere]:
585 const = Constraint()
586 # sum of wire rotations (BWD) in layer
587 for wire in range(0, self.wires_in_layer[layer]):
588
589 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer
599 for wire in range(0, self.wires_in_layer[layer]):
600
601 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # hemisphere:
609 for layer in self.hemisphere:
610 const = Constraint()
611 # sum of wire rotations (BWD) in layer
612 for wire in range(0, self.wires_in_layer[layer]):
613
614 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (BWD) in layer
627 for wire in range(0, self.wires_in_layer[layer]):
628
629 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getBackwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer
642 for wire in range(0, self.wires_in_layer[layer]):
643
644 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # sum of wire rotations (FWD) in layer
657 for wire in range(0, self.wires_in_layer[layer]):
658
659 wirePhi = Belle2.TrackFindingCDC.CDCWire.getInstance(Belle2.WireID(layer, wire)).getForwardPos3D().phi()
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 # 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))
677 consts.append(const)
678
679 const = Constraint()
680 for layer in layers:
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))
686 consts.append(const)
687
688 return consts
689
690
691# ------------ 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 461 of file constraints.py.

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

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 448 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 453 of file constraints.py.

◆ layer_radius

layer_radius = layer_radius

set list of layer radii

Definition at line 445 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 439 of file constraints.py.

◆ layers

layers = layers

set list of layers

Definition at line 434 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 390 of file constraints.py.


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