331 {
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350 G4double totalThickness = fTyvekThickness + fAlThickness + fMylarThickness;
351 G4double delta = 0., angle1 = 0. * deg, angle2 = 0. * deg;
352 G4double oop;
353
354 G4double rminprojected = BSCRmin *
cos( BSCAngleRotat );
355 rminprojected = BSCRmin;
356
357
358 G4int i;
359 for ( i = 0; i < BSCNbTheta; i++ )
360 {
361 G4double CryLength;
362 if ( i == BSCNbTheta - 1 )
363 { CryLength = BSCCryLength1; }
364 else { CryLength = BSCCryLength; }
365 zHalfLength[BSCNbTheta + i] = totalThickness / 2.;
366 yHalfLength1[BSCNbTheta + i] = yHalfLength1[i];
367 yHalfLength2[BSCNbTheta + i] =
368 yHalfLength1[i] + ( yHalfLength2[i] - yHalfLength1[i] ) * totalThickness / CryLength;
369 xHalfLength1[BSCNbTheta + i] = xHalfLength1[i];
370 xHalfLength2[BSCNbTheta + i] = xHalfLength2[i];
371 xHalfLength1[BSCNbTheta * 2 + i] = xHalfLength3[BSCNbTheta + i] =
372 xHalfLength1[i] * ( CryLength - totalThickness ) / CryLength +
373 xHalfLength3[i] * totalThickness / CryLength;
374 xHalfLength2[BSCNbTheta * 4 + i] = xHalfLength4[BSCNbTheta + i] =
375 xHalfLength2[i] * ( CryLength - totalThickness ) / CryLength +
376 xHalfLength4[i] * totalThickness / CryLength;
377
378 zHalfLength[BSCNbTheta * 5 + i] = zHalfLength[BSCNbTheta * 4 + i] =
379 zHalfLength[BSCNbTheta * 3 + i] = zHalfLength[BSCNbTheta * 2 + i] =
380 zHalfLength[i] - totalThickness / 2.;
381
382 yHalfLength2[BSCNbTheta * 2 + i] = yHalfLength1[BSCNbTheta * 2 + i] =
383 totalThickness /
cos( thetaPosition[i + 1] - thetaPosition[i] ) / 2.;
384 xHalfLength3[BSCNbTheta * 2 + i] = xHalfLength3[i];
385 xHalfLength4[BSCNbTheta * 2 + i] =
386 xHalfLength3[i] + ( xHalfLength4[i] - xHalfLength3[i] ) *
387 yHalfLength2[BSCNbTheta * 2 + i] / yHalfLength2[i];
388 xHalfLength2[BSCNbTheta * 2 + i] =
389 xHalfLength3[BSCNbTheta + i] +
390 ( xHalfLength4[BSCNbTheta + i] - xHalfLength3[BSCNbTheta + i] ) *
391 yHalfLength1[BSCNbTheta * 2 + i] / yHalfLength2[BSCNbTheta * 1 + i];
392
393 yHalfLength2[BSCNbTheta * 4 + i] = yHalfLength1[BSCNbTheta * 4 + i] = totalThickness / 2.;
394 xHalfLength4[BSCNbTheta * 4 + i] = xHalfLength4[i];
395 xHalfLength3[BSCNbTheta * 4 + i] =
396 xHalfLength4[i] - ( xHalfLength4[i] - xHalfLength3[i] ) *
397 yHalfLength2[BSCNbTheta * 4 + i] / yHalfLength2[i];
398 xHalfLength1[BSCNbTheta * 4 + i] =
399 xHalfLength4[BSCNbTheta + i] -
400 ( xHalfLength4[BSCNbTheta + i] - xHalfLength3[BSCNbTheta + i] ) *
401 yHalfLength1[BSCNbTheta * 4 + i] / yHalfLength2[BSCNbTheta * 1 + i];
402
403 delta = totalThickness / 2. + yHalfLength1[BSCNbTheta * 2 + i];
404 angle1 = atan( yHalfLength2[i] / ( xHalfLength4[i] - xHalfLength3[i] ) );
405 angle2 = atan( 2. * ( xHalfLength4[i] - xHalfLength2[i] ) *
sin( angle1 ) / CryLength );
406
407 yHalfLength1[BSCNbTheta * 5 + i] = yHalfLength1[BSCNbTheta * 3 + i] =
408 yHalfLength1[i] - delta;
409 yHalfLength2[BSCNbTheta * 5 + i] = yHalfLength2[BSCNbTheta * 3 + i] =
410 yHalfLength2[i] - delta;
411 xHalfLength4[BSCNbTheta * 3 + i] = xHalfLength3[BSCNbTheta * 3 + i] =
412 xHalfLength2[BSCNbTheta * 3 + i] = xHalfLength1[BSCNbTheta * 3 + i] =
413 totalThickness /
cos( angle2 ) /
sin( angle1 ) / 2.;
414 xHalfLength4[BSCNbTheta * 5 + i] = xHalfLength3[BSCNbTheta * 5 + i] =
415 xHalfLength2[BSCNbTheta * 5 + i] = xHalfLength1[BSCNbTheta * 5 + i] =
416 totalThickness / 2.;
417
418 zHalfLength[i] = zHalfLength[i] - totalThickness / 2.;
419 yHalfLength1[i] = yHalfLength1[i] - delta;
420 yHalfLength2[i] = yHalfLength2[i] - delta;
421 delta = totalThickness * ( 1. + 1. /
cos( angle2 ) /
sin( angle1 ) ) / 2.;
422 xHalfLength1[i] = xHalfLength1[i] - delta;
423 xHalfLength2[i] = xHalfLength2[i] - delta;
424 xHalfLength3[i] = xHalfLength3[i] - delta;
425 xHalfLength4[i] = xHalfLength4[i] - delta;
426
427 oop = sqrt( ( yHalfLength2[i] - yHalfLength1[i] ) * ( yHalfLength2[i] - yHalfLength1[i] ) +
428 ( xHalfLength3[i] + xHalfLength4[i] - xHalfLength1[i] - xHalfLength2[i] ) *
429 ( xHalfLength3[i] + xHalfLength4[i] - xHalfLength1[i] - xHalfLength2[i] ) /
430 4 );
431 thetaAxis[i] = atan( oop / CryLength );
432
433 phiAxis[i] =
434 180. * deg +
435 atan( ( yHalfLength2[i] - yHalfLength1[i] ) /
436 ( xHalfLength3[i] + xHalfLength4[i] - xHalfLength1[i] - xHalfLength2[i] ) * 2. );
437
438 oop = sqrt( ( yHalfLength2[BSCNbTheta + i] - yHalfLength1[BSCNbTheta + i] ) *
439 ( yHalfLength2[BSCNbTheta + i] - yHalfLength1[BSCNbTheta + i] ) +
440 ( xHalfLength3[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] -
441 xHalfLength1[BSCNbTheta + i] - xHalfLength2[BSCNbTheta + i] ) *
442 ( xHalfLength3[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] -
443 xHalfLength1[BSCNbTheta + i] - xHalfLength2[BSCNbTheta + i] ) /
444 4 );
445 thetaAxis[BSCNbTheta + i] = atan( oop / totalThickness );
446 phiAxis[BSCNbTheta + i] =
447 -atan( ( yHalfLength2[BSCNbTheta + i] - yHalfLength1[BSCNbTheta + i] ) /
448 ( xHalfLength3[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] -
449 xHalfLength1[BSCNbTheta + i] - xHalfLength2[BSCNbTheta + i] ) *
450 2. );
451
452 oop = sqrt( ( yHalfLength2[i] - yHalfLength1[i] ) * ( yHalfLength2[i] - yHalfLength1[i] ) *
453 4 +
454 ( xHalfLength3[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] -
455 xHalfLength1[BSCNbTheta * 2 + i] - xHalfLength2[BSCNbTheta * 2 + i] ) *
456 ( xHalfLength3[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] -
457 xHalfLength1[BSCNbTheta * 2 + i] - xHalfLength2[BSCNbTheta * 2 + i] ) /
458 4 );
459 thetaAxis[BSCNbTheta * 2 + i] = atan( oop / ( zHalfLength[BSCNbTheta * 2 + i] * 2 ) );
460 phiAxis[BSCNbTheta * 2 + i] =
461 -atan( ( yHalfLength2[i] - yHalfLength1[i] ) /
462 ( xHalfLength3[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] -
463 xHalfLength1[BSCNbTheta * 2 + i] - xHalfLength2[BSCNbTheta * 2 + i] ) *
464 4 );
465
466 oop = sqrt(
467 ( yHalfLength2[i] - yHalfLength1[i] ) * ( yHalfLength2[i] - yHalfLength1[i] ) * 4 +
468 ( xHalfLength4[i] - xHalfLength2[i] ) * ( xHalfLength4[i] - xHalfLength2[i] ) * 4 );
469 thetaAxis[BSCNbTheta * 3 + i] = atan( oop / ( zHalfLength[BSCNbTheta * 3 + i] * 2 ) );
470 phiAxis[BSCNbTheta * 3 + i] =
471 -atan( ( yHalfLength2[i] - yHalfLength1[i] ) / ( xHalfLength4[i] - xHalfLength2[i] ) );
472
473 thetaAxis[BSCNbTheta * 4 + i] =
474 atan( ( xHalfLength4[BSCNbTheta * 4 + i] + xHalfLength3[BSCNbTheta * 4 + i] -
475 xHalfLength2[BSCNbTheta * 4 + i] - xHalfLength1[BSCNbTheta * 4 + i] ) /
476 2. / ( zHalfLength[BSCNbTheta * 4 + i] * 2 ) );
477 phiAxis[BSCNbTheta * 4 + i] = 0;
478
479 thetaAxis[BSCNbTheta * 5 + i] =
480 atan( ( xHalfLength3[BSCNbTheta * 5 + i] - xHalfLength1[BSCNbTheta * 5 + i] ) /
481 ( zHalfLength[BSCNbTheta * 5 + i] * 2 ) );
482 phiAxis[BSCNbTheta * 5 + i] = -90. * deg;
483
484 tanAlpha2[BSCNbTheta + i] = tanAlpha1[BSCNbTheta + i] = tanAlpha1[i] =
485 -( xHalfLength2[i] - xHalfLength1[i] ) / yHalfLength1[i] / 2.;
486 tanAlpha1[BSCNbTheta * 2 + i] =
487 ( xHalfLength2[BSCNbTheta * 2 + i] - xHalfLength1[BSCNbTheta * 2 + i] ) /
488 yHalfLength1[BSCNbTheta * 2 + i] / 2.;
489 tanAlpha1[BSCNbTheta * 3 + i] = tanAlpha1[i] * 2.;
490 tanAlpha1[BSCNbTheta * 4 + i] =
491 ( xHalfLength2[BSCNbTheta * 4 + i] - xHalfLength1[BSCNbTheta * 4 + i] ) /
492 yHalfLength1[BSCNbTheta * 4 + i] / 2.;
493 tanAlpha1[BSCNbTheta * 5 + i] =
494 ( xHalfLength2[BSCNbTheta * 5 + i] - xHalfLength1[BSCNbTheta * 5 + i] ) /
495 yHalfLength1[BSCNbTheta * 5 + i] / 2.;
496
497 tanAlpha2[i] = -( xHalfLength4[i] - xHalfLength3[i] ) / yHalfLength2[i] / 2.;
498
499 tanAlpha2[BSCNbTheta * 2 + i] =
500 ( xHalfLength4[BSCNbTheta * 2 + i] - xHalfLength3[BSCNbTheta * 2 + i] ) /
501 yHalfLength2[BSCNbTheta * 2 + i] / 2.;
502 tanAlpha2[BSCNbTheta * 3 + i] = tanAlpha2[i] * 2.;
503 tanAlpha2[BSCNbTheta * 4 + i] =
504 ( xHalfLength4[BSCNbTheta * 4 + i] - xHalfLength3[BSCNbTheta * 4 + i] ) /
505 yHalfLength2[BSCNbTheta * 4 + i] / 2.;
506 tanAlpha2[BSCNbTheta * 5 + i] =
507 ( xHalfLength4[BSCNbTheta * 5 + i] - xHalfLength3[BSCNbTheta * 5 + i] ) /
508 yHalfLength2[BSCNbTheta * 5 + i] / 2.;
509
510 zPosition[BSCNbTheta * 5 + i] = zPosition[BSCNbTheta * 3 + i] = zPosition[i] =
511 zPosition[i] + totalThickness / 2. *
cos( thetaPosition[i] ) -
512 yHalfLength1[BSCNbTheta * 2 + i] *
sin( thetaPosition[i] );
513 zPosition[i] = totalThickness / 2.;
514 xPosition[BSCNbTheta * 5 + i] = xPosition[BSCNbTheta * 3 + i] = xPosition[i] =
515 xPosition[i] + totalThickness / 2. *
sin( thetaPosition[i] ) +
516 totalThickness * ( 1. /
cos( thetaPosition[i + 1] - thetaPosition[i] ) - 1 ) / 2. *
517 cos( thetaPosition[i] );
518 xPosition[i] = totalThickness * ( 1. - 1. /
cos( angle2 ) /
sin( angle1 ) ) / 2.;
519
520 yPosition[i] =
521 yPosition[i] + totalThickness * ( 1. - 1. /
cos( angle2 ) /
sin( angle1 ) ) / 2.;
522 yPosition[i] =
523 yHalfLength1[BSCNbTheta * 2 + i] - totalThickness / 2.;
524 yPosition[BSCNbTheta * 3 + i] = yPosition[i] * 2. + xHalfLength1[BSCNbTheta * 3 + i];
525 yPosition[BSCNbTheta * 5 + i] = xHalfLength1[BSCNbTheta * 5 + i];
526
527 xPosition[BSCNbTheta + i] =
528 BSCPhiRmin + zHalfLength[BSCNbTheta + i] *
sin( thetaPosition[i] ) +
529 ( 3. * yHalfLength1[BSCNbTheta + i] - yHalfLength2[BSCNbTheta + i] ) / 2. *
530 cos( thetaPosition[i] );
531 yPosition[BSCNbTheta + i] =
532 ( xHalfLength1[BSCNbTheta + i] + xHalfLength3[BSCNbTheta + i] +
533 xHalfLength2[BSCNbTheta + i] + xHalfLength4[BSCNbTheta + i] ) /
534 4.;
535 zPosition[BSCNbTheta + i] =
536 BSCPosition1 + rminprojected /
tan( thetaPosition[i] ) +
537 ( 2. * yHalfLength1[BSCNbTheta + i] /
tan( thetaPosition[i] ) +
538 zHalfLength[BSCNbTheta + i] ) *
539 cos( thetaPosition[i] ) +
540 ( yHalfLength1[BSCNbTheta + i] + yHalfLength2[BSCNbTheta + i] ) / 2. *
541 sin( thetaPosition[i] );
542
543 xPosition[BSCNbTheta * 2 + i] =
544 xPosition[i] +
545 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 2 + i] ) *
546 cos( thetaPosition[i] );
547 zPosition[BSCNbTheta * 2 + i] =
548 zPosition[i] -
549 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 2 + i] ) *
550 sin( thetaPosition[i] );
551 yPosition[BSCNbTheta * 2 + i] =
552 ( xHalfLength1[BSCNbTheta * 2 + i] + xHalfLength3[BSCNbTheta * 2 + i] +
553 xHalfLength2[BSCNbTheta * 2 + i] + xHalfLength4[BSCNbTheta * 2 + i] ) /
554 4.;
555
556 xPosition[BSCNbTheta * 4 + i] =
557 xPosition[i] -
558 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 4 + i] ) *
559 cos( thetaPosition[i] );
560 zPosition[BSCNbTheta * 4 + i] =
561 zPosition[i] -
562 ( ( yHalfLength1[i] + yHalfLength2[i] ) / 2. + yHalfLength1[BSCNbTheta * 4 + i] ) *
563 sin( thetaPosition[i] );
564 yPosition[BSCNbTheta * 4 + i] =
565 ( xHalfLength1[BSCNbTheta * 4 + i] + xHalfLength3[BSCNbTheta * 4 + i] +
566 xHalfLength2[BSCNbTheta * 4 + i] + xHalfLength4[BSCNbTheta * 4 + i] ) /
567 4.;
568 }
569
570 if ( verboseLevel > 1 )
571 for ( i = 0; i < BSCNbTheta * 6; i++ )
572 {
573 G4cout << "The sizes of the " << i + 1 << " crystal are:" << G4endl
574 << "zHalfLength =" << zHalfLength[i] / cm << "(cm)," << G4endl
575 << "thetaAxis =" << thetaAxis[i] / deg << "(deg)," << G4endl
576 << "phiAxis =" << phiAxis[i] / deg << "(deg)," << G4endl
577 << "yHalfLength1=" << yHalfLength1[i] / cm << "(cm)," << G4endl
578 << "xHalfLength1=" << xHalfLength1[i] / cm << "(cm)," << G4endl
579 << "xHalfLength2=" << xHalfLength2[i] / cm << "(cm)," << G4endl
580 << "tanAlpha1 =" << tanAlpha1[i] << G4endl
581 << "yHalfLength2=" << yHalfLength2[i] / cm << "(cm)," << G4endl
582 << "xHalfLength3=" << xHalfLength3[i] / cm << "(cm)," << G4endl
583 << "xHalfLength4=" << xHalfLength4[i] / cm << "(cm)," << G4endl
584 << "tanAlpha2 =" << tanAlpha2[i] << "." << G4endl << "The position of the "
585 << i + 1 << " crystal is:" << G4endl << "(" << xPosition[i] / cm << ","
586 << yPosition[i] / cm << "," << zPosition[i] / cm << ")cm" << G4endl;
587 }
588}