xsuite 0.40.2__cp310-cp310-macosx_11_0_arm64.whl → 0.41.1__cp310-cp310-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xsuite might be problematic. Click here for more details.

@@ -77,60 +77,60 @@
77
77
 
78
78
  #endif // XSTUITE_TRACK_FLAGS_H
79
79
 
80
- #ifndef XOBJ_TYPEDEF_ArrNFloat64
81
- #define XOBJ_TYPEDEF_ArrNFloat64
82
- typedef struct ArrNFloat64_s * ArrNFloat64;
83
- static inline ArrNFloat64 ArrNFloat64_getp(ArrNFloat64 restrict obj){
80
+ #ifndef XOBJ_TYPEDEF_ArrNInt64
81
+ #define XOBJ_TYPEDEF_ArrNInt64
82
+ typedef struct ArrNInt64_s * ArrNInt64;
83
+ static inline ArrNInt64 ArrNInt64_getp(ArrNInt64 restrict obj){
84
84
  int64_t offset=0;
85
- return (ArrNFloat64)(( char*) obj+offset);
85
+ return (ArrNInt64)(( char*) obj+offset);
86
86
  }
87
- static inline int64_t ArrNFloat64_len(ArrNFloat64 restrict obj){
87
+ static inline int64_t ArrNInt64_len(ArrNInt64 restrict obj){
88
88
  int64_t offset=0;
89
89
  int64_t* arr = ( int64_t*)(( char*) obj+offset);
90
90
  return arr[1];
91
91
  }
92
- static inline double ArrNFloat64_get(const ArrNFloat64 restrict obj, int64_t i0){
92
+ static inline int64_t ArrNInt64_get(const ArrNInt64 restrict obj, int64_t i0){
93
93
  int64_t offset=0;
94
94
  offset+=16+i0*8;
95
- return *( double*)(( char*) obj+offset);
95
+ return *( int64_t*)(( char*) obj+offset);
96
96
  }
97
- static inline void ArrNFloat64_set(ArrNFloat64 restrict obj, int64_t i0, double value){
97
+ static inline void ArrNInt64_set(ArrNInt64 restrict obj, int64_t i0, int64_t value){
98
98
  int64_t offset=0;
99
99
  offset+=16+i0*8;
100
- *( double*)(( char*) obj+offset)=value;
100
+ *( int64_t*)(( char*) obj+offset)=value;
101
101
  }
102
- static inline double* ArrNFloat64_getp1(ArrNFloat64 restrict obj, int64_t i0){
102
+ static inline int64_t* ArrNInt64_getp1(ArrNInt64 restrict obj, int64_t i0){
103
103
  int64_t offset=0;
104
104
  offset+=16+i0*8;
105
- return ( double*)(( char*) obj+offset);
105
+ return ( int64_t*)(( char*) obj+offset);
106
106
  }
107
107
  #endif
108
- #ifndef XOBJ_TYPEDEF_ArrNInt64
109
- #define XOBJ_TYPEDEF_ArrNInt64
110
- typedef struct ArrNInt64_s * ArrNInt64;
111
- static inline ArrNInt64 ArrNInt64_getp(ArrNInt64 restrict obj){
108
+ #ifndef XOBJ_TYPEDEF_ArrNFloat64
109
+ #define XOBJ_TYPEDEF_ArrNFloat64
110
+ typedef struct ArrNFloat64_s * ArrNFloat64;
111
+ static inline ArrNFloat64 ArrNFloat64_getp(ArrNFloat64 restrict obj){
112
112
  int64_t offset=0;
113
- return (ArrNInt64)(( char*) obj+offset);
113
+ return (ArrNFloat64)(( char*) obj+offset);
114
114
  }
115
- static inline int64_t ArrNInt64_len(ArrNInt64 restrict obj){
115
+ static inline int64_t ArrNFloat64_len(ArrNFloat64 restrict obj){
116
116
  int64_t offset=0;
117
117
  int64_t* arr = ( int64_t*)(( char*) obj+offset);
118
118
  return arr[1];
119
119
  }
120
- static inline int64_t ArrNInt64_get(const ArrNInt64 restrict obj, int64_t i0){
120
+ static inline double ArrNFloat64_get(const ArrNFloat64 restrict obj, int64_t i0){
121
121
  int64_t offset=0;
122
122
  offset+=16+i0*8;
123
- return *( int64_t*)(( char*) obj+offset);
123
+ return *( double*)(( char*) obj+offset);
124
124
  }
125
- static inline void ArrNInt64_set(ArrNInt64 restrict obj, int64_t i0, int64_t value){
125
+ static inline void ArrNFloat64_set(ArrNFloat64 restrict obj, int64_t i0, double value){
126
126
  int64_t offset=0;
127
127
  offset+=16+i0*8;
128
- *( int64_t*)(( char*) obj+offset)=value;
128
+ *( double*)(( char*) obj+offset)=value;
129
129
  }
130
- static inline int64_t* ArrNInt64_getp1(ArrNInt64 restrict obj, int64_t i0){
130
+ static inline double* ArrNFloat64_getp1(ArrNFloat64 restrict obj, int64_t i0){
131
131
  int64_t offset=0;
132
132
  offset+=16+i0*8;
133
- return ( int64_t*)(( char*) obj+offset);
133
+ return ( double*)(( char*) obj+offset);
134
134
  }
135
135
  #endif
136
136
  #ifndef XOBJ_TYPEDEF_ArrNUint32
@@ -3368,661 +3368,226 @@ void LocalParticle_scale_exact_xp_yp(LocalParticle* part, double value_x, double
3368
3368
  }
3369
3369
 
3370
3370
 
3371
- #ifndef XOBJ_TYPEDEF_RandomUniformData
3372
- #define XOBJ_TYPEDEF_RandomUniformData
3373
- typedef struct RandomUniformData_s * RandomUniformData;
3374
- static inline RandomUniformData RandomUniformData_getp(RandomUniformData restrict obj){
3375
- int64_t offset=0;
3376
- return (RandomUniformData)(( char*) obj+offset);
3377
- }
3378
- static inline uint8_t RandomUniformData_get__dummy(const RandomUniformData restrict obj){
3379
- int64_t offset=0;
3380
- return *(( uint8_t*) obj+offset);
3381
- }
3382
- static inline void RandomUniformData_set__dummy(RandomUniformData restrict obj, uint8_t value){
3383
- int64_t offset=0;
3384
- *(( uint8_t*) obj+offset)=value;
3385
- }
3386
- static inline uint8_t* RandomUniformData_getp__dummy(RandomUniformData restrict obj){
3371
+ #ifndef XOBJ_TYPEDEF_ParticlesMonitorData
3372
+ #define XOBJ_TYPEDEF_ParticlesMonitorData
3373
+ typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
3374
+ static inline ParticlesMonitorData ParticlesMonitorData_getp(ParticlesMonitorData restrict obj){
3387
3375
  int64_t offset=0;
3388
- return ( uint8_t*)(( char*) obj+offset);
3376
+ return (ParticlesMonitorData)(( char*) obj+offset);
3389
3377
  }
3390
- static inline double RandomUniformData_get__sin_rot_s(const RandomUniformData restrict obj){
3378
+ static inline int64_t ParticlesMonitorData_get_start_at_turn(const ParticlesMonitorData restrict obj){
3391
3379
  int64_t offset=0;
3392
3380
  offset+=8;
3393
- return *( double*)(( char*) obj+offset);
3381
+ return *( int64_t*)(( char*) obj+offset);
3394
3382
  }
3395
- static inline void RandomUniformData_set__sin_rot_s(RandomUniformData restrict obj, double value){
3383
+ static inline void ParticlesMonitorData_set_start_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3396
3384
  int64_t offset=0;
3397
3385
  offset+=8;
3398
- *( double*)(( char*) obj+offset)=value;
3386
+ *( int64_t*)(( char*) obj+offset)=value;
3399
3387
  }
3400
- static inline double* RandomUniformData_getp__sin_rot_s(RandomUniformData restrict obj){
3388
+ static inline int64_t* ParticlesMonitorData_getp_start_at_turn(ParticlesMonitorData restrict obj){
3401
3389
  int64_t offset=0;
3402
3390
  offset+=8;
3403
- return ( double*)(( char*) obj+offset);
3391
+ return ( int64_t*)(( char*) obj+offset);
3404
3392
  }
3405
- static inline double RandomUniformData_get__cos_rot_s(const RandomUniformData restrict obj){
3393
+ static inline int64_t ParticlesMonitorData_get_stop_at_turn(const ParticlesMonitorData restrict obj){
3406
3394
  int64_t offset=0;
3407
3395
  offset+=16;
3408
- return *( double*)(( char*) obj+offset);
3396
+ return *( int64_t*)(( char*) obj+offset);
3409
3397
  }
3410
- static inline void RandomUniformData_set__cos_rot_s(RandomUniformData restrict obj, double value){
3398
+ static inline void ParticlesMonitorData_set_stop_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3411
3399
  int64_t offset=0;
3412
3400
  offset+=16;
3413
- *( double*)(( char*) obj+offset)=value;
3401
+ *( int64_t*)(( char*) obj+offset)=value;
3414
3402
  }
3415
- static inline double* RandomUniformData_getp__cos_rot_s(RandomUniformData restrict obj){
3403
+ static inline int64_t* ParticlesMonitorData_getp_stop_at_turn(ParticlesMonitorData restrict obj){
3416
3404
  int64_t offset=0;
3417
3405
  offset+=16;
3418
- return ( double*)(( char*) obj+offset);
3406
+ return ( int64_t*)(( char*) obj+offset);
3419
3407
  }
3420
- static inline double RandomUniformData_get__shift_x(const RandomUniformData restrict obj){
3408
+ static inline int64_t ParticlesMonitorData_get_part_id_start(const ParticlesMonitorData restrict obj){
3421
3409
  int64_t offset=0;
3422
3410
  offset+=24;
3423
- return *( double*)(( char*) obj+offset);
3411
+ return *( int64_t*)(( char*) obj+offset);
3424
3412
  }
3425
- static inline void RandomUniformData_set__shift_x(RandomUniformData restrict obj, double value){
3413
+ static inline void ParticlesMonitorData_set_part_id_start(ParticlesMonitorData restrict obj, int64_t value){
3426
3414
  int64_t offset=0;
3427
3415
  offset+=24;
3428
- *( double*)(( char*) obj+offset)=value;
3416
+ *( int64_t*)(( char*) obj+offset)=value;
3429
3417
  }
3430
- static inline double* RandomUniformData_getp__shift_x(RandomUniformData restrict obj){
3418
+ static inline int64_t* ParticlesMonitorData_getp_part_id_start(ParticlesMonitorData restrict obj){
3431
3419
  int64_t offset=0;
3432
3420
  offset+=24;
3433
- return ( double*)(( char*) obj+offset);
3421
+ return ( int64_t*)(( char*) obj+offset);
3434
3422
  }
3435
- static inline double RandomUniformData_get__shift_y(const RandomUniformData restrict obj){
3423
+ static inline int64_t ParticlesMonitorData_get_part_id_end(const ParticlesMonitorData restrict obj){
3436
3424
  int64_t offset=0;
3437
3425
  offset+=32;
3438
- return *( double*)(( char*) obj+offset);
3426
+ return *( int64_t*)(( char*) obj+offset);
3439
3427
  }
3440
- static inline void RandomUniformData_set__shift_y(RandomUniformData restrict obj, double value){
3428
+ static inline void ParticlesMonitorData_set_part_id_end(ParticlesMonitorData restrict obj, int64_t value){
3441
3429
  int64_t offset=0;
3442
3430
  offset+=32;
3443
- *( double*)(( char*) obj+offset)=value;
3431
+ *( int64_t*)(( char*) obj+offset)=value;
3444
3432
  }
3445
- static inline double* RandomUniformData_getp__shift_y(RandomUniformData restrict obj){
3433
+ static inline int64_t* ParticlesMonitorData_getp_part_id_end(ParticlesMonitorData restrict obj){
3446
3434
  int64_t offset=0;
3447
3435
  offset+=32;
3448
- return ( double*)(( char*) obj+offset);
3436
+ return ( int64_t*)(( char*) obj+offset);
3449
3437
  }
3450
- static inline double RandomUniformData_get__shift_s(const RandomUniformData restrict obj){
3438
+ static inline int64_t ParticlesMonitorData_get_ebe_mode(const ParticlesMonitorData restrict obj){
3451
3439
  int64_t offset=0;
3452
3440
  offset+=40;
3453
- return *( double*)(( char*) obj+offset);
3441
+ return *( int64_t*)(( char*) obj+offset);
3454
3442
  }
3455
- static inline void RandomUniformData_set__shift_s(RandomUniformData restrict obj, double value){
3443
+ static inline void ParticlesMonitorData_set_ebe_mode(ParticlesMonitorData restrict obj, int64_t value){
3456
3444
  int64_t offset=0;
3457
3445
  offset+=40;
3458
- *( double*)(( char*) obj+offset)=value;
3446
+ *( int64_t*)(( char*) obj+offset)=value;
3459
3447
  }
3460
- static inline double* RandomUniformData_getp__shift_s(RandomUniformData restrict obj){
3448
+ static inline int64_t* ParticlesMonitorData_getp_ebe_mode(ParticlesMonitorData restrict obj){
3461
3449
  int64_t offset=0;
3462
3450
  offset+=40;
3463
- return ( double*)(( char*) obj+offset);
3451
+ return ( int64_t*)(( char*) obj+offset);
3464
3452
  }
3465
- static inline double RandomUniformData_get__rot_x_rad(const RandomUniformData restrict obj){
3453
+ static inline int64_t ParticlesMonitorData_get_n_records(const ParticlesMonitorData restrict obj){
3466
3454
  int64_t offset=0;
3467
3455
  offset+=48;
3468
- return *( double*)(( char*) obj+offset);
3456
+ return *( int64_t*)(( char*) obj+offset);
3469
3457
  }
3470
- static inline void RandomUniformData_set__rot_x_rad(RandomUniformData restrict obj, double value){
3458
+ static inline void ParticlesMonitorData_set_n_records(ParticlesMonitorData restrict obj, int64_t value){
3471
3459
  int64_t offset=0;
3472
3460
  offset+=48;
3473
- *( double*)(( char*) obj+offset)=value;
3461
+ *( int64_t*)(( char*) obj+offset)=value;
3474
3462
  }
3475
- static inline double* RandomUniformData_getp__rot_x_rad(RandomUniformData restrict obj){
3463
+ static inline int64_t* ParticlesMonitorData_getp_n_records(ParticlesMonitorData restrict obj){
3476
3464
  int64_t offset=0;
3477
3465
  offset+=48;
3478
- return ( double*)(( char*) obj+offset);
3466
+ return ( int64_t*)(( char*) obj+offset);
3479
3467
  }
3480
- static inline double RandomUniformData_get__rot_y_rad(const RandomUniformData restrict obj){
3468
+ static inline int64_t ParticlesMonitorData_get_n_repetitions(const ParticlesMonitorData restrict obj){
3481
3469
  int64_t offset=0;
3482
3470
  offset+=56;
3483
- return *( double*)(( char*) obj+offset);
3471
+ return *( int64_t*)(( char*) obj+offset);
3484
3472
  }
3485
- static inline void RandomUniformData_set__rot_y_rad(RandomUniformData restrict obj, double value){
3473
+ static inline void ParticlesMonitorData_set_n_repetitions(ParticlesMonitorData restrict obj, int64_t value){
3486
3474
  int64_t offset=0;
3487
3475
  offset+=56;
3488
- *( double*)(( char*) obj+offset)=value;
3476
+ *( int64_t*)(( char*) obj+offset)=value;
3489
3477
  }
3490
- static inline double* RandomUniformData_getp__rot_y_rad(RandomUniformData restrict obj){
3478
+ static inline int64_t* ParticlesMonitorData_getp_n_repetitions(ParticlesMonitorData restrict obj){
3491
3479
  int64_t offset=0;
3492
3480
  offset+=56;
3493
- return ( double*)(( char*) obj+offset);
3481
+ return ( int64_t*)(( char*) obj+offset);
3494
3482
  }
3495
- static inline double RandomUniformData_get__rot_s_rad_no_frame(const RandomUniformData restrict obj){
3483
+ static inline int64_t ParticlesMonitorData_get_repetition_period(const ParticlesMonitorData restrict obj){
3496
3484
  int64_t offset=0;
3497
3485
  offset+=64;
3498
- return *( double*)(( char*) obj+offset);
3486
+ return *( int64_t*)(( char*) obj+offset);
3499
3487
  }
3500
- static inline void RandomUniformData_set__rot_s_rad_no_frame(RandomUniformData restrict obj, double value){
3488
+ static inline void ParticlesMonitorData_set_repetition_period(ParticlesMonitorData restrict obj, int64_t value){
3501
3489
  int64_t offset=0;
3502
3490
  offset+=64;
3503
- *( double*)(( char*) obj+offset)=value;
3491
+ *( int64_t*)(( char*) obj+offset)=value;
3504
3492
  }
3505
- static inline double* RandomUniformData_getp__rot_s_rad_no_frame(RandomUniformData restrict obj){
3493
+ static inline int64_t* ParticlesMonitorData_getp_repetition_period(ParticlesMonitorData restrict obj){
3506
3494
  int64_t offset=0;
3507
3495
  offset+=64;
3508
- return ( double*)(( char*) obj+offset);
3496
+ return ( int64_t*)(( char*) obj+offset);
3509
3497
  }
3510
- static inline double RandomUniformData_get_rot_shift_anchor(const RandomUniformData restrict obj){
3498
+ static inline int64_t ParticlesMonitorData_get_flag_auto_to_numpy(const ParticlesMonitorData restrict obj){
3511
3499
  int64_t offset=0;
3512
3500
  offset+=72;
3513
- return *( double*)(( char*) obj+offset);
3501
+ return *( int64_t*)(( char*) obj+offset);
3514
3502
  }
3515
- static inline void RandomUniformData_set_rot_shift_anchor(RandomUniformData restrict obj, double value){
3503
+ static inline void ParticlesMonitorData_set_flag_auto_to_numpy(ParticlesMonitorData restrict obj, int64_t value){
3516
3504
  int64_t offset=0;
3517
3505
  offset+=72;
3518
- *( double*)(( char*) obj+offset)=value;
3506
+ *( int64_t*)(( char*) obj+offset)=value;
3519
3507
  }
3520
- static inline double* RandomUniformData_getp_rot_shift_anchor(RandomUniformData restrict obj){
3508
+ static inline int64_t* ParticlesMonitorData_getp_flag_auto_to_numpy(ParticlesMonitorData restrict obj){
3521
3509
  int64_t offset=0;
3522
3510
  offset+=72;
3523
- return ( double*)(( char*) obj+offset);
3524
- }
3525
- #endif
3526
- // copyright ############################### //
3527
- // This file is part of the Xtrack Package. //
3528
- // Copyright (c) CERN, 2021. //
3529
- // ######################################### //
3530
-
3531
- #ifndef XTRACK_CONSTANTS_H
3532
- #define XTRACK_CONSTANTS_H
3533
-
3534
- #if !defined( C_LIGHT )
3535
- #define C_LIGHT ( 299792458.0 )
3536
- #endif /* !defined( C_LIGHT ) */
3537
-
3538
- #if !defined( EPSILON_0 )
3539
- #define EPSILON_0 (8.854187817620e-12)
3540
- #endif /* !defined( EPSILON_0 ) */
3541
-
3542
- #if !defined( PI )
3543
- #define PI (3.1415926535897932384626433832795028841971693993751)
3544
- #endif /* !defined( PI ) */
3545
-
3546
- #if !defined( MU_0 )
3547
- #define MU_0 (PI*4.0e-7)
3548
- #endif /* !defined( MU_0 ) */
3549
-
3550
- #if !defined( DEG2RAD )
3551
- #define DEG2RAD (0.0174532925199432957692369076848861271344287188854)
3552
- #endif /* !defiend( DEG2RAD ) */
3553
-
3554
- #if !defined( RAD2DEG )
3555
- #define RAD2DEG (57.29577951308232087679815481410517033240547246656442)
3556
- #endif /* !defiend( RAD2DEG ) */
3557
-
3558
- #if !defined( SQRT_PI )
3559
- #define SQRT_PI (1.7724538509055160272981674833411451827975494561224)
3560
- #endif /* !defined( SQRT_PI ) */
3561
-
3562
- #if !defined( QELEM )
3563
- #define QELEM (1.60217662e-19)
3564
- #endif /* !defined( QELEM ) */
3565
-
3566
- #if !defined( DBL_MAX )
3567
- #define DBL_MAX (1.7976931348623158e+308)
3568
- #endif /* !defined( DBL_MAX ) */
3569
-
3570
- #if !defined( DBL_MIN )
3571
- #define DBL_MIN (2.2250738585072014e-308)
3572
- #endif /* !defined( DBL_MIN ) */
3573
-
3574
- #if !defined( DBL_EPSILON )
3575
- #define DBL_EPSILON (2.2204460492503131e-16)
3576
- #endif /* !defined( DBL_EPSILON ) */
3577
-
3578
- #if !defined( RADIUS_ELECTRON )
3579
- #define RADIUS_ELECTRON (2.8179403262e-15)
3580
- #endif /* !defined( RADIUS_ELECTRON ) */
3581
-
3582
- #if !defined( MASS_ELECTRON )
3583
- #define MASS_ELECTRON (9.1093837e-31)
3584
- #endif /* !defined( MASS_ELECTRON ) */
3585
-
3586
- #endif /* XTRACK_CONSTANTS_H */
3587
-
3588
- // copyright ############################### //
3589
- // This file is part of the Xtrack Package. //
3590
- // Copyright (c) CERN, 2023. //
3591
- // ######################################### //
3592
-
3593
- #ifndef XTRACK_FUNCTIONS_H
3594
- #define XTRACK_FUNCTIONS_H
3595
-
3596
- #include <headers/track.h>
3597
-
3598
-
3599
- GPUFUN
3600
- void kill_all_particles(LocalParticle* part0, int64_t kill_state) {
3601
- START_PER_PARTICLE_BLOCK(part0, part);
3602
- LocalParticle_kill_particle(part, kill_state);
3603
- END_PER_PARTICLE_BLOCK;
3604
- }
3605
-
3606
-
3607
- GPUFUN
3608
- int8_t assert_tracking(LocalParticle* part, int64_t kill_state){
3609
- // Whenever we are not tracking, e.g. in a twiss, the particle will be at_turn < 0.
3610
- // We test this to distinguish genuine tracking from twiss.
3611
- if (LocalParticle_get_at_turn(part) < 0){
3612
- LocalParticle_kill_particle(part, kill_state);
3613
- return 0;
3614
- }
3615
- return 1;
3616
- }
3617
-
3618
- #endif /* XTRACK_FUNCTIONS_H */
3619
-
3620
- // copyright ############################### //
3621
- // This file is part of the Xtrack Package. //
3622
- // Copyright (c) CERN, 2023. //
3623
- // ######################################### //
3624
-
3625
- #ifndef XTRACK_PARTICLE_STATES_H
3626
- #define XTRACK_PARTICLE_STATES_H
3627
-
3628
- #define XT_LOST_ON_APERTURE 0
3629
- #define XT_LOST_ON_LONG_CUT -2
3630
- #define XT_LOST_ALL_E_IN_SYNRAD -10
3631
- #define RNG_ERR_SEEDS_NOT_SET -20
3632
- #define RNG_ERR_INVALID_TRACK -21
3633
- #define RNG_ERR_RUTH_NOT_SET -22
3634
- #define XT_INVALID_SLICE_TRANSFORM -40
3635
- #define XT_INVALID_CURVED_SLICE_TRANSFORM -41
3636
-
3637
- #endif /* XTRACK_PARTICLE_STATES_H */
3638
-
3639
- // copyright ############################### //
3640
- // This file is part of the Xtrack Package. //
3641
- // Copyright (c) CERN, 2025. //
3642
- // ######################################### //
3643
- #ifndef XTRACK_TRACK_SROTATION_H
3644
- #define XTRACK_TRACK_SROTATION_H
3645
-
3646
- #include <headers/track.h>
3647
-
3648
-
3649
- GPUFUN
3650
- void SRotation_single_particle(LocalParticle* part, double sin_z, double cos_z)
3651
- {
3652
- double const x = LocalParticle_get_x(part);
3653
- double const y = LocalParticle_get_y(part);
3654
- double const px = LocalParticle_get_px(part);
3655
- double const py = LocalParticle_get_py(part);
3656
-
3657
- double const x_hat = cos_z * x + sin_z * y;
3658
- double const y_hat = -sin_z * x + cos_z * y;
3659
- double const px_hat = cos_z * px + sin_z * py;
3660
- double const py_hat = -sin_z * px + cos_z * py;
3661
-
3662
- LocalParticle_set_x(part, x_hat);
3663
- LocalParticle_set_y(part, y_hat);
3664
- LocalParticle_set_px(part, px_hat);
3665
- LocalParticle_set_py(part, py_hat);
3666
- }
3667
-
3668
- #endif
3669
- // copyright ############################### //
3670
- // This file is part of the Xtrack Package. //
3671
- // Copyright (c) CERN, 2021. //
3672
- // ######################################### //
3673
-
3674
- #ifndef XTRACK_TRACK_DRIFT_H
3675
- #define XTRACK_TRACK_DRIFT_H
3676
-
3677
-
3678
- GPUFUN
3679
- void Drift_single_particle_expanded(LocalParticle* part, double length){
3680
- double const rpp = LocalParticle_get_rpp(part);
3681
- double const rv0v = 1./LocalParticle_get_rvv(part);
3682
- double const xp = LocalParticle_get_px(part) * rpp;
3683
- double const yp = LocalParticle_get_py(part) * rpp;
3684
- double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
3685
-
3686
- LocalParticle_add_to_x(part, xp * length );
3687
- LocalParticle_add_to_y(part, yp * length );
3688
- LocalParticle_add_to_s(part, length);
3689
- LocalParticle_add_to_zeta(part, length * dzeta );
3690
- }
3691
-
3692
-
3693
- GPUFUN
3694
- void Drift_single_particle_exact(LocalParticle* part, double length){
3695
- double const px = LocalParticle_get_px(part);
3696
- double const py = LocalParticle_get_py(part);
3697
- double const rv0v = 1./LocalParticle_get_rvv(part);
3698
- double const one_plus_delta = 1. + LocalParticle_get_delta(part);
3699
-
3700
- double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
3701
- - px * px - py * py);
3702
- double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
3703
-
3704
- LocalParticle_add_to_x(part, px * one_over_pz * length);
3705
- LocalParticle_add_to_y(part, py * one_over_pz * length);
3706
- LocalParticle_add_to_zeta(part, dzeta * length);
3707
- LocalParticle_add_to_s(part, length);
3708
- }
3709
-
3710
-
3711
- GPUFUN
3712
- void Drift_single_particle(LocalParticle* part, double length){
3713
- #ifndef XTRACK_USE_EXACT_DRIFTS
3714
- Drift_single_particle_expanded(part, length);
3715
- #else
3716
- Drift_single_particle_exact(part, length);
3717
- #endif
3718
- }
3719
-
3720
-
3721
- #endif /* XTRACK_TRACK_DRIFT_H */
3722
-
3723
-
3724
- #ifndef XSTUITE_TRACK_FLAGS_H
3725
- #define XSTUITE_TRACK_FLAGS_H
3726
- #define XS_FLAG_BACKTRACK (0)
3727
- #define XS_FLAG_KILL_CAVITY_KICK (2)
3728
- #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
3729
- #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
3730
- #define XS_FLAG_SR_TAPER (5)
3731
- #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
3732
-
3733
- #endif // XSTUITE_TRACK_FLAGS_H
3734
-
3735
- #include <random/random_src/uniform.h>
3736
-
3737
-
3738
- void sample_uniform(
3739
- RandomUniformData el,
3740
-
3741
- ParticlesData particles,
3742
- double* samples, int64_t n_samples_per_seed,
3743
- int64_t flag_increment_at_element,
3744
- int8_t* io_buffer){
3745
-
3746
- // #define CONTEXT_OPENMP //only_for_context cpu_openmp
3747
- #ifdef CONTEXT_OPENMP
3748
- const int64_t capacity = ParticlesData_get__capacity(particles);
3749
- const int num_threads = omp_get_max_threads();
3750
-
3751
- #ifndef XT_OMP_SKIP_REORGANIZE
3752
- const int64_t num_particles_to_track = ParticlesData_get__num_active_particles(particles);
3753
-
3754
- {
3755
- LocalParticle lpart;
3756
- lpart.io_buffer = io_buffer;
3757
- Particles_to_LocalParticle(particles, &lpart, 0, capacity);
3758
- check_is_active(&lpart);
3759
- count_reorganized_particles(&lpart);
3760
- LocalParticle_to_Particles(&lpart, particles, 0, capacity);
3761
- }
3762
- #else // When we skip reorganize, we cannot just batch active particles
3763
- const int64_t num_particles_to_track = capacity;
3764
- #endif
3765
-
3766
- const int64_t chunk_size = (num_particles_to_track + num_threads - 1)/num_threads; // ceil division
3767
- #endif // CONTEXT_OPENMP
3768
-
3769
- // #pragma omp parallel for //only_for_context cpu_openmp
3770
- // for (int64_t batch_id = 0; batch_id < num_threads; batch_id++) { //only_for_context cpu_openmp
3771
- LocalParticle lpart;
3772
- lpart.io_buffer = io_buffer;
3773
- lpart.track_flags = 0;
3774
- // int64_t part_id = batch_id * chunk_size; //only_for_context cpu_openmp
3775
- // int64_t end_id = (batch_id + 1) * chunk_size; //only_for_context cpu_openmp
3776
- // if (end_id > num_particles_to_track) end_id = num_particles_to_track; //only_for_context cpu_openmp
3777
-
3778
- int64_t part_id = 0; //only_for_context cpu_serial
3779
- // int64_t part_id = blockDim.x * blockIdx.x + threadIdx.x; //only_for_context cuda
3780
- // int64_t part_id = get_global_id(0); //only_for_context opencl
3781
- int64_t end_id = 0; // unused outside of openmp //only_for_context cpu_serial cuda opencl
3782
-
3783
- int64_t part_capacity = ParticlesData_get__capacity(particles);
3784
- if (part_id<part_capacity){
3785
- Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
3786
- if (check_is_active(&lpart)>0){
3787
- RandomUniform_sample(el, &lpart, samples, n_samples_per_seed);
3788
-
3789
- }
3790
- if (check_is_active(&lpart)>0 && flag_increment_at_element){
3791
- increment_at_element(&lpart, 1);
3792
- }
3793
- }
3794
- // } //only_for_context cpu_openmp
3795
-
3796
- // On OpenMP we want to additionally by default reorganize all
3797
- // the particles.
3798
- // #ifndef XT_OMP_SKIP_REORGANIZE //only_for_context cpu_openmp
3799
- // LocalParticle lpart; //only_for_context cpu_openmp
3800
- // lpart.io_buffer = io_buffer; //only_for_context cpu_openmp
3801
- // Particles_to_LocalParticle(particles, &lpart, 0, capacity);//only_for_context cpu_openmp
3802
- // check_is_active(&lpart); //only_for_context cpu_openmp
3803
- // #endif //only_for_context cpu_openmp
3804
- }
3805
-
3806
- #ifndef XOBJ_TYPEDEF_ParticlesMonitorData
3807
- #define XOBJ_TYPEDEF_ParticlesMonitorData
3808
- typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
3809
- static inline ParticlesMonitorData ParticlesMonitorData_getp(ParticlesMonitorData restrict obj){
3810
- int64_t offset=0;
3811
- return (ParticlesMonitorData)(( char*) obj+offset);
3812
- }
3813
- static inline int64_t ParticlesMonitorData_get_start_at_turn(const ParticlesMonitorData restrict obj){
3814
- int64_t offset=0;
3815
- offset+=8;
3816
- return *( int64_t*)(( char*) obj+offset);
3817
- }
3818
- static inline void ParticlesMonitorData_set_start_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3819
- int64_t offset=0;
3820
- offset+=8;
3821
- *( int64_t*)(( char*) obj+offset)=value;
3822
- }
3823
- static inline int64_t* ParticlesMonitorData_getp_start_at_turn(ParticlesMonitorData restrict obj){
3824
- int64_t offset=0;
3825
- offset+=8;
3826
- return ( int64_t*)(( char*) obj+offset);
3827
- }
3828
- static inline int64_t ParticlesMonitorData_get_stop_at_turn(const ParticlesMonitorData restrict obj){
3829
- int64_t offset=0;
3830
- offset+=16;
3831
- return *( int64_t*)(( char*) obj+offset);
3832
- }
3833
- static inline void ParticlesMonitorData_set_stop_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3834
- int64_t offset=0;
3835
- offset+=16;
3836
- *( int64_t*)(( char*) obj+offset)=value;
3837
- }
3838
- static inline int64_t* ParticlesMonitorData_getp_stop_at_turn(ParticlesMonitorData restrict obj){
3839
- int64_t offset=0;
3840
- offset+=16;
3841
- return ( int64_t*)(( char*) obj+offset);
3842
- }
3843
- static inline int64_t ParticlesMonitorData_get_part_id_start(const ParticlesMonitorData restrict obj){
3844
- int64_t offset=0;
3845
- offset+=24;
3846
- return *( int64_t*)(( char*) obj+offset);
3847
- }
3848
- static inline void ParticlesMonitorData_set_part_id_start(ParticlesMonitorData restrict obj, int64_t value){
3849
- int64_t offset=0;
3850
- offset+=24;
3851
- *( int64_t*)(( char*) obj+offset)=value;
3852
- }
3853
- static inline int64_t* ParticlesMonitorData_getp_part_id_start(ParticlesMonitorData restrict obj){
3854
- int64_t offset=0;
3855
- offset+=24;
3856
- return ( int64_t*)(( char*) obj+offset);
3857
- }
3858
- static inline int64_t ParticlesMonitorData_get_part_id_end(const ParticlesMonitorData restrict obj){
3859
- int64_t offset=0;
3860
- offset+=32;
3861
- return *( int64_t*)(( char*) obj+offset);
3862
- }
3863
- static inline void ParticlesMonitorData_set_part_id_end(ParticlesMonitorData restrict obj, int64_t value){
3864
- int64_t offset=0;
3865
- offset+=32;
3866
- *( int64_t*)(( char*) obj+offset)=value;
3867
- }
3868
- static inline int64_t* ParticlesMonitorData_getp_part_id_end(ParticlesMonitorData restrict obj){
3869
- int64_t offset=0;
3870
- offset+=32;
3871
- return ( int64_t*)(( char*) obj+offset);
3872
- }
3873
- static inline int64_t ParticlesMonitorData_get_ebe_mode(const ParticlesMonitorData restrict obj){
3874
- int64_t offset=0;
3875
- offset+=40;
3876
- return *( int64_t*)(( char*) obj+offset);
3877
- }
3878
- static inline void ParticlesMonitorData_set_ebe_mode(ParticlesMonitorData restrict obj, int64_t value){
3879
- int64_t offset=0;
3880
- offset+=40;
3881
- *( int64_t*)(( char*) obj+offset)=value;
3882
- }
3883
- static inline int64_t* ParticlesMonitorData_getp_ebe_mode(ParticlesMonitorData restrict obj){
3884
- int64_t offset=0;
3885
- offset+=40;
3886
- return ( int64_t*)(( char*) obj+offset);
3887
- }
3888
- static inline int64_t ParticlesMonitorData_get_n_records(const ParticlesMonitorData restrict obj){
3889
- int64_t offset=0;
3890
- offset+=48;
3891
- return *( int64_t*)(( char*) obj+offset);
3892
- }
3893
- static inline void ParticlesMonitorData_set_n_records(ParticlesMonitorData restrict obj, int64_t value){
3894
- int64_t offset=0;
3895
- offset+=48;
3896
- *( int64_t*)(( char*) obj+offset)=value;
3897
- }
3898
- static inline int64_t* ParticlesMonitorData_getp_n_records(ParticlesMonitorData restrict obj){
3899
- int64_t offset=0;
3900
- offset+=48;
3901
- return ( int64_t*)(( char*) obj+offset);
3902
- }
3903
- static inline int64_t ParticlesMonitorData_get_n_repetitions(const ParticlesMonitorData restrict obj){
3904
- int64_t offset=0;
3905
- offset+=56;
3906
- return *( int64_t*)(( char*) obj+offset);
3907
- }
3908
- static inline void ParticlesMonitorData_set_n_repetitions(ParticlesMonitorData restrict obj, int64_t value){
3909
- int64_t offset=0;
3910
- offset+=56;
3911
- *( int64_t*)(( char*) obj+offset)=value;
3912
- }
3913
- static inline int64_t* ParticlesMonitorData_getp_n_repetitions(ParticlesMonitorData restrict obj){
3914
- int64_t offset=0;
3915
- offset+=56;
3916
- return ( int64_t*)(( char*) obj+offset);
3917
- }
3918
- static inline int64_t ParticlesMonitorData_get_repetition_period(const ParticlesMonitorData restrict obj){
3919
- int64_t offset=0;
3920
- offset+=64;
3921
- return *( int64_t*)(( char*) obj+offset);
3922
- }
3923
- static inline void ParticlesMonitorData_set_repetition_period(ParticlesMonitorData restrict obj, int64_t value){
3924
- int64_t offset=0;
3925
- offset+=64;
3926
- *( int64_t*)(( char*) obj+offset)=value;
3927
- }
3928
- static inline int64_t* ParticlesMonitorData_getp_repetition_period(ParticlesMonitorData restrict obj){
3929
- int64_t offset=0;
3930
- offset+=64;
3931
- return ( int64_t*)(( char*) obj+offset);
3932
- }
3933
- static inline int64_t ParticlesMonitorData_get_flag_auto_to_numpy(const ParticlesMonitorData restrict obj){
3934
- int64_t offset=0;
3935
- offset+=72;
3936
- return *( int64_t*)(( char*) obj+offset);
3937
- }
3938
- static inline void ParticlesMonitorData_set_flag_auto_to_numpy(ParticlesMonitorData restrict obj, int64_t value){
3939
- int64_t offset=0;
3940
- offset+=72;
3941
- *( int64_t*)(( char*) obj+offset)=value;
3942
- }
3943
- static inline int64_t* ParticlesMonitorData_getp_flag_auto_to_numpy(ParticlesMonitorData restrict obj){
3944
- int64_t offset=0;
3945
- offset+=72;
3946
- return ( int64_t*)(( char*) obj+offset);
3947
- }
3948
- static inline ParticlesData ParticlesMonitorData_getp_data(ParticlesMonitorData restrict obj){
3949
- int64_t offset=0;
3950
- offset+=152;
3951
- return (ParticlesData)(( char*) obj+offset);
3952
- }
3953
- static inline int64_t ParticlesMonitorData_get_data__capacity(const ParticlesMonitorData restrict obj){
3954
- int64_t offset=0;
3955
- offset+=160;
3956
- return *( int64_t*)(( char*) obj+offset);
3957
- }
3958
- static inline void ParticlesMonitorData_set_data__capacity(ParticlesMonitorData restrict obj, int64_t value){
3959
- int64_t offset=0;
3960
- offset+=160;
3961
- *( int64_t*)(( char*) obj+offset)=value;
3962
- }
3963
- static inline int64_t* ParticlesMonitorData_getp_data__capacity(ParticlesMonitorData restrict obj){
3964
- int64_t offset=0;
3965
- offset+=160;
3966
- return ( int64_t*)(( char*) obj+offset);
3967
- }
3968
- static inline int64_t ParticlesMonitorData_get_data__num_active_particles(const ParticlesMonitorData restrict obj){
3969
- int64_t offset=0;
3970
- offset+=168;
3971
- return *( int64_t*)(( char*) obj+offset);
3972
- }
3973
- static inline void ParticlesMonitorData_set_data__num_active_particles(ParticlesMonitorData restrict obj, int64_t value){
3974
- int64_t offset=0;
3975
- offset+=168;
3976
- *( int64_t*)(( char*) obj+offset)=value;
3977
- }
3978
- static inline int64_t* ParticlesMonitorData_getp_data__num_active_particles(ParticlesMonitorData restrict obj){
3979
- int64_t offset=0;
3980
- offset+=168;
3981
- return ( int64_t*)(( char*) obj+offset);
3982
- }
3983
- static inline int64_t ParticlesMonitorData_get_data__num_lost_particles(const ParticlesMonitorData restrict obj){
3984
- int64_t offset=0;
3985
- offset+=176;
3986
- return *( int64_t*)(( char*) obj+offset);
3987
- }
3988
- static inline void ParticlesMonitorData_set_data__num_lost_particles(ParticlesMonitorData restrict obj, int64_t value){
3989
- int64_t offset=0;
3990
- offset+=176;
3991
- *( int64_t*)(( char*) obj+offset)=value;
3992
- }
3993
- static inline int64_t* ParticlesMonitorData_getp_data__num_lost_particles(ParticlesMonitorData restrict obj){
3994
- int64_t offset=0;
3995
- offset+=176;
3996
- return ( int64_t*)(( char*) obj+offset);
3997
- }
3998
- static inline int64_t ParticlesMonitorData_get_data_start_tracking_at_element(const ParticlesMonitorData restrict obj){
3999
- int64_t offset=0;
4000
- offset+=184;
4001
- return *( int64_t*)(( char*) obj+offset);
4002
- }
4003
- static inline void ParticlesMonitorData_set_data_start_tracking_at_element(ParticlesMonitorData restrict obj, int64_t value){
4004
- int64_t offset=0;
4005
- offset+=184;
4006
- *( int64_t*)(( char*) obj+offset)=value;
4007
- }
4008
- static inline int64_t* ParticlesMonitorData_getp_data_start_tracking_at_element(ParticlesMonitorData restrict obj){
4009
- int64_t offset=0;
4010
- offset+=184;
4011
- return ( int64_t*)(( char*) obj+offset);
4012
- }
4013
- static inline double ParticlesMonitorData_get_data_q0(const ParticlesMonitorData restrict obj){
4014
- int64_t offset=0;
4015
- offset+=192;
4016
- return *( double*)(( char*) obj+offset);
4017
- }
4018
- static inline void ParticlesMonitorData_set_data_q0(ParticlesMonitorData restrict obj, double value){
4019
- int64_t offset=0;
4020
- offset+=192;
4021
- *( double*)(( char*) obj+offset)=value;
4022
- }
4023
- static inline double* ParticlesMonitorData_getp_data_q0(ParticlesMonitorData restrict obj){
4024
- int64_t offset=0;
4025
- offset+=192;
3511
+ return ( int64_t*)(( char*) obj+offset);
3512
+ }
3513
+ static inline ParticlesData ParticlesMonitorData_getp_data(ParticlesMonitorData restrict obj){
3514
+ int64_t offset=0;
3515
+ offset+=152;
3516
+ return (ParticlesData)(( char*) obj+offset);
3517
+ }
3518
+ static inline int64_t ParticlesMonitorData_get_data__capacity(const ParticlesMonitorData restrict obj){
3519
+ int64_t offset=0;
3520
+ offset+=160;
3521
+ return *( int64_t*)(( char*) obj+offset);
3522
+ }
3523
+ static inline void ParticlesMonitorData_set_data__capacity(ParticlesMonitorData restrict obj, int64_t value){
3524
+ int64_t offset=0;
3525
+ offset+=160;
3526
+ *( int64_t*)(( char*) obj+offset)=value;
3527
+ }
3528
+ static inline int64_t* ParticlesMonitorData_getp_data__capacity(ParticlesMonitorData restrict obj){
3529
+ int64_t offset=0;
3530
+ offset+=160;
3531
+ return ( int64_t*)(( char*) obj+offset);
3532
+ }
3533
+ static inline int64_t ParticlesMonitorData_get_data__num_active_particles(const ParticlesMonitorData restrict obj){
3534
+ int64_t offset=0;
3535
+ offset+=168;
3536
+ return *( int64_t*)(( char*) obj+offset);
3537
+ }
3538
+ static inline void ParticlesMonitorData_set_data__num_active_particles(ParticlesMonitorData restrict obj, int64_t value){
3539
+ int64_t offset=0;
3540
+ offset+=168;
3541
+ *( int64_t*)(( char*) obj+offset)=value;
3542
+ }
3543
+ static inline int64_t* ParticlesMonitorData_getp_data__num_active_particles(ParticlesMonitorData restrict obj){
3544
+ int64_t offset=0;
3545
+ offset+=168;
3546
+ return ( int64_t*)(( char*) obj+offset);
3547
+ }
3548
+ static inline int64_t ParticlesMonitorData_get_data__num_lost_particles(const ParticlesMonitorData restrict obj){
3549
+ int64_t offset=0;
3550
+ offset+=176;
3551
+ return *( int64_t*)(( char*) obj+offset);
3552
+ }
3553
+ static inline void ParticlesMonitorData_set_data__num_lost_particles(ParticlesMonitorData restrict obj, int64_t value){
3554
+ int64_t offset=0;
3555
+ offset+=176;
3556
+ *( int64_t*)(( char*) obj+offset)=value;
3557
+ }
3558
+ static inline int64_t* ParticlesMonitorData_getp_data__num_lost_particles(ParticlesMonitorData restrict obj){
3559
+ int64_t offset=0;
3560
+ offset+=176;
3561
+ return ( int64_t*)(( char*) obj+offset);
3562
+ }
3563
+ static inline int64_t ParticlesMonitorData_get_data_start_tracking_at_element(const ParticlesMonitorData restrict obj){
3564
+ int64_t offset=0;
3565
+ offset+=184;
3566
+ return *( int64_t*)(( char*) obj+offset);
3567
+ }
3568
+ static inline void ParticlesMonitorData_set_data_start_tracking_at_element(ParticlesMonitorData restrict obj, int64_t value){
3569
+ int64_t offset=0;
3570
+ offset+=184;
3571
+ *( int64_t*)(( char*) obj+offset)=value;
3572
+ }
3573
+ static inline int64_t* ParticlesMonitorData_getp_data_start_tracking_at_element(ParticlesMonitorData restrict obj){
3574
+ int64_t offset=0;
3575
+ offset+=184;
3576
+ return ( int64_t*)(( char*) obj+offset);
3577
+ }
3578
+ static inline double ParticlesMonitorData_get_data_q0(const ParticlesMonitorData restrict obj){
3579
+ int64_t offset=0;
3580
+ offset+=192;
3581
+ return *( double*)(( char*) obj+offset);
3582
+ }
3583
+ static inline void ParticlesMonitorData_set_data_q0(ParticlesMonitorData restrict obj, double value){
3584
+ int64_t offset=0;
3585
+ offset+=192;
3586
+ *( double*)(( char*) obj+offset)=value;
3587
+ }
3588
+ static inline double* ParticlesMonitorData_getp_data_q0(ParticlesMonitorData restrict obj){
3589
+ int64_t offset=0;
3590
+ offset+=192;
4026
3591
  return ( double*)(( char*) obj+offset);
4027
3592
  }
4028
3593
  static inline double ParticlesMonitorData_get_data_mass0(const ParticlesMonitorData restrict obj){
@@ -4906,371 +4471,1007 @@ typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
4906
4471
  offset+=*( int64_t*)(( char*) obj+offset+256);
4907
4472
  return (ArrNInt64)(( char*) obj+offset);
4908
4473
  }
4909
- static inline int64_t ParticlesMonitorData_len_data_at_turn(ParticlesMonitorData restrict obj){
4474
+ static inline int64_t ParticlesMonitorData_len_data_at_turn(ParticlesMonitorData restrict obj){
4475
+ int64_t offset=0;
4476
+ offset+=152;
4477
+ offset+=*( int64_t*)(( char*) obj+offset+256);
4478
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4479
+ return arr[1];
4480
+ }
4481
+ static inline int64_t ParticlesMonitorData_get_data_at_turn(const ParticlesMonitorData restrict obj, int64_t i0){
4482
+ int64_t offset=0;
4483
+ offset+=152;
4484
+ offset+=*( int64_t*)(( char*) obj+offset+256);
4485
+ offset+=16+i0*8;
4486
+ return *( int64_t*)(( char*) obj+offset);
4487
+ }
4488
+ static inline void ParticlesMonitorData_set_data_at_turn(ParticlesMonitorData restrict obj, int64_t i0, int64_t value){
4489
+ int64_t offset=0;
4490
+ offset+=152;
4491
+ offset+=*( int64_t*)(( char*) obj+offset+256);
4492
+ offset+=16+i0*8;
4493
+ *( int64_t*)(( char*) obj+offset)=value;
4494
+ }
4495
+ static inline int64_t* ParticlesMonitorData_getp1_data_at_turn(ParticlesMonitorData restrict obj, int64_t i0){
4496
+ int64_t offset=0;
4497
+ offset+=152;
4498
+ offset+=*( int64_t*)(( char*) obj+offset+256);
4499
+ offset+=16+i0*8;
4500
+ return ( int64_t*)(( char*) obj+offset);
4501
+ }
4502
+ static inline ArrNInt64 ParticlesMonitorData_getp_data_state(ParticlesMonitorData restrict obj){
4503
+ int64_t offset=0;
4504
+ offset+=152;
4505
+ offset+=*( int64_t*)(( char*) obj+offset+264);
4506
+ return (ArrNInt64)(( char*) obj+offset);
4507
+ }
4508
+ static inline int64_t ParticlesMonitorData_len_data_state(ParticlesMonitorData restrict obj){
4509
+ int64_t offset=0;
4510
+ offset+=152;
4511
+ offset+=*( int64_t*)(( char*) obj+offset+264);
4512
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4513
+ return arr[1];
4514
+ }
4515
+ static inline int64_t ParticlesMonitorData_get_data_state(const ParticlesMonitorData restrict obj, int64_t i0){
4516
+ int64_t offset=0;
4517
+ offset+=152;
4518
+ offset+=*( int64_t*)(( char*) obj+offset+264);
4519
+ offset+=16+i0*8;
4520
+ return *( int64_t*)(( char*) obj+offset);
4521
+ }
4522
+ static inline void ParticlesMonitorData_set_data_state(ParticlesMonitorData restrict obj, int64_t i0, int64_t value){
4523
+ int64_t offset=0;
4524
+ offset+=152;
4525
+ offset+=*( int64_t*)(( char*) obj+offset+264);
4526
+ offset+=16+i0*8;
4527
+ *( int64_t*)(( char*) obj+offset)=value;
4528
+ }
4529
+ static inline int64_t* ParticlesMonitorData_getp1_data_state(ParticlesMonitorData restrict obj, int64_t i0){
4530
+ int64_t offset=0;
4531
+ offset+=152;
4532
+ offset+=*( int64_t*)(( char*) obj+offset+264);
4533
+ offset+=16+i0*8;
4534
+ return ( int64_t*)(( char*) obj+offset);
4535
+ }
4536
+ static inline ArrNInt64 ParticlesMonitorData_getp_data_parent_particle_id(ParticlesMonitorData restrict obj){
4537
+ int64_t offset=0;
4538
+ offset+=152;
4539
+ offset+=*( int64_t*)(( char*) obj+offset+272);
4540
+ return (ArrNInt64)(( char*) obj+offset);
4541
+ }
4542
+ static inline int64_t ParticlesMonitorData_len_data_parent_particle_id(ParticlesMonitorData restrict obj){
4543
+ int64_t offset=0;
4544
+ offset+=152;
4545
+ offset+=*( int64_t*)(( char*) obj+offset+272);
4546
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4547
+ return arr[1];
4548
+ }
4549
+ static inline int64_t ParticlesMonitorData_get_data_parent_particle_id(const ParticlesMonitorData restrict obj, int64_t i0){
4550
+ int64_t offset=0;
4551
+ offset+=152;
4552
+ offset+=*( int64_t*)(( char*) obj+offset+272);
4553
+ offset+=16+i0*8;
4554
+ return *( int64_t*)(( char*) obj+offset);
4555
+ }
4556
+ static inline void ParticlesMonitorData_set_data_parent_particle_id(ParticlesMonitorData restrict obj, int64_t i0, int64_t value){
4557
+ int64_t offset=0;
4558
+ offset+=152;
4559
+ offset+=*( int64_t*)(( char*) obj+offset+272);
4560
+ offset+=16+i0*8;
4561
+ *( int64_t*)(( char*) obj+offset)=value;
4562
+ }
4563
+ static inline int64_t* ParticlesMonitorData_getp1_data_parent_particle_id(ParticlesMonitorData restrict obj, int64_t i0){
4564
+ int64_t offset=0;
4565
+ offset+=152;
4566
+ offset+=*( int64_t*)(( char*) obj+offset+272);
4567
+ offset+=16+i0*8;
4568
+ return ( int64_t*)(( char*) obj+offset);
4569
+ }
4570
+ static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s1(ParticlesMonitorData restrict obj){
4571
+ int64_t offset=0;
4572
+ offset+=152;
4573
+ offset+=*( int64_t*)(( char*) obj+offset+280);
4574
+ return (ArrNUint32)(( char*) obj+offset);
4575
+ }
4576
+ static inline int64_t ParticlesMonitorData_len_data__rng_s1(ParticlesMonitorData restrict obj){
4577
+ int64_t offset=0;
4578
+ offset+=152;
4579
+ offset+=*( int64_t*)(( char*) obj+offset+280);
4580
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4581
+ return arr[1];
4582
+ }
4583
+ static inline uint32_t ParticlesMonitorData_get_data__rng_s1(const ParticlesMonitorData restrict obj, int64_t i0){
4584
+ int64_t offset=0;
4585
+ offset+=152;
4586
+ offset+=*( int64_t*)(( char*) obj+offset+280);
4587
+ offset+=16+i0*4;
4588
+ return *( uint32_t*)(( char*) obj+offset);
4589
+ }
4590
+ static inline void ParticlesMonitorData_set_data__rng_s1(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
4591
+ int64_t offset=0;
4592
+ offset+=152;
4593
+ offset+=*( int64_t*)(( char*) obj+offset+280);
4594
+ offset+=16+i0*4;
4595
+ *( uint32_t*)(( char*) obj+offset)=value;
4596
+ }
4597
+ static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s1(ParticlesMonitorData restrict obj, int64_t i0){
4598
+ int64_t offset=0;
4599
+ offset+=152;
4600
+ offset+=*( int64_t*)(( char*) obj+offset+280);
4601
+ offset+=16+i0*4;
4602
+ return ( uint32_t*)(( char*) obj+offset);
4603
+ }
4604
+ static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s2(ParticlesMonitorData restrict obj){
4605
+ int64_t offset=0;
4606
+ offset+=152;
4607
+ offset+=*( int64_t*)(( char*) obj+offset+288);
4608
+ return (ArrNUint32)(( char*) obj+offset);
4609
+ }
4610
+ static inline int64_t ParticlesMonitorData_len_data__rng_s2(ParticlesMonitorData restrict obj){
4611
+ int64_t offset=0;
4612
+ offset+=152;
4613
+ offset+=*( int64_t*)(( char*) obj+offset+288);
4614
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4615
+ return arr[1];
4616
+ }
4617
+ static inline uint32_t ParticlesMonitorData_get_data__rng_s2(const ParticlesMonitorData restrict obj, int64_t i0){
4618
+ int64_t offset=0;
4619
+ offset+=152;
4620
+ offset+=*( int64_t*)(( char*) obj+offset+288);
4621
+ offset+=16+i0*4;
4622
+ return *( uint32_t*)(( char*) obj+offset);
4623
+ }
4624
+ static inline void ParticlesMonitorData_set_data__rng_s2(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
4625
+ int64_t offset=0;
4626
+ offset+=152;
4627
+ offset+=*( int64_t*)(( char*) obj+offset+288);
4628
+ offset+=16+i0*4;
4629
+ *( uint32_t*)(( char*) obj+offset)=value;
4630
+ }
4631
+ static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s2(ParticlesMonitorData restrict obj, int64_t i0){
4632
+ int64_t offset=0;
4633
+ offset+=152;
4634
+ offset+=*( int64_t*)(( char*) obj+offset+288);
4635
+ offset+=16+i0*4;
4636
+ return ( uint32_t*)(( char*) obj+offset);
4637
+ }
4638
+ static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s3(ParticlesMonitorData restrict obj){
4639
+ int64_t offset=0;
4640
+ offset+=152;
4641
+ offset+=*( int64_t*)(( char*) obj+offset+296);
4642
+ return (ArrNUint32)(( char*) obj+offset);
4643
+ }
4644
+ static inline int64_t ParticlesMonitorData_len_data__rng_s3(ParticlesMonitorData restrict obj){
4645
+ int64_t offset=0;
4646
+ offset+=152;
4647
+ offset+=*( int64_t*)(( char*) obj+offset+296);
4648
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4649
+ return arr[1];
4650
+ }
4651
+ static inline uint32_t ParticlesMonitorData_get_data__rng_s3(const ParticlesMonitorData restrict obj, int64_t i0){
4652
+ int64_t offset=0;
4653
+ offset+=152;
4654
+ offset+=*( int64_t*)(( char*) obj+offset+296);
4655
+ offset+=16+i0*4;
4656
+ return *( uint32_t*)(( char*) obj+offset);
4657
+ }
4658
+ static inline void ParticlesMonitorData_set_data__rng_s3(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
4659
+ int64_t offset=0;
4660
+ offset+=152;
4661
+ offset+=*( int64_t*)(( char*) obj+offset+296);
4662
+ offset+=16+i0*4;
4663
+ *( uint32_t*)(( char*) obj+offset)=value;
4664
+ }
4665
+ static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s3(ParticlesMonitorData restrict obj, int64_t i0){
4666
+ int64_t offset=0;
4667
+ offset+=152;
4668
+ offset+=*( int64_t*)(( char*) obj+offset+296);
4669
+ offset+=16+i0*4;
4670
+ return ( uint32_t*)(( char*) obj+offset);
4671
+ }
4672
+ static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s4(ParticlesMonitorData restrict obj){
4673
+ int64_t offset=0;
4674
+ offset+=152;
4675
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4676
+ return (ArrNUint32)(( char*) obj+offset);
4677
+ }
4678
+ static inline int64_t ParticlesMonitorData_len_data__rng_s4(ParticlesMonitorData restrict obj){
4679
+ int64_t offset=0;
4680
+ offset+=152;
4681
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4682
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
4683
+ return arr[1];
4684
+ }
4685
+ static inline uint32_t ParticlesMonitorData_get_data__rng_s4(const ParticlesMonitorData restrict obj, int64_t i0){
4686
+ int64_t offset=0;
4687
+ offset+=152;
4688
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4689
+ offset+=16+i0*4;
4690
+ return *( uint32_t*)(( char*) obj+offset);
4691
+ }
4692
+ static inline void ParticlesMonitorData_set_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
4693
+ int64_t offset=0;
4694
+ offset+=152;
4695
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4696
+ offset+=16+i0*4;
4697
+ *( uint32_t*)(( char*) obj+offset)=value;
4698
+ }
4699
+ static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0){
4700
+ int64_t offset=0;
4701
+ offset+=152;
4702
+ offset+=*( int64_t*)(( char*) obj+offset+304);
4703
+ offset+=16+i0*4;
4704
+ return ( uint32_t*)(( char*) obj+offset);
4705
+ }
4706
+ static inline double ParticlesMonitorData_get__sin_rot_s(const ParticlesMonitorData restrict obj){
4707
+ int64_t offset=0;
4708
+ offset+=80;
4709
+ return *( double*)(( char*) obj+offset);
4710
+ }
4711
+ static inline void ParticlesMonitorData_set__sin_rot_s(ParticlesMonitorData restrict obj, double value){
4712
+ int64_t offset=0;
4713
+ offset+=80;
4714
+ *( double*)(( char*) obj+offset)=value;
4715
+ }
4716
+ static inline double* ParticlesMonitorData_getp__sin_rot_s(ParticlesMonitorData restrict obj){
4717
+ int64_t offset=0;
4718
+ offset+=80;
4719
+ return ( double*)(( char*) obj+offset);
4720
+ }
4721
+ static inline double ParticlesMonitorData_get__cos_rot_s(const ParticlesMonitorData restrict obj){
4722
+ int64_t offset=0;
4723
+ offset+=88;
4724
+ return *( double*)(( char*) obj+offset);
4725
+ }
4726
+ static inline void ParticlesMonitorData_set__cos_rot_s(ParticlesMonitorData restrict obj, double value){
4727
+ int64_t offset=0;
4728
+ offset+=88;
4729
+ *( double*)(( char*) obj+offset)=value;
4730
+ }
4731
+ static inline double* ParticlesMonitorData_getp__cos_rot_s(ParticlesMonitorData restrict obj){
4910
4732
  int64_t offset=0;
4911
- offset+=152;
4912
- offset+=*( int64_t*)(( char*) obj+offset+256);
4913
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
4914
- return arr[1];
4733
+ offset+=88;
4734
+ return ( double*)(( char*) obj+offset);
4915
4735
  }
4916
- static inline int64_t ParticlesMonitorData_get_data_at_turn(const ParticlesMonitorData restrict obj, int64_t i0){
4736
+ static inline double ParticlesMonitorData_get__shift_x(const ParticlesMonitorData restrict obj){
4917
4737
  int64_t offset=0;
4918
- offset+=152;
4919
- offset+=*( int64_t*)(( char*) obj+offset+256);
4920
- offset+=16+i0*8;
4921
- return *( int64_t*)(( char*) obj+offset);
4738
+ offset+=96;
4739
+ return *( double*)(( char*) obj+offset);
4922
4740
  }
4923
- static inline void ParticlesMonitorData_set_data_at_turn(ParticlesMonitorData restrict obj, int64_t i0, int64_t value){
4741
+ static inline void ParticlesMonitorData_set__shift_x(ParticlesMonitorData restrict obj, double value){
4924
4742
  int64_t offset=0;
4925
- offset+=152;
4926
- offset+=*( int64_t*)(( char*) obj+offset+256);
4927
- offset+=16+i0*8;
4928
- *( int64_t*)(( char*) obj+offset)=value;
4743
+ offset+=96;
4744
+ *( double*)(( char*) obj+offset)=value;
4929
4745
  }
4930
- static inline int64_t* ParticlesMonitorData_getp1_data_at_turn(ParticlesMonitorData restrict obj, int64_t i0){
4746
+ static inline double* ParticlesMonitorData_getp__shift_x(ParticlesMonitorData restrict obj){
4931
4747
  int64_t offset=0;
4932
- offset+=152;
4933
- offset+=*( int64_t*)(( char*) obj+offset+256);
4934
- offset+=16+i0*8;
4935
- return ( int64_t*)(( char*) obj+offset);
4748
+ offset+=96;
4749
+ return ( double*)(( char*) obj+offset);
4936
4750
  }
4937
- static inline ArrNInt64 ParticlesMonitorData_getp_data_state(ParticlesMonitorData restrict obj){
4751
+ static inline double ParticlesMonitorData_get__shift_y(const ParticlesMonitorData restrict obj){
4938
4752
  int64_t offset=0;
4939
- offset+=152;
4940
- offset+=*( int64_t*)(( char*) obj+offset+264);
4941
- return (ArrNInt64)(( char*) obj+offset);
4753
+ offset+=104;
4754
+ return *( double*)(( char*) obj+offset);
4942
4755
  }
4943
- static inline int64_t ParticlesMonitorData_len_data_state(ParticlesMonitorData restrict obj){
4756
+ static inline void ParticlesMonitorData_set__shift_y(ParticlesMonitorData restrict obj, double value){
4944
4757
  int64_t offset=0;
4945
- offset+=152;
4946
- offset+=*( int64_t*)(( char*) obj+offset+264);
4947
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
4948
- return arr[1];
4758
+ offset+=104;
4759
+ *( double*)(( char*) obj+offset)=value;
4949
4760
  }
4950
- static inline int64_t ParticlesMonitorData_get_data_state(const ParticlesMonitorData restrict obj, int64_t i0){
4761
+ static inline double* ParticlesMonitorData_getp__shift_y(ParticlesMonitorData restrict obj){
4951
4762
  int64_t offset=0;
4952
- offset+=152;
4953
- offset+=*( int64_t*)(( char*) obj+offset+264);
4954
- offset+=16+i0*8;
4955
- return *( int64_t*)(( char*) obj+offset);
4763
+ offset+=104;
4764
+ return ( double*)(( char*) obj+offset);
4956
4765
  }
4957
- static inline void ParticlesMonitorData_set_data_state(ParticlesMonitorData restrict obj, int64_t i0, int64_t value){
4766
+ static inline double ParticlesMonitorData_get__shift_s(const ParticlesMonitorData restrict obj){
4958
4767
  int64_t offset=0;
4959
- offset+=152;
4960
- offset+=*( int64_t*)(( char*) obj+offset+264);
4961
- offset+=16+i0*8;
4962
- *( int64_t*)(( char*) obj+offset)=value;
4768
+ offset+=112;
4769
+ return *( double*)(( char*) obj+offset);
4963
4770
  }
4964
- static inline int64_t* ParticlesMonitorData_getp1_data_state(ParticlesMonitorData restrict obj, int64_t i0){
4771
+ static inline void ParticlesMonitorData_set__shift_s(ParticlesMonitorData restrict obj, double value){
4965
4772
  int64_t offset=0;
4966
- offset+=152;
4967
- offset+=*( int64_t*)(( char*) obj+offset+264);
4968
- offset+=16+i0*8;
4969
- return ( int64_t*)(( char*) obj+offset);
4773
+ offset+=112;
4774
+ *( double*)(( char*) obj+offset)=value;
4970
4775
  }
4971
- static inline ArrNInt64 ParticlesMonitorData_getp_data_parent_particle_id(ParticlesMonitorData restrict obj){
4776
+ static inline double* ParticlesMonitorData_getp__shift_s(ParticlesMonitorData restrict obj){
4972
4777
  int64_t offset=0;
4973
- offset+=152;
4974
- offset+=*( int64_t*)(( char*) obj+offset+272);
4975
- return (ArrNInt64)(( char*) obj+offset);
4778
+ offset+=112;
4779
+ return ( double*)(( char*) obj+offset);
4976
4780
  }
4977
- static inline int64_t ParticlesMonitorData_len_data_parent_particle_id(ParticlesMonitorData restrict obj){
4781
+ static inline double ParticlesMonitorData_get__rot_x_rad(const ParticlesMonitorData restrict obj){
4978
4782
  int64_t offset=0;
4979
- offset+=152;
4980
- offset+=*( int64_t*)(( char*) obj+offset+272);
4981
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
4982
- return arr[1];
4783
+ offset+=120;
4784
+ return *( double*)(( char*) obj+offset);
4983
4785
  }
4984
- static inline int64_t ParticlesMonitorData_get_data_parent_particle_id(const ParticlesMonitorData restrict obj, int64_t i0){
4786
+ static inline void ParticlesMonitorData_set__rot_x_rad(ParticlesMonitorData restrict obj, double value){
4985
4787
  int64_t offset=0;
4986
- offset+=152;
4987
- offset+=*( int64_t*)(( char*) obj+offset+272);
4988
- offset+=16+i0*8;
4989
- return *( int64_t*)(( char*) obj+offset);
4788
+ offset+=120;
4789
+ *( double*)(( char*) obj+offset)=value;
4990
4790
  }
4991
- static inline void ParticlesMonitorData_set_data_parent_particle_id(ParticlesMonitorData restrict obj, int64_t i0, int64_t value){
4791
+ static inline double* ParticlesMonitorData_getp__rot_x_rad(ParticlesMonitorData restrict obj){
4992
4792
  int64_t offset=0;
4993
- offset+=152;
4994
- offset+=*( int64_t*)(( char*) obj+offset+272);
4995
- offset+=16+i0*8;
4996
- *( int64_t*)(( char*) obj+offset)=value;
4793
+ offset+=120;
4794
+ return ( double*)(( char*) obj+offset);
4997
4795
  }
4998
- static inline int64_t* ParticlesMonitorData_getp1_data_parent_particle_id(ParticlesMonitorData restrict obj, int64_t i0){
4796
+ static inline double ParticlesMonitorData_get__rot_y_rad(const ParticlesMonitorData restrict obj){
4999
4797
  int64_t offset=0;
5000
- offset+=152;
5001
- offset+=*( int64_t*)(( char*) obj+offset+272);
5002
- offset+=16+i0*8;
5003
- return ( int64_t*)(( char*) obj+offset);
4798
+ offset+=128;
4799
+ return *( double*)(( char*) obj+offset);
5004
4800
  }
5005
- static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s1(ParticlesMonitorData restrict obj){
4801
+ static inline void ParticlesMonitorData_set__rot_y_rad(ParticlesMonitorData restrict obj, double value){
5006
4802
  int64_t offset=0;
5007
- offset+=152;
5008
- offset+=*( int64_t*)(( char*) obj+offset+280);
5009
- return (ArrNUint32)(( char*) obj+offset);
4803
+ offset+=128;
4804
+ *( double*)(( char*) obj+offset)=value;
5010
4805
  }
5011
- static inline int64_t ParticlesMonitorData_len_data__rng_s1(ParticlesMonitorData restrict obj){
4806
+ static inline double* ParticlesMonitorData_getp__rot_y_rad(ParticlesMonitorData restrict obj){
5012
4807
  int64_t offset=0;
5013
- offset+=152;
5014
- offset+=*( int64_t*)(( char*) obj+offset+280);
5015
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
5016
- return arr[1];
4808
+ offset+=128;
4809
+ return ( double*)(( char*) obj+offset);
5017
4810
  }
5018
- static inline uint32_t ParticlesMonitorData_get_data__rng_s1(const ParticlesMonitorData restrict obj, int64_t i0){
4811
+ static inline double ParticlesMonitorData_get__rot_s_rad_no_frame(const ParticlesMonitorData restrict obj){
5019
4812
  int64_t offset=0;
5020
- offset+=152;
5021
- offset+=*( int64_t*)(( char*) obj+offset+280);
5022
- offset+=16+i0*4;
5023
- return *( uint32_t*)(( char*) obj+offset);
4813
+ offset+=136;
4814
+ return *( double*)(( char*) obj+offset);
5024
4815
  }
5025
- static inline void ParticlesMonitorData_set_data__rng_s1(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
4816
+ static inline void ParticlesMonitorData_set__rot_s_rad_no_frame(ParticlesMonitorData restrict obj, double value){
5026
4817
  int64_t offset=0;
5027
- offset+=152;
5028
- offset+=*( int64_t*)(( char*) obj+offset+280);
5029
- offset+=16+i0*4;
5030
- *( uint32_t*)(( char*) obj+offset)=value;
4818
+ offset+=136;
4819
+ *( double*)(( char*) obj+offset)=value;
5031
4820
  }
5032
- static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s1(ParticlesMonitorData restrict obj, int64_t i0){
4821
+ static inline double* ParticlesMonitorData_getp__rot_s_rad_no_frame(ParticlesMonitorData restrict obj){
5033
4822
  int64_t offset=0;
5034
- offset+=152;
5035
- offset+=*( int64_t*)(( char*) obj+offset+280);
5036
- offset+=16+i0*4;
5037
- return ( uint32_t*)(( char*) obj+offset);
4823
+ offset+=136;
4824
+ return ( double*)(( char*) obj+offset);
5038
4825
  }
5039
- static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s2(ParticlesMonitorData restrict obj){
4826
+ static inline double ParticlesMonitorData_get_rot_shift_anchor(const ParticlesMonitorData restrict obj){
5040
4827
  int64_t offset=0;
5041
- offset+=152;
5042
- offset+=*( int64_t*)(( char*) obj+offset+288);
5043
- return (ArrNUint32)(( char*) obj+offset);
4828
+ offset+=144;
4829
+ return *( double*)(( char*) obj+offset);
5044
4830
  }
5045
- static inline int64_t ParticlesMonitorData_len_data__rng_s2(ParticlesMonitorData restrict obj){
4831
+ static inline void ParticlesMonitorData_set_rot_shift_anchor(ParticlesMonitorData restrict obj, double value){
5046
4832
  int64_t offset=0;
5047
- offset+=152;
5048
- offset+=*( int64_t*)(( char*) obj+offset+288);
5049
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
5050
- return arr[1];
4833
+ offset+=144;
4834
+ *( double*)(( char*) obj+offset)=value;
5051
4835
  }
5052
- static inline uint32_t ParticlesMonitorData_get_data__rng_s2(const ParticlesMonitorData restrict obj, int64_t i0){
4836
+ static inline double* ParticlesMonitorData_getp_rot_shift_anchor(ParticlesMonitorData restrict obj){
5053
4837
  int64_t offset=0;
5054
- offset+=152;
5055
- offset+=*( int64_t*)(( char*) obj+offset+288);
5056
- offset+=16+i0*4;
5057
- return *( uint32_t*)(( char*) obj+offset);
4838
+ offset+=144;
4839
+ return ( double*)(( char*) obj+offset);
4840
+ }
4841
+ #endif
4842
+ // copyright ############################### //
4843
+ // This file is part of the Xtrack Package. //
4844
+ // Copyright (c) CERN, 2021. //
4845
+ // ######################################### //
4846
+
4847
+ #ifndef XTRACK_CONSTANTS_H
4848
+ #define XTRACK_CONSTANTS_H
4849
+
4850
+ #if !defined( C_LIGHT )
4851
+ #define C_LIGHT ( 299792458.0 )
4852
+ #endif /* !defined( C_LIGHT ) */
4853
+
4854
+ #if !defined( EPSILON_0 )
4855
+ #define EPSILON_0 (8.854187817620e-12)
4856
+ #endif /* !defined( EPSILON_0 ) */
4857
+
4858
+ #if !defined( PI )
4859
+ #define PI (3.1415926535897932384626433832795028841971693993751)
4860
+ #endif /* !defined( PI ) */
4861
+
4862
+ #if !defined( MU_0 )
4863
+ #define MU_0 (PI*4.0e-7)
4864
+ #endif /* !defined( MU_0 ) */
4865
+
4866
+ #if !defined( DEG2RAD )
4867
+ #define DEG2RAD (0.0174532925199432957692369076848861271344287188854)
4868
+ #endif /* !defiend( DEG2RAD ) */
4869
+
4870
+ #if !defined( RAD2DEG )
4871
+ #define RAD2DEG (57.29577951308232087679815481410517033240547246656442)
4872
+ #endif /* !defiend( RAD2DEG ) */
4873
+
4874
+ #if !defined( SQRT_PI )
4875
+ #define SQRT_PI (1.7724538509055160272981674833411451827975494561224)
4876
+ #endif /* !defined( SQRT_PI ) */
4877
+
4878
+ #if !defined( QELEM )
4879
+ #define QELEM (1.60217662e-19)
4880
+ #endif /* !defined( QELEM ) */
4881
+
4882
+ #if !defined( DBL_MAX )
4883
+ #define DBL_MAX (1.7976931348623158e+308)
4884
+ #endif /* !defined( DBL_MAX ) */
4885
+
4886
+ #if !defined( DBL_MIN )
4887
+ #define DBL_MIN (2.2250738585072014e-308)
4888
+ #endif /* !defined( DBL_MIN ) */
4889
+
4890
+ #if !defined( DBL_EPSILON )
4891
+ #define DBL_EPSILON (2.2204460492503131e-16)
4892
+ #endif /* !defined( DBL_EPSILON ) */
4893
+
4894
+ #if !defined( RADIUS_ELECTRON )
4895
+ #define RADIUS_ELECTRON (2.8179403262e-15)
4896
+ #endif /* !defined( RADIUS_ELECTRON ) */
4897
+
4898
+ #if !defined( MASS_ELECTRON )
4899
+ #define MASS_ELECTRON (9.1093837e-31)
4900
+ #endif /* !defined( MASS_ELECTRON ) */
4901
+
4902
+ #endif /* XTRACK_CONSTANTS_H */
4903
+
4904
+ // copyright ############################### //
4905
+ // This file is part of the Xtrack Package. //
4906
+ // Copyright (c) CERN, 2023. //
4907
+ // ######################################### //
4908
+
4909
+ #ifndef XTRACK_FUNCTIONS_H
4910
+ #define XTRACK_FUNCTIONS_H
4911
+
4912
+ #include <headers/track.h>
4913
+
4914
+
4915
+ GPUFUN
4916
+ void kill_all_particles(LocalParticle* part0, int64_t kill_state) {
4917
+ START_PER_PARTICLE_BLOCK(part0, part);
4918
+ LocalParticle_kill_particle(part, kill_state);
4919
+ END_PER_PARTICLE_BLOCK;
4920
+ }
4921
+
4922
+
4923
+ GPUFUN
4924
+ int8_t assert_tracking(LocalParticle* part, int64_t kill_state){
4925
+ // Whenever we are not tracking, e.g. in a twiss, the particle will be at_turn < 0.
4926
+ // We test this to distinguish genuine tracking from twiss.
4927
+ if (LocalParticle_get_at_turn(part) < 0){
4928
+ LocalParticle_kill_particle(part, kill_state);
4929
+ return 0;
4930
+ }
4931
+ return 1;
5058
4932
  }
5059
- static inline void ParticlesMonitorData_set_data__rng_s2(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
5060
- int64_t offset=0;
5061
- offset+=152;
5062
- offset+=*( int64_t*)(( char*) obj+offset+288);
5063
- offset+=16+i0*4;
5064
- *( uint32_t*)(( char*) obj+offset)=value;
4933
+
4934
+ #endif /* XTRACK_FUNCTIONS_H */
4935
+
4936
+ // copyright ############################### //
4937
+ // This file is part of the Xtrack Package. //
4938
+ // Copyright (c) CERN, 2023. //
4939
+ // ######################################### //
4940
+
4941
+ #ifndef XTRACK_PARTICLE_STATES_H
4942
+ #define XTRACK_PARTICLE_STATES_H
4943
+
4944
+ #define XT_LOST_ON_APERTURE 0
4945
+ #define XT_LOST_ON_LONG_CUT -2
4946
+ #define XT_LOST_ALL_E_IN_SYNRAD -10
4947
+ #define RNG_ERR_SEEDS_NOT_SET -20
4948
+ #define RNG_ERR_INVALID_TRACK -21
4949
+ #define RNG_ERR_RUTH_NOT_SET -22
4950
+ #define XT_INVALID_SLICE_TRANSFORM -40
4951
+ #define XT_INVALID_CURVED_SLICE_TRANSFORM -41
4952
+
4953
+ #endif /* XTRACK_PARTICLE_STATES_H */
4954
+
4955
+ // copyright ############################### //
4956
+ // This file is part of the Xtrack Package. //
4957
+ // Copyright (c) CERN, 2025. //
4958
+ // ######################################### //
4959
+ #ifndef XTRACK_TRACK_SROTATION_H
4960
+ #define XTRACK_TRACK_SROTATION_H
4961
+
4962
+ #include <headers/track.h>
4963
+
4964
+
4965
+ GPUFUN
4966
+ void SRotation_single_particle(LocalParticle* part, double sin_z, double cos_z)
4967
+ {
4968
+ double const x = LocalParticle_get_x(part);
4969
+ double const y = LocalParticle_get_y(part);
4970
+ double const px = LocalParticle_get_px(part);
4971
+ double const py = LocalParticle_get_py(part);
4972
+
4973
+ double const x_hat = cos_z * x + sin_z * y;
4974
+ double const y_hat = -sin_z * x + cos_z * y;
4975
+ double const px_hat = cos_z * px + sin_z * py;
4976
+ double const py_hat = -sin_z * px + cos_z * py;
4977
+
4978
+ LocalParticle_set_x(part, x_hat);
4979
+ LocalParticle_set_y(part, y_hat);
4980
+ LocalParticle_set_px(part, px_hat);
4981
+ LocalParticle_set_py(part, py_hat);
5065
4982
  }
5066
- static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s2(ParticlesMonitorData restrict obj, int64_t i0){
5067
- int64_t offset=0;
5068
- offset+=152;
5069
- offset+=*( int64_t*)(( char*) obj+offset+288);
5070
- offset+=16+i0*4;
5071
- return ( uint32_t*)(( char*) obj+offset);
4983
+
4984
+ #endif
4985
+ // copyright ############################### //
4986
+ // This file is part of the Xtrack Package. //
4987
+ // Copyright (c) CERN, 2021. //
4988
+ // ######################################### //
4989
+
4990
+ #ifndef XTRACK_TRACK_DRIFT_H
4991
+ #define XTRACK_TRACK_DRIFT_H
4992
+
4993
+
4994
+ GPUFUN
4995
+ void Drift_single_particle_expanded(LocalParticle* part, double length){
4996
+ double const rpp = LocalParticle_get_rpp(part);
4997
+ double const rv0v = 1./LocalParticle_get_rvv(part);
4998
+ double const xp = LocalParticle_get_px(part) * rpp;
4999
+ double const yp = LocalParticle_get_py(part) * rpp;
5000
+ double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
5001
+
5002
+ LocalParticle_add_to_x(part, xp * length );
5003
+ LocalParticle_add_to_y(part, yp * length );
5004
+ LocalParticle_add_to_s(part, length);
5005
+ LocalParticle_add_to_zeta(part, length * dzeta );
5072
5006
  }
5073
- static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s3(ParticlesMonitorData restrict obj){
5074
- int64_t offset=0;
5075
- offset+=152;
5076
- offset+=*( int64_t*)(( char*) obj+offset+296);
5077
- return (ArrNUint32)(( char*) obj+offset);
5007
+
5008
+
5009
+ GPUFUN
5010
+ void Drift_single_particle_exact(LocalParticle* part, double length){
5011
+ double const px = LocalParticle_get_px(part);
5012
+ double const py = LocalParticle_get_py(part);
5013
+ double const rv0v = 1./LocalParticle_get_rvv(part);
5014
+ double const one_plus_delta = 1. + LocalParticle_get_delta(part);
5015
+
5016
+ double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
5017
+ - px * px - py * py);
5018
+ double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
5019
+
5020
+ LocalParticle_add_to_x(part, px * one_over_pz * length);
5021
+ LocalParticle_add_to_y(part, py * one_over_pz * length);
5022
+ LocalParticle_add_to_zeta(part, dzeta * length);
5023
+ LocalParticle_add_to_s(part, length);
5078
5024
  }
5079
- static inline int64_t ParticlesMonitorData_len_data__rng_s3(ParticlesMonitorData restrict obj){
5080
- int64_t offset=0;
5081
- offset+=152;
5082
- offset+=*( int64_t*)(( char*) obj+offset+296);
5083
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
5084
- return arr[1];
5025
+
5026
+
5027
+ GPUFUN
5028
+ void Drift_single_particle(LocalParticle* part, double length){
5029
+ #ifndef XTRACK_USE_EXACT_DRIFTS
5030
+ Drift_single_particle_expanded(part, length);
5031
+ #else
5032
+ Drift_single_particle_exact(part, length);
5033
+ #endif
5085
5034
  }
5086
- static inline uint32_t ParticlesMonitorData_get_data__rng_s3(const ParticlesMonitorData restrict obj, int64_t i0){
5087
- int64_t offset=0;
5088
- offset+=152;
5089
- offset+=*( int64_t*)(( char*) obj+offset+296);
5090
- offset+=16+i0*4;
5091
- return *( uint32_t*)(( char*) obj+offset);
5035
+
5036
+
5037
+ #endif /* XTRACK_TRACK_DRIFT_H */
5038
+
5039
+
5040
+ #ifndef XSTUITE_TRACK_FLAGS_H
5041
+ #define XSTUITE_TRACK_FLAGS_H
5042
+ #define XS_FLAG_BACKTRACK (0)
5043
+ #define XS_FLAG_KILL_CAVITY_KICK (2)
5044
+ #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
5045
+ #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
5046
+ #define XS_FLAG_SR_TAPER (5)
5047
+ #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
5048
+
5049
+ #endif // XSTUITE_TRACK_FLAGS_H
5050
+
5051
+ // copyright ############################### //
5052
+ // This file is part of the Xtrack Package. //
5053
+ // Copyright (c) CERN, 2021. //
5054
+ // ######################################### //
5055
+
5056
+ #ifndef XTRACK_MONITORS_H
5057
+ #define XTRACK_MONITORS_H
5058
+
5059
+ #include <headers/track.h>
5060
+
5061
+
5062
+ GPUFUN
5063
+ void ParticlesMonitor_track_local_particle(ParticlesMonitorData el,
5064
+ LocalParticle* part0){
5065
+
5066
+ int64_t const start_at_turn = ParticlesMonitorData_get_start_at_turn(el);
5067
+ int64_t const stop_at_turn = ParticlesMonitorData_get_stop_at_turn(el);
5068
+ int64_t const part_id_start = ParticlesMonitorData_get_part_id_start(el);
5069
+ int64_t const part_id_end= ParticlesMonitorData_get_part_id_end(el);
5070
+ int64_t const ebe_mode = ParticlesMonitorData_get_ebe_mode(el);
5071
+ int64_t const n_repetitions = ParticlesMonitorData_get_n_repetitions(el);
5072
+ int64_t const repetition_period = ParticlesMonitorData_get_repetition_period(el);
5073
+ ParticlesData data = ParticlesMonitorData_getp_data(el);
5074
+
5075
+ int64_t n_turns_record = stop_at_turn - start_at_turn;
5076
+
5077
+ START_PER_PARTICLE_BLOCK(part0, part);
5078
+ int64_t at_turn;
5079
+ if (ebe_mode){
5080
+ at_turn = LocalParticle_get_at_element(part);
5081
+ }
5082
+ else{
5083
+ if (LocalParticle_check_track_flag(part, XS_FLAG_BACKTRACK)) {
5084
+ return; // do not log (only ebe monitor supported for now in backtrack)
5085
+ }
5086
+ at_turn = LocalParticle_get_at_turn(part);
5087
+ }
5088
+ if (n_repetitions == 1){
5089
+ if (at_turn>=start_at_turn && at_turn<stop_at_turn){
5090
+ int64_t const particle_id = LocalParticle_get_particle_id(part);
5091
+ if (particle_id<part_id_end && particle_id>=part_id_start){
5092
+ int64_t const store_at =
5093
+ n_turns_record * (particle_id - part_id_start)
5094
+ + at_turn - start_at_turn;
5095
+ LocalParticle_to_Particles(part, data, store_at, 0);
5096
+ }
5097
+ }
5098
+ }
5099
+ else if (n_repetitions > 1){
5100
+ if (at_turn < start_at_turn){
5101
+ // return; //only_for_context cuda opencl
5102
+ break; //only_for_context cpu_serial cpu_openmp
5103
+ }
5104
+ int64_t const i_frame = (at_turn - start_at_turn) / repetition_period;
5105
+ if (i_frame < n_repetitions
5106
+ && at_turn >= start_at_turn + i_frame*repetition_period
5107
+ && at_turn < stop_at_turn + i_frame*repetition_period
5108
+ ){
5109
+ int64_t const particle_id = LocalParticle_get_particle_id(part);
5110
+ if (particle_id<part_id_end && particle_id>=part_id_start){
5111
+ int64_t const store_at =
5112
+ n_turns_record * (part_id_end - part_id_start) * i_frame
5113
+ + n_turns_record * (particle_id - part_id_start)
5114
+ + (at_turn - i_frame * repetition_period) - start_at_turn;
5115
+ LocalParticle_to_Particles(part, data, store_at, 0);
5116
+ }
5117
+ }
5118
+ }
5119
+
5120
+ #ifdef XSUITE_RESTORE_LOSS
5121
+ LocalParticle_set_state(part, 1);
5122
+ #endif
5123
+ END_PER_PARTICLE_BLOCK;
5092
5124
  }
5093
- static inline void ParticlesMonitorData_set_data__rng_s3(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
5094
- int64_t offset=0;
5095
- offset+=152;
5096
- offset+=*( int64_t*)(( char*) obj+offset+296);
5097
- offset+=16+i0*4;
5098
- *( uint32_t*)(( char*) obj+offset)=value;
5125
+
5126
+ #endif
5127
+
5128
+
5129
+
5130
+ #include <headers/track.h>
5131
+ #include <headers/particle_states.h>
5132
+ #include <beam_elements/elements_src/track_misalignments.h>
5133
+ GPUFUN void ParticlesMonitor_track_local_particle_with_transformations(ParticlesMonitorData el, LocalParticle* part0){
5134
+ // Transform to local frame
5135
+ double const _sin_rot_s = ParticlesMonitorData_get__sin_rot_s(el);
5136
+ if (_sin_rot_s > -2.) {
5137
+ double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5138
+ double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5139
+ double const shift_x = ParticlesMonitorData_get__shift_x(el);
5140
+ double const shift_y = ParticlesMonitorData_get__shift_y(el);
5141
+ double const shift_s = ParticlesMonitorData_get__shift_s(el);
5142
+ double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5143
+ double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5144
+ double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5145
+ double const length = 0.;
5146
+ ;
5147
+ double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5148
+ int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5149
+
5150
+ if (!backtrack) {
5151
+ track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5152
+ track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5153
+ }
5154
+
5155
+ /* Spin tracking is disabled by the synrad compile flag */
5156
+ #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5157
+ // Rotate spin
5158
+
5159
+ {
5160
+ // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5161
+ // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5162
+
5163
+ const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5164
+ const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5165
+
5166
+ //#pragma omp simd // TODO: currently does not work, needs investigating
5167
+ for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5168
+
5169
+ LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5170
+ LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5171
+ part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5172
+
5173
+ // LocalParticle* part = part0; //only_for_context opencl cuda
5174
+
5175
+ // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5176
+
5177
+ double const spin_x_0 = LocalParticle_get_spin_x(part);
5178
+ double const spin_y_0 = LocalParticle_get_spin_y(part);
5179
+ if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5180
+ double const spin_x_1 = _cos_rot_s*spin_x_0 + _sin_rot_s*spin_y_0;
5181
+ double const spin_y_1 = -_sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5182
+ LocalParticle_set_spin_x(part, spin_x_1);
5183
+ LocalParticle_set_spin_y(part, spin_y_1);
5184
+ }
5185
+
5186
+ // } //only_for_context cpu_openmp
5187
+ } //only_for_context cpu_serial cpu_openmp
5188
+ }
5189
+
5190
+ #endif
5191
+
5099
5192
  }
5100
- static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s3(ParticlesMonitorData restrict obj, int64_t i0){
5101
- int64_t offset=0;
5102
- offset+=152;
5103
- offset+=*( int64_t*)(( char*) obj+offset+296);
5104
- offset+=16+i0*4;
5105
- return ( uint32_t*)(( char*) obj+offset);
5193
+ ParticlesMonitor_track_local_particle(el, part0);
5194
+ // Transform back to global frame
5195
+ if (_sin_rot_s > -2.) {
5196
+ double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5197
+ double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5198
+ double const shift_x = ParticlesMonitorData_get__shift_x(el);
5199
+ double const shift_y = ParticlesMonitorData_get__shift_y(el);
5200
+ double const shift_s = ParticlesMonitorData_get__shift_s(el);
5201
+ double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5202
+ double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5203
+ double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5204
+ double const length = 0.;
5205
+ ;
5206
+ double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5207
+ int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5208
+
5209
+ /* Spin tracking is disabled by the synrad compile flag */
5210
+ #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5211
+ // Rotate spin
5212
+
5213
+ {
5214
+ // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5215
+ // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5216
+
5217
+ const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5218
+ const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5219
+
5220
+ //#pragma omp simd // TODO: currently does not work, needs investigating
5221
+ for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5222
+
5223
+ LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5224
+ LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5225
+ part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5226
+
5227
+ // LocalParticle* part = part0; //only_for_context opencl cuda
5228
+
5229
+ // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5230
+
5231
+ double const spin_x_0 = LocalParticle_get_spin_x(part);
5232
+ double const spin_y_0 = LocalParticle_get_spin_y(part);
5233
+ if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5234
+ double const spin_x_1 = _cos_rot_s*spin_x_0 - _sin_rot_s*spin_y_0;
5235
+ double const spin_y_1 = _sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5236
+ LocalParticle_set_spin_x(part, spin_x_1);
5237
+ LocalParticle_set_spin_y(part, spin_y_1);
5238
+ }
5239
+
5240
+ // } //only_for_context cpu_openmp
5241
+ } //only_for_context cpu_serial cpu_openmp
5242
+ }
5243
+
5244
+ #endif
5245
+
5246
+ if (!backtrack) {
5247
+ track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5248
+ track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5249
+ }
5106
5250
  }
5107
- static inline ArrNUint32 ParticlesMonitorData_getp_data__rng_s4(ParticlesMonitorData restrict obj){
5108
- int64_t offset=0;
5109
- offset+=152;
5110
- offset+=*( int64_t*)(( char*) obj+offset+304);
5111
- return (ArrNUint32)(( char*) obj+offset);
5112
5251
  }
5113
- static inline int64_t ParticlesMonitorData_len_data__rng_s4(ParticlesMonitorData restrict obj){
5252
+
5253
+
5254
+
5255
+ void ParticlesMonitor_track_particles(
5256
+ ParticlesMonitorData el,
5257
+
5258
+ ParticlesData particles,
5259
+
5260
+ int64_t flag_increment_at_element,
5261
+ int8_t* io_buffer){
5262
+
5263
+ // #define CONTEXT_OPENMP //only_for_context cpu_openmp
5264
+ #ifdef CONTEXT_OPENMP
5265
+ const int64_t capacity = ParticlesData_get__capacity(particles);
5266
+ const int num_threads = omp_get_max_threads();
5267
+
5268
+ #ifndef XT_OMP_SKIP_REORGANIZE
5269
+ const int64_t num_particles_to_track = ParticlesData_get__num_active_particles(particles);
5270
+
5271
+ {
5272
+ LocalParticle lpart;
5273
+ lpart.io_buffer = io_buffer;
5274
+ Particles_to_LocalParticle(particles, &lpart, 0, capacity);
5275
+ check_is_active(&lpart);
5276
+ count_reorganized_particles(&lpart);
5277
+ LocalParticle_to_Particles(&lpart, particles, 0, capacity);
5278
+ }
5279
+ #else // When we skip reorganize, we cannot just batch active particles
5280
+ const int64_t num_particles_to_track = capacity;
5281
+ #endif
5282
+
5283
+ const int64_t chunk_size = (num_particles_to_track + num_threads - 1)/num_threads; // ceil division
5284
+ #endif // CONTEXT_OPENMP
5285
+
5286
+ // #pragma omp parallel for //only_for_context cpu_openmp
5287
+ // for (int64_t batch_id = 0; batch_id < num_threads; batch_id++) { //only_for_context cpu_openmp
5288
+ LocalParticle lpart;
5289
+ lpart.io_buffer = io_buffer;
5290
+ lpart.track_flags = 0;
5291
+ // int64_t part_id = batch_id * chunk_size; //only_for_context cpu_openmp
5292
+ // int64_t end_id = (batch_id + 1) * chunk_size; //only_for_context cpu_openmp
5293
+ // if (end_id > num_particles_to_track) end_id = num_particles_to_track; //only_for_context cpu_openmp
5294
+
5295
+ int64_t part_id = 0; //only_for_context cpu_serial
5296
+ // int64_t part_id = blockDim.x * blockIdx.x + threadIdx.x; //only_for_context cuda
5297
+ // int64_t part_id = get_global_id(0); //only_for_context opencl
5298
+ int64_t end_id = 0; // unused outside of openmp //only_for_context cpu_serial cuda opencl
5299
+
5300
+ int64_t part_capacity = ParticlesData_get__capacity(particles);
5301
+ if (part_id<part_capacity){
5302
+ Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
5303
+ if (check_is_active(&lpart)>0){
5304
+ ParticlesMonitor_track_local_particle_with_transformations(el, &lpart);
5305
+
5306
+ }
5307
+ if (check_is_active(&lpart)>0 && flag_increment_at_element){
5308
+ increment_at_element(&lpart, 1);
5309
+ }
5310
+ }
5311
+ // } //only_for_context cpu_openmp
5312
+
5313
+ // On OpenMP we want to additionally by default reorganize all
5314
+ // the particles.
5315
+ // #ifndef XT_OMP_SKIP_REORGANIZE //only_for_context cpu_openmp
5316
+ // LocalParticle lpart; //only_for_context cpu_openmp
5317
+ // lpart.io_buffer = io_buffer; //only_for_context cpu_openmp
5318
+ // Particles_to_LocalParticle(particles, &lpart, 0, capacity);//only_for_context cpu_openmp
5319
+ // check_is_active(&lpart); //only_for_context cpu_openmp
5320
+ // #endif //only_for_context cpu_openmp
5321
+ }
5322
+
5323
+ #ifndef XOBJ_TYPEDEF_RandomUniformData
5324
+ #define XOBJ_TYPEDEF_RandomUniformData
5325
+ typedef struct RandomUniformData_s * RandomUniformData;
5326
+ static inline RandomUniformData RandomUniformData_getp(RandomUniformData restrict obj){
5114
5327
  int64_t offset=0;
5115
- offset+=152;
5116
- offset+=*( int64_t*)(( char*) obj+offset+304);
5117
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
5118
- return arr[1];
5328
+ return (RandomUniformData)(( char*) obj+offset);
5119
5329
  }
5120
- static inline uint32_t ParticlesMonitorData_get_data__rng_s4(const ParticlesMonitorData restrict obj, int64_t i0){
5330
+ static inline uint8_t RandomUniformData_get__dummy(const RandomUniformData restrict obj){
5121
5331
  int64_t offset=0;
5122
- offset+=152;
5123
- offset+=*( int64_t*)(( char*) obj+offset+304);
5124
- offset+=16+i0*4;
5125
- return *( uint32_t*)(( char*) obj+offset);
5332
+ return *(( uint8_t*) obj+offset);
5126
5333
  }
5127
- static inline void ParticlesMonitorData_set_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0, uint32_t value){
5334
+ static inline void RandomUniformData_set__dummy(RandomUniformData restrict obj, uint8_t value){
5128
5335
  int64_t offset=0;
5129
- offset+=152;
5130
- offset+=*( int64_t*)(( char*) obj+offset+304);
5131
- offset+=16+i0*4;
5132
- *( uint32_t*)(( char*) obj+offset)=value;
5336
+ *(( uint8_t*) obj+offset)=value;
5133
5337
  }
5134
- static inline uint32_t* ParticlesMonitorData_getp1_data__rng_s4(ParticlesMonitorData restrict obj, int64_t i0){
5338
+ static inline uint8_t* RandomUniformData_getp__dummy(RandomUniformData restrict obj){
5135
5339
  int64_t offset=0;
5136
- offset+=152;
5137
- offset+=*( int64_t*)(( char*) obj+offset+304);
5138
- offset+=16+i0*4;
5139
- return ( uint32_t*)(( char*) obj+offset);
5340
+ return ( uint8_t*)(( char*) obj+offset);
5140
5341
  }
5141
- static inline double ParticlesMonitorData_get__sin_rot_s(const ParticlesMonitorData restrict obj){
5342
+ static inline double RandomUniformData_get__sin_rot_s(const RandomUniformData restrict obj){
5142
5343
  int64_t offset=0;
5143
- offset+=80;
5344
+ offset+=8;
5144
5345
  return *( double*)(( char*) obj+offset);
5145
5346
  }
5146
- static inline void ParticlesMonitorData_set__sin_rot_s(ParticlesMonitorData restrict obj, double value){
5347
+ static inline void RandomUniformData_set__sin_rot_s(RandomUniformData restrict obj, double value){
5147
5348
  int64_t offset=0;
5148
- offset+=80;
5349
+ offset+=8;
5149
5350
  *( double*)(( char*) obj+offset)=value;
5150
5351
  }
5151
- static inline double* ParticlesMonitorData_getp__sin_rot_s(ParticlesMonitorData restrict obj){
5352
+ static inline double* RandomUniformData_getp__sin_rot_s(RandomUniformData restrict obj){
5152
5353
  int64_t offset=0;
5153
- offset+=80;
5354
+ offset+=8;
5154
5355
  return ( double*)(( char*) obj+offset);
5155
5356
  }
5156
- static inline double ParticlesMonitorData_get__cos_rot_s(const ParticlesMonitorData restrict obj){
5357
+ static inline double RandomUniformData_get__cos_rot_s(const RandomUniformData restrict obj){
5157
5358
  int64_t offset=0;
5158
- offset+=88;
5359
+ offset+=16;
5159
5360
  return *( double*)(( char*) obj+offset);
5160
5361
  }
5161
- static inline void ParticlesMonitorData_set__cos_rot_s(ParticlesMonitorData restrict obj, double value){
5362
+ static inline void RandomUniformData_set__cos_rot_s(RandomUniformData restrict obj, double value){
5162
5363
  int64_t offset=0;
5163
- offset+=88;
5364
+ offset+=16;
5164
5365
  *( double*)(( char*) obj+offset)=value;
5165
5366
  }
5166
- static inline double* ParticlesMonitorData_getp__cos_rot_s(ParticlesMonitorData restrict obj){
5367
+ static inline double* RandomUniformData_getp__cos_rot_s(RandomUniformData restrict obj){
5167
5368
  int64_t offset=0;
5168
- offset+=88;
5369
+ offset+=16;
5169
5370
  return ( double*)(( char*) obj+offset);
5170
5371
  }
5171
- static inline double ParticlesMonitorData_get__shift_x(const ParticlesMonitorData restrict obj){
5372
+ static inline double RandomUniformData_get__shift_x(const RandomUniformData restrict obj){
5172
5373
  int64_t offset=0;
5173
- offset+=96;
5374
+ offset+=24;
5174
5375
  return *( double*)(( char*) obj+offset);
5175
5376
  }
5176
- static inline void ParticlesMonitorData_set__shift_x(ParticlesMonitorData restrict obj, double value){
5377
+ static inline void RandomUniformData_set__shift_x(RandomUniformData restrict obj, double value){
5177
5378
  int64_t offset=0;
5178
- offset+=96;
5379
+ offset+=24;
5179
5380
  *( double*)(( char*) obj+offset)=value;
5180
5381
  }
5181
- static inline double* ParticlesMonitorData_getp__shift_x(ParticlesMonitorData restrict obj){
5382
+ static inline double* RandomUniformData_getp__shift_x(RandomUniformData restrict obj){
5182
5383
  int64_t offset=0;
5183
- offset+=96;
5384
+ offset+=24;
5184
5385
  return ( double*)(( char*) obj+offset);
5185
5386
  }
5186
- static inline double ParticlesMonitorData_get__shift_y(const ParticlesMonitorData restrict obj){
5387
+ static inline double RandomUniformData_get__shift_y(const RandomUniformData restrict obj){
5187
5388
  int64_t offset=0;
5188
- offset+=104;
5389
+ offset+=32;
5189
5390
  return *( double*)(( char*) obj+offset);
5190
5391
  }
5191
- static inline void ParticlesMonitorData_set__shift_y(ParticlesMonitorData restrict obj, double value){
5392
+ static inline void RandomUniformData_set__shift_y(RandomUniformData restrict obj, double value){
5192
5393
  int64_t offset=0;
5193
- offset+=104;
5394
+ offset+=32;
5194
5395
  *( double*)(( char*) obj+offset)=value;
5195
5396
  }
5196
- static inline double* ParticlesMonitorData_getp__shift_y(ParticlesMonitorData restrict obj){
5397
+ static inline double* RandomUniformData_getp__shift_y(RandomUniformData restrict obj){
5197
5398
  int64_t offset=0;
5198
- offset+=104;
5399
+ offset+=32;
5199
5400
  return ( double*)(( char*) obj+offset);
5200
5401
  }
5201
- static inline double ParticlesMonitorData_get__shift_s(const ParticlesMonitorData restrict obj){
5402
+ static inline double RandomUniformData_get__shift_s(const RandomUniformData restrict obj){
5202
5403
  int64_t offset=0;
5203
- offset+=112;
5404
+ offset+=40;
5204
5405
  return *( double*)(( char*) obj+offset);
5205
5406
  }
5206
- static inline void ParticlesMonitorData_set__shift_s(ParticlesMonitorData restrict obj, double value){
5407
+ static inline void RandomUniformData_set__shift_s(RandomUniformData restrict obj, double value){
5207
5408
  int64_t offset=0;
5208
- offset+=112;
5409
+ offset+=40;
5209
5410
  *( double*)(( char*) obj+offset)=value;
5210
5411
  }
5211
- static inline double* ParticlesMonitorData_getp__shift_s(ParticlesMonitorData restrict obj){
5412
+ static inline double* RandomUniformData_getp__shift_s(RandomUniformData restrict obj){
5212
5413
  int64_t offset=0;
5213
- offset+=112;
5414
+ offset+=40;
5214
5415
  return ( double*)(( char*) obj+offset);
5215
5416
  }
5216
- static inline double ParticlesMonitorData_get__rot_x_rad(const ParticlesMonitorData restrict obj){
5417
+ static inline double RandomUniformData_get__rot_x_rad(const RandomUniformData restrict obj){
5217
5418
  int64_t offset=0;
5218
- offset+=120;
5419
+ offset+=48;
5219
5420
  return *( double*)(( char*) obj+offset);
5220
5421
  }
5221
- static inline void ParticlesMonitorData_set__rot_x_rad(ParticlesMonitorData restrict obj, double value){
5422
+ static inline void RandomUniformData_set__rot_x_rad(RandomUniformData restrict obj, double value){
5222
5423
  int64_t offset=0;
5223
- offset+=120;
5424
+ offset+=48;
5224
5425
  *( double*)(( char*) obj+offset)=value;
5225
5426
  }
5226
- static inline double* ParticlesMonitorData_getp__rot_x_rad(ParticlesMonitorData restrict obj){
5427
+ static inline double* RandomUniformData_getp__rot_x_rad(RandomUniformData restrict obj){
5227
5428
  int64_t offset=0;
5228
- offset+=120;
5429
+ offset+=48;
5229
5430
  return ( double*)(( char*) obj+offset);
5230
5431
  }
5231
- static inline double ParticlesMonitorData_get__rot_y_rad(const ParticlesMonitorData restrict obj){
5432
+ static inline double RandomUniformData_get__rot_y_rad(const RandomUniformData restrict obj){
5232
5433
  int64_t offset=0;
5233
- offset+=128;
5434
+ offset+=56;
5234
5435
  return *( double*)(( char*) obj+offset);
5235
5436
  }
5236
- static inline void ParticlesMonitorData_set__rot_y_rad(ParticlesMonitorData restrict obj, double value){
5437
+ static inline void RandomUniformData_set__rot_y_rad(RandomUniformData restrict obj, double value){
5237
5438
  int64_t offset=0;
5238
- offset+=128;
5439
+ offset+=56;
5239
5440
  *( double*)(( char*) obj+offset)=value;
5240
5441
  }
5241
- static inline double* ParticlesMonitorData_getp__rot_y_rad(ParticlesMonitorData restrict obj){
5442
+ static inline double* RandomUniformData_getp__rot_y_rad(RandomUniformData restrict obj){
5242
5443
  int64_t offset=0;
5243
- offset+=128;
5444
+ offset+=56;
5244
5445
  return ( double*)(( char*) obj+offset);
5245
5446
  }
5246
- static inline double ParticlesMonitorData_get__rot_s_rad_no_frame(const ParticlesMonitorData restrict obj){
5447
+ static inline double RandomUniformData_get__rot_s_rad_no_frame(const RandomUniformData restrict obj){
5247
5448
  int64_t offset=0;
5248
- offset+=136;
5449
+ offset+=64;
5249
5450
  return *( double*)(( char*) obj+offset);
5250
5451
  }
5251
- static inline void ParticlesMonitorData_set__rot_s_rad_no_frame(ParticlesMonitorData restrict obj, double value){
5452
+ static inline void RandomUniformData_set__rot_s_rad_no_frame(RandomUniformData restrict obj, double value){
5252
5453
  int64_t offset=0;
5253
- offset+=136;
5454
+ offset+=64;
5254
5455
  *( double*)(( char*) obj+offset)=value;
5255
5456
  }
5256
- static inline double* ParticlesMonitorData_getp__rot_s_rad_no_frame(ParticlesMonitorData restrict obj){
5457
+ static inline double* RandomUniformData_getp__rot_s_rad_no_frame(RandomUniformData restrict obj){
5257
5458
  int64_t offset=0;
5258
- offset+=136;
5459
+ offset+=64;
5259
5460
  return ( double*)(( char*) obj+offset);
5260
5461
  }
5261
- static inline double ParticlesMonitorData_get_rot_shift_anchor(const ParticlesMonitorData restrict obj){
5462
+ static inline double RandomUniformData_get_rot_shift_anchor(const RandomUniformData restrict obj){
5262
5463
  int64_t offset=0;
5263
- offset+=144;
5464
+ offset+=72;
5264
5465
  return *( double*)(( char*) obj+offset);
5265
5466
  }
5266
- static inline void ParticlesMonitorData_set_rot_shift_anchor(ParticlesMonitorData restrict obj, double value){
5467
+ static inline void RandomUniformData_set_rot_shift_anchor(RandomUniformData restrict obj, double value){
5267
5468
  int64_t offset=0;
5268
- offset+=144;
5469
+ offset+=72;
5269
5470
  *( double*)(( char*) obj+offset)=value;
5270
5471
  }
5271
- static inline double* ParticlesMonitorData_getp_rot_shift_anchor(ParticlesMonitorData restrict obj){
5472
+ static inline double* RandomUniformData_getp_rot_shift_anchor(RandomUniformData restrict obj){
5272
5473
  int64_t offset=0;
5273
- offset+=144;
5474
+ offset+=72;
5274
5475
  return ( double*)(( char*) obj+offset);
5275
5476
  }
5276
5477
  #endif
@@ -5432,266 +5633,65 @@ void Drift_single_particle_expanded(LocalParticle* part, double length){
5432
5633
  double const rv0v = 1./LocalParticle_get_rvv(part);
5433
5634
  double const xp = LocalParticle_get_px(part) * rpp;
5434
5635
  double const yp = LocalParticle_get_py(part) * rpp;
5435
- double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
5436
-
5437
- LocalParticle_add_to_x(part, xp * length );
5438
- LocalParticle_add_to_y(part, yp * length );
5439
- LocalParticle_add_to_s(part, length);
5440
- LocalParticle_add_to_zeta(part, length * dzeta );
5441
- }
5442
-
5443
-
5444
- GPUFUN
5445
- void Drift_single_particle_exact(LocalParticle* part, double length){
5446
- double const px = LocalParticle_get_px(part);
5447
- double const py = LocalParticle_get_py(part);
5448
- double const rv0v = 1./LocalParticle_get_rvv(part);
5449
- double const one_plus_delta = 1. + LocalParticle_get_delta(part);
5450
-
5451
- double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
5452
- - px * px - py * py);
5453
- double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
5454
-
5455
- LocalParticle_add_to_x(part, px * one_over_pz * length);
5456
- LocalParticle_add_to_y(part, py * one_over_pz * length);
5457
- LocalParticle_add_to_zeta(part, dzeta * length);
5458
- LocalParticle_add_to_s(part, length);
5459
- }
5460
-
5461
-
5462
- GPUFUN
5463
- void Drift_single_particle(LocalParticle* part, double length){
5464
- #ifndef XTRACK_USE_EXACT_DRIFTS
5465
- Drift_single_particle_expanded(part, length);
5466
- #else
5467
- Drift_single_particle_exact(part, length);
5468
- #endif
5469
- }
5470
-
5471
-
5472
- #endif /* XTRACK_TRACK_DRIFT_H */
5473
-
5474
-
5475
- #ifndef XSTUITE_TRACK_FLAGS_H
5476
- #define XSTUITE_TRACK_FLAGS_H
5477
- #define XS_FLAG_BACKTRACK (0)
5478
- #define XS_FLAG_KILL_CAVITY_KICK (2)
5479
- #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
5480
- #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
5481
- #define XS_FLAG_SR_TAPER (5)
5482
- #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
5483
-
5484
- #endif // XSTUITE_TRACK_FLAGS_H
5485
-
5486
- // copyright ############################### //
5487
- // This file is part of the Xtrack Package. //
5488
- // Copyright (c) CERN, 2021. //
5489
- // ######################################### //
5490
-
5491
- #ifndef XTRACK_MONITORS_H
5492
- #define XTRACK_MONITORS_H
5493
-
5494
- #include <headers/track.h>
5495
-
5496
-
5497
- GPUFUN
5498
- void ParticlesMonitor_track_local_particle(ParticlesMonitorData el,
5499
- LocalParticle* part0){
5500
-
5501
- int64_t const start_at_turn = ParticlesMonitorData_get_start_at_turn(el);
5502
- int64_t const stop_at_turn = ParticlesMonitorData_get_stop_at_turn(el);
5503
- int64_t const part_id_start = ParticlesMonitorData_get_part_id_start(el);
5504
- int64_t const part_id_end= ParticlesMonitorData_get_part_id_end(el);
5505
- int64_t const ebe_mode = ParticlesMonitorData_get_ebe_mode(el);
5506
- int64_t const n_repetitions = ParticlesMonitorData_get_n_repetitions(el);
5507
- int64_t const repetition_period = ParticlesMonitorData_get_repetition_period(el);
5508
- ParticlesData data = ParticlesMonitorData_getp_data(el);
5509
-
5510
- int64_t n_turns_record = stop_at_turn - start_at_turn;
5511
-
5512
- START_PER_PARTICLE_BLOCK(part0, part);
5513
- int64_t at_turn;
5514
- if (ebe_mode){
5515
- at_turn = LocalParticle_get_at_element(part);
5516
- }
5517
- else{
5518
- if (LocalParticle_check_track_flag(part, XS_FLAG_BACKTRACK)) {
5519
- return; // do not log (only ebe monitor supported for now in backtrack)
5520
- }
5521
- at_turn = LocalParticle_get_at_turn(part);
5522
- }
5523
- if (n_repetitions == 1){
5524
- if (at_turn>=start_at_turn && at_turn<stop_at_turn){
5525
- int64_t const particle_id = LocalParticle_get_particle_id(part);
5526
- if (particle_id<part_id_end && particle_id>=part_id_start){
5527
- int64_t const store_at =
5528
- n_turns_record * (particle_id - part_id_start)
5529
- + at_turn - start_at_turn;
5530
- LocalParticle_to_Particles(part, data, store_at, 0);
5531
- }
5532
- }
5533
- }
5534
- else if (n_repetitions > 1){
5535
- if (at_turn < start_at_turn){
5536
- // return; //only_for_context cuda opencl
5537
- break; //only_for_context cpu_serial cpu_openmp
5538
- }
5539
- int64_t const i_frame = (at_turn - start_at_turn) / repetition_period;
5540
- if (i_frame < n_repetitions
5541
- && at_turn >= start_at_turn + i_frame*repetition_period
5542
- && at_turn < stop_at_turn + i_frame*repetition_period
5543
- ){
5544
- int64_t const particle_id = LocalParticle_get_particle_id(part);
5545
- if (particle_id<part_id_end && particle_id>=part_id_start){
5546
- int64_t const store_at =
5547
- n_turns_record * (part_id_end - part_id_start) * i_frame
5548
- + n_turns_record * (particle_id - part_id_start)
5549
- + (at_turn - i_frame * repetition_period) - start_at_turn;
5550
- LocalParticle_to_Particles(part, data, store_at, 0);
5551
- }
5552
- }
5553
- }
5554
-
5555
- #ifdef XSUITE_RESTORE_LOSS
5556
- LocalParticle_set_state(part, 1);
5557
- #endif
5558
- END_PER_PARTICLE_BLOCK;
5559
- }
5560
-
5561
- #endif
5562
-
5563
-
5564
-
5565
- #include <headers/track.h>
5566
- #include <headers/particle_states.h>
5567
- #include <beam_elements/elements_src/track_misalignments.h>
5568
- GPUFUN void ParticlesMonitor_track_local_particle_with_transformations(ParticlesMonitorData el, LocalParticle* part0){
5569
- // Transform to local frame
5570
- double const _sin_rot_s = ParticlesMonitorData_get__sin_rot_s(el);
5571
- if (_sin_rot_s > -2.) {
5572
- double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5573
- double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5574
- double const shift_x = ParticlesMonitorData_get__shift_x(el);
5575
- double const shift_y = ParticlesMonitorData_get__shift_y(el);
5576
- double const shift_s = ParticlesMonitorData_get__shift_s(el);
5577
- double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5578
- double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5579
- double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5580
- double const length = 0.;
5581
- ;
5582
- double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5583
- int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5584
-
5585
- if (!backtrack) {
5586
- track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5587
- track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5588
- }
5589
-
5590
- /* Spin tracking is disabled by the synrad compile flag */
5591
- #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5592
- // Rotate spin
5593
-
5594
- {
5595
- // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5596
- // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5597
-
5598
- const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5599
- const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5600
-
5601
- //#pragma omp simd // TODO: currently does not work, needs investigating
5602
- for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5603
-
5604
- LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5605
- LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5606
- part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5607
-
5608
- // LocalParticle* part = part0; //only_for_context opencl cuda
5609
-
5610
- // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5611
-
5612
- double const spin_x_0 = LocalParticle_get_spin_x(part);
5613
- double const spin_y_0 = LocalParticle_get_spin_y(part);
5614
- if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5615
- double const spin_x_1 = _cos_rot_s*spin_x_0 + _sin_rot_s*spin_y_0;
5616
- double const spin_y_1 = -_sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5617
- LocalParticle_set_spin_x(part, spin_x_1);
5618
- LocalParticle_set_spin_y(part, spin_y_1);
5619
- }
5620
-
5621
- // } //only_for_context cpu_openmp
5622
- } //only_for_context cpu_serial cpu_openmp
5623
- }
5624
-
5625
- #endif
5636
+ double const dzeta = 1 - rv0v * ( 1. + ( xp*xp + yp*yp ) / 2. );
5626
5637
 
5638
+ LocalParticle_add_to_x(part, xp * length );
5639
+ LocalParticle_add_to_y(part, yp * length );
5640
+ LocalParticle_add_to_s(part, length);
5641
+ LocalParticle_add_to_zeta(part, length * dzeta );
5627
5642
  }
5628
- ParticlesMonitor_track_local_particle(el, part0);
5629
- // Transform back to global frame
5630
- if (_sin_rot_s > -2.) {
5631
- double const _cos_rot_s = ParticlesMonitorData_get__cos_rot_s(el);
5632
- double const rot_s_rad = atan2(_sin_rot_s, _cos_rot_s);
5633
- double const shift_x = ParticlesMonitorData_get__shift_x(el);
5634
- double const shift_y = ParticlesMonitorData_get__shift_y(el);
5635
- double const shift_s = ParticlesMonitorData_get__shift_s(el);
5636
- double const rot_x_rad = ParticlesMonitorData_get__rot_x_rad(el);
5637
- double const rot_y_rad = ParticlesMonitorData_get__rot_y_rad(el);
5638
- double const rot_s_rad_no_frame = ParticlesMonitorData_get__rot_s_rad_no_frame(el);
5639
- double const length = 0.;
5640
- ;
5641
- double const anchor = ParticlesMonitorData_get_rot_shift_anchor(el);
5642
- int8_t const backtrack = LocalParticle_check_track_flag(part0, XS_FLAG_BACKTRACK);
5643
5643
 
5644
- /* Spin tracking is disabled by the synrad compile flag */
5645
- #ifndef XTRACK_MULTIPOLE_NO_SYNRAD
5646
- // Rotate spin
5647
5644
 
5648
- {
5649
- // const int64_t XT_part_block_start_idx = part0->ipart; //only_for_context cpu_openmp
5650
- // const int64_t XT_part_block_end_idx = part0->endpart; //only_for_context cpu_openmp
5645
+ GPUFUN
5646
+ void Drift_single_particle_exact(LocalParticle* part, double length){
5647
+ double const px = LocalParticle_get_px(part);
5648
+ double const py = LocalParticle_get_py(part);
5649
+ double const rv0v = 1./LocalParticle_get_rvv(part);
5650
+ double const one_plus_delta = 1. + LocalParticle_get_delta(part);
5651
5651
 
5652
- const int64_t XT_part_block_start_idx = 0; //only_for_context cpu_serial
5653
- const int64_t XT_part_block_end_idx = LocalParticle_get__num_active_particles(part0); //only_for_context cpu_serial
5652
+ double const one_over_pz = 1./sqrt(one_plus_delta*one_plus_delta
5653
+ - px * px - py * py);
5654
+ double const dzeta = 1 - rv0v * one_plus_delta * one_over_pz;
5654
5655
 
5655
- //#pragma omp simd // TODO: currently does not work, needs investigating
5656
- for (int64_t XT_part_block_ii = XT_part_block_start_idx; XT_part_block_ii<XT_part_block_end_idx; XT_part_block_ii++) { //only_for_context cpu_openmp cpu_serial
5656
+ LocalParticle_add_to_x(part, px * one_over_pz * length);
5657
+ LocalParticle_add_to_y(part, py * one_over_pz * length);
5658
+ LocalParticle_add_to_zeta(part, dzeta * length);
5659
+ LocalParticle_add_to_s(part, length);
5660
+ }
5657
5661
 
5658
- LocalParticle lpart = *part0; //only_for_context cpu_serial cpu_openmp
5659
- LocalParticle* part = &lpart; //only_for_context cpu_serial cpu_openmp
5660
- part->ipart = XT_part_block_ii; //only_for_context cpu_serial cpu_openmp
5661
5662
 
5662
- // LocalParticle* part = part0; //only_for_context opencl cuda
5663
+ GPUFUN
5664
+ void Drift_single_particle(LocalParticle* part, double length){
5665
+ #ifndef XTRACK_USE_EXACT_DRIFTS
5666
+ Drift_single_particle_expanded(part, length);
5667
+ #else
5668
+ Drift_single_particle_exact(part, length);
5669
+ #endif
5670
+ }
5663
5671
 
5664
- // if (LocalParticle_get_state(part) > 0) { //only_for_context cpu_openmp
5665
5672
 
5666
- double const spin_x_0 = LocalParticle_get_spin_x(part);
5667
- double const spin_y_0 = LocalParticle_get_spin_y(part);
5668
- if ((spin_x_0 != 0) || (spin_y_0 != 0)){
5669
- double const spin_x_1 = _cos_rot_s*spin_x_0 - _sin_rot_s*spin_y_0;
5670
- double const spin_y_1 = _sin_rot_s*spin_x_0 + _cos_rot_s*spin_y_0;
5671
- LocalParticle_set_spin_x(part, spin_x_1);
5672
- LocalParticle_set_spin_y(part, spin_y_1);
5673
- }
5673
+ #endif /* XTRACK_TRACK_DRIFT_H */
5674
5674
 
5675
- // } //only_for_context cpu_openmp
5676
- } //only_for_context cpu_serial cpu_openmp
5677
- }
5678
5675
 
5679
- #endif
5676
+ #ifndef XSTUITE_TRACK_FLAGS_H
5677
+ #define XSTUITE_TRACK_FLAGS_H
5678
+ #define XS_FLAG_BACKTRACK (0)
5679
+ #define XS_FLAG_KILL_CAVITY_KICK (2)
5680
+ #define XS_FLAG_IGNORE_GLOBAL_APERTURE (3)
5681
+ #define XS_FLAG_IGNORE_LOCAL_APERTURE (4)
5682
+ #define XS_FLAG_SR_TAPER (5)
5683
+ #define XS_FLAG_SR_KICK_SAME_AS_FIRST (6)
5680
5684
 
5681
- if (!backtrack) {
5682
- track_misalignment_exit_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack); } else {
5683
- track_misalignment_entry_straight(part0, shift_x, shift_y, shift_s, rot_y_rad, rot_x_rad, rot_s_rad_no_frame, anchor, length, rot_s_rad, backtrack);
5684
- }
5685
- }
5686
- }
5685
+ #endif // XSTUITE_TRACK_FLAGS_H
5687
5686
 
5687
+ #include <random/random_src/uniform.h>
5688
5688
 
5689
5689
 
5690
- void ParticlesMonitor_track_particles(
5691
- ParticlesMonitorData el,
5690
+ void sample_uniform(
5691
+ RandomUniformData el,
5692
5692
 
5693
5693
  ParticlesData particles,
5694
-
5694
+ double* samples, int64_t n_samples_per_seed,
5695
5695
  int64_t flag_increment_at_element,
5696
5696
  int8_t* io_buffer){
5697
5697
 
@@ -5736,7 +5736,7 @@ if (_sin_rot_s > -2.) {
5736
5736
  if (part_id<part_capacity){
5737
5737
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
5738
5738
  if (check_is_active(&lpart)>0){
5739
- ParticlesMonitor_track_local_particle_with_transformations(el, &lpart);
5739
+ RandomUniform_sample(el, &lpart, samples, n_samples_per_seed);
5740
5740
 
5741
5741
  }
5742
5742
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -5755,218 +5755,177 @@ if (_sin_rot_s > -2.) {
5755
5755
  // #endif //only_for_context cpu_openmp
5756
5756
  }
5757
5757
 
5758
- #ifndef XOBJ_TYPEDEF_RandomRutherfordData
5759
- #define XOBJ_TYPEDEF_RandomRutherfordData
5760
- typedef struct RandomRutherfordData_s * RandomRutherfordData;
5761
- static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
5758
+ #ifndef XOBJ_TYPEDEF_ElementRefClass
5759
+ #define XOBJ_TYPEDEF_ElementRefClass
5760
+ typedef struct ElementRefClass_s * ElementRefClass;
5761
+ enum ElementRefClass_e{ElementRefClass_ParticlesMonitorData_t};
5762
+ static inline ElementRefClass ElementRefClass_getp(ElementRefClass restrict obj){
5762
5763
  int64_t offset=0;
5763
- return (RandomRutherfordData)(( char*) obj+offset);
5764
+ return (ElementRefClass)(( char*) obj+offset);
5764
5765
  }
5765
- static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
5766
+ static inline int64_t ElementRefClass_typeid(const ElementRefClass restrict obj){
5766
5767
  int64_t offset=0;
5767
- return *( double*)(( char*) obj+offset);
5768
+ offset+=8;
5769
+ return *( int64_t*)(( char*) obj+offset);
5768
5770
  }
5769
- static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
5771
+ static inline void* ElementRefClass_member(const ElementRefClass restrict obj){
5770
5772
  int64_t offset=0;
5771
- *( double*)(( char*) obj+offset)=value;
5773
+ offset+=*( int64_t*)(( char*) obj+offset);
5774
+ return ( void*)(( char*) obj+offset);
5772
5775
  }
5773
- static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
5776
+ #endif
5777
+ #ifndef XOBJ_TYPEDEF_RandomNormalData
5778
+ #define XOBJ_TYPEDEF_RandomNormalData
5779
+ typedef struct RandomNormalData_s * RandomNormalData;
5780
+ static inline RandomNormalData RandomNormalData_getp(RandomNormalData restrict obj){
5774
5781
  int64_t offset=0;
5775
- return ( double*)(( char*) obj+offset);
5782
+ return (RandomNormalData)(( char*) obj+offset);
5776
5783
  }
5777
- static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData restrict obj){
5784
+ static inline uint8_t RandomNormalData_get__dummy(const RandomNormalData restrict obj){
5785
+ int64_t offset=0;
5786
+ return *(( uint8_t*) obj+offset);
5787
+ }
5788
+ static inline void RandomNormalData_set__dummy(RandomNormalData restrict obj, uint8_t value){
5789
+ int64_t offset=0;
5790
+ *(( uint8_t*) obj+offset)=value;
5791
+ }
5792
+ static inline uint8_t* RandomNormalData_getp__dummy(RandomNormalData restrict obj){
5793
+ int64_t offset=0;
5794
+ return ( uint8_t*)(( char*) obj+offset);
5795
+ }
5796
+ static inline double RandomNormalData_get__sin_rot_s(const RandomNormalData restrict obj){
5778
5797
  int64_t offset=0;
5779
5798
  offset+=8;
5780
5799
  return *( double*)(( char*) obj+offset);
5781
5800
  }
5782
- static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData restrict obj, double value){
5801
+ static inline void RandomNormalData_set__sin_rot_s(RandomNormalData restrict obj, double value){
5783
5802
  int64_t offset=0;
5784
5803
  offset+=8;
5785
5804
  *( double*)(( char*) obj+offset)=value;
5786
5805
  }
5787
- static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData restrict obj){
5806
+ static inline double* RandomNormalData_getp__sin_rot_s(RandomNormalData restrict obj){
5788
5807
  int64_t offset=0;
5789
5808
  offset+=8;
5790
5809
  return ( double*)(( char*) obj+offset);
5791
5810
  }
5792
- static inline double RandomRutherfordData_get_A(const RandomRutherfordData restrict obj){
5811
+ static inline double RandomNormalData_get__cos_rot_s(const RandomNormalData restrict obj){
5793
5812
  int64_t offset=0;
5794
5813
  offset+=16;
5795
5814
  return *( double*)(( char*) obj+offset);
5796
5815
  }
5797
- static inline void RandomRutherfordData_set_A(RandomRutherfordData restrict obj, double value){
5816
+ static inline void RandomNormalData_set__cos_rot_s(RandomNormalData restrict obj, double value){
5798
5817
  int64_t offset=0;
5799
5818
  offset+=16;
5800
5819
  *( double*)(( char*) obj+offset)=value;
5801
5820
  }
5802
- static inline double* RandomRutherfordData_getp_A(RandomRutherfordData restrict obj){
5821
+ static inline double* RandomNormalData_getp__cos_rot_s(RandomNormalData restrict obj){
5803
5822
  int64_t offset=0;
5804
5823
  offset+=16;
5805
5824
  return ( double*)(( char*) obj+offset);
5806
5825
  }
5807
- static inline double RandomRutherfordData_get_B(const RandomRutherfordData restrict obj){
5826
+ static inline double RandomNormalData_get__shift_x(const RandomNormalData restrict obj){
5808
5827
  int64_t offset=0;
5809
5828
  offset+=24;
5810
5829
  return *( double*)(( char*) obj+offset);
5811
5830
  }
5812
- static inline void RandomRutherfordData_set_B(RandomRutherfordData restrict obj, double value){
5831
+ static inline void RandomNormalData_set__shift_x(RandomNormalData restrict obj, double value){
5813
5832
  int64_t offset=0;
5814
5833
  offset+=24;
5815
5834
  *( double*)(( char*) obj+offset)=value;
5816
5835
  }
5817
- static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
5836
+ static inline double* RandomNormalData_getp__shift_x(RandomNormalData restrict obj){
5818
5837
  int64_t offset=0;
5819
5838
  offset+=24;
5820
5839
  return ( double*)(( char*) obj+offset);
5821
5840
  }
5822
- static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
5841
+ static inline double RandomNormalData_get__shift_y(const RandomNormalData restrict obj){
5823
5842
  int64_t offset=0;
5824
5843
  offset+=32;
5825
- return *(( int8_t*) obj+offset);
5844
+ return *( double*)(( char*) obj+offset);
5826
5845
  }
5827
- static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
5846
+ static inline void RandomNormalData_set__shift_y(RandomNormalData restrict obj, double value){
5828
5847
  int64_t offset=0;
5829
5848
  offset+=32;
5830
- *(( int8_t*) obj+offset)=value;
5849
+ *( double*)(( char*) obj+offset)=value;
5831
5850
  }
5832
- static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
5851
+ static inline double* RandomNormalData_getp__shift_y(RandomNormalData restrict obj){
5833
5852
  int64_t offset=0;
5834
5853
  offset+=32;
5835
- return ( int8_t*)(( char*) obj+offset);
5854
+ return ( double*)(( char*) obj+offset);
5836
5855
  }
5837
- static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData restrict obj){
5856
+ static inline double RandomNormalData_get__shift_s(const RandomNormalData restrict obj){
5838
5857
  int64_t offset=0;
5839
5858
  offset+=40;
5840
5859
  return *( double*)(( char*) obj+offset);
5841
5860
  }
5842
- static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData restrict obj, double value){
5861
+ static inline void RandomNormalData_set__shift_s(RandomNormalData restrict obj, double value){
5843
5862
  int64_t offset=0;
5844
5863
  offset+=40;
5845
5864
  *( double*)(( char*) obj+offset)=value;
5846
5865
  }
5847
- static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData restrict obj){
5866
+ static inline double* RandomNormalData_getp__shift_s(RandomNormalData restrict obj){
5848
5867
  int64_t offset=0;
5849
5868
  offset+=40;
5850
5869
  return ( double*)(( char*) obj+offset);
5851
5870
  }
5852
- static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData restrict obj){
5871
+ static inline double RandomNormalData_get__rot_x_rad(const RandomNormalData restrict obj){
5853
5872
  int64_t offset=0;
5854
5873
  offset+=48;
5855
5874
  return *( double*)(( char*) obj+offset);
5856
5875
  }
5857
- static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData restrict obj, double value){
5876
+ static inline void RandomNormalData_set__rot_x_rad(RandomNormalData restrict obj, double value){
5858
5877
  int64_t offset=0;
5859
5878
  offset+=48;
5860
5879
  *( double*)(( char*) obj+offset)=value;
5861
5880
  }
5862
- static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData restrict obj){
5881
+ static inline double* RandomNormalData_getp__rot_x_rad(RandomNormalData restrict obj){
5863
5882
  int64_t offset=0;
5864
5883
  offset+=48;
5865
5884
  return ( double*)(( char*) obj+offset);
5866
5885
  }
5867
- static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData restrict obj){
5886
+ static inline double RandomNormalData_get__rot_y_rad(const RandomNormalData restrict obj){
5868
5887
  int64_t offset=0;
5869
5888
  offset+=56;
5870
5889
  return *( double*)(( char*) obj+offset);
5871
5890
  }
5872
- static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData restrict obj, double value){
5891
+ static inline void RandomNormalData_set__rot_y_rad(RandomNormalData restrict obj, double value){
5873
5892
  int64_t offset=0;
5874
5893
  offset+=56;
5875
5894
  *( double*)(( char*) obj+offset)=value;
5876
5895
  }
5877
- static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData restrict obj){
5896
+ static inline double* RandomNormalData_getp__rot_y_rad(RandomNormalData restrict obj){
5878
5897
  int64_t offset=0;
5879
5898
  offset+=56;
5880
5899
  return ( double*)(( char*) obj+offset);
5881
5900
  }
5882
- static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData restrict obj){
5901
+ static inline double RandomNormalData_get__rot_s_rad_no_frame(const RandomNormalData restrict obj){
5883
5902
  int64_t offset=0;
5884
5903
  offset+=64;
5885
5904
  return *( double*)(( char*) obj+offset);
5886
5905
  }
5887
- static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData restrict obj, double value){
5906
+ static inline void RandomNormalData_set__rot_s_rad_no_frame(RandomNormalData restrict obj, double value){
5888
5907
  int64_t offset=0;
5889
5908
  offset+=64;
5890
5909
  *( double*)(( char*) obj+offset)=value;
5891
5910
  }
5892
- static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData restrict obj){
5911
+ static inline double* RandomNormalData_getp__rot_s_rad_no_frame(RandomNormalData restrict obj){
5893
5912
  int64_t offset=0;
5894
5913
  offset+=64;
5895
5914
  return ( double*)(( char*) obj+offset);
5896
5915
  }
5897
- static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData restrict obj){
5916
+ static inline double RandomNormalData_get_rot_shift_anchor(const RandomNormalData restrict obj){
5898
5917
  int64_t offset=0;
5899
5918
  offset+=72;
5900
5919
  return *( double*)(( char*) obj+offset);
5901
5920
  }
5902
- static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
5903
- int64_t offset=0;
5904
- offset+=72;
5905
- *( double*)(( char*) obj+offset)=value;
5906
- }
5907
- static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
5921
+ static inline void RandomNormalData_set_rot_shift_anchor(RandomNormalData restrict obj, double value){
5908
5922
  int64_t offset=0;
5909
5923
  offset+=72;
5910
- return ( double*)(( char*) obj+offset);
5911
- }
5912
- static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
5913
- int64_t offset=0;
5914
- offset+=80;
5915
- return *( double*)(( char*) obj+offset);
5916
- }
5917
- static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
5918
- int64_t offset=0;
5919
- offset+=80;
5920
- *( double*)(( char*) obj+offset)=value;
5921
- }
5922
- static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
5923
- int64_t offset=0;
5924
- offset+=80;
5925
- return ( double*)(( char*) obj+offset);
5926
- }
5927
- static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
5928
- int64_t offset=0;
5929
- offset+=88;
5930
- return *( double*)(( char*) obj+offset);
5931
- }
5932
- static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
5933
- int64_t offset=0;
5934
- offset+=88;
5935
- *( double*)(( char*) obj+offset)=value;
5936
- }
5937
- static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
5938
- int64_t offset=0;
5939
- offset+=88;
5940
- return ( double*)(( char*) obj+offset);
5941
- }
5942
- static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
5943
- int64_t offset=0;
5944
- offset+=96;
5945
- return *( double*)(( char*) obj+offset);
5946
- }
5947
- static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
5948
- int64_t offset=0;
5949
- offset+=96;
5950
- *( double*)(( char*) obj+offset)=value;
5951
- }
5952
- static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
5953
- int64_t offset=0;
5954
- offset+=96;
5955
- return ( double*)(( char*) obj+offset);
5956
- }
5957
- static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
5958
- int64_t offset=0;
5959
- offset+=104;
5960
- return *( double*)(( char*) obj+offset);
5961
- }
5962
- static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
5963
- int64_t offset=0;
5964
- offset+=104;
5965
5924
  *( double*)(( char*) obj+offset)=value;
5966
5925
  }
5967
- static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
5926
+ static inline double* RandomNormalData_getp_rot_shift_anchor(RandomNormalData restrict obj){
5968
5927
  int64_t offset=0;
5969
- offset+=104;
5928
+ offset+=72;
5970
5929
  return ( double*)(( char*) obj+offset);
5971
5930
  }
5972
5931
  #endif
@@ -6179,11 +6138,11 @@ void Drift_single_particle(LocalParticle* part, double length){
6179
6138
 
6180
6139
  #endif // XSTUITE_TRACK_FLAGS_H
6181
6140
 
6182
- #include <random/random_src/rutherford.h>
6141
+ #include <random/random_src/normal.h>
6183
6142
 
6184
6143
 
6185
- void sample_ruth(
6186
- RandomRutherfordData el,
6144
+ void sample_gauss(
6145
+ RandomNormalData el,
6187
6146
 
6188
6147
  ParticlesData particles,
6189
6148
  double* samples, int64_t n_samples_per_seed,
@@ -6231,7 +6190,7 @@ void Drift_single_particle(LocalParticle* part, double length){
6231
6190
  if (part_id<part_capacity){
6232
6191
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
6233
6192
  if (check_is_active(&lpart)>0){
6234
- RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
6193
+ RandomNormal_sample(el, &lpart, samples, n_samples_per_seed);
6235
6194
 
6236
6195
  }
6237
6196
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -6250,156 +6209,156 @@ void Drift_single_particle(LocalParticle* part, double length){
6250
6209
  // #endif //only_for_context cpu_openmp
6251
6210
  }
6252
6211
 
6253
- #ifndef XOBJ_TYPEDEF_RandomNormalData
6254
- #define XOBJ_TYPEDEF_RandomNormalData
6255
- typedef struct RandomNormalData_s * RandomNormalData;
6256
- static inline RandomNormalData RandomNormalData_getp(RandomNormalData restrict obj){
6212
+ #ifndef XOBJ_TYPEDEF_RandomExponentialData
6213
+ #define XOBJ_TYPEDEF_RandomExponentialData
6214
+ typedef struct RandomExponentialData_s * RandomExponentialData;
6215
+ static inline RandomExponentialData RandomExponentialData_getp(RandomExponentialData restrict obj){
6257
6216
  int64_t offset=0;
6258
- return (RandomNormalData)(( char*) obj+offset);
6217
+ return (RandomExponentialData)(( char*) obj+offset);
6259
6218
  }
6260
- static inline uint8_t RandomNormalData_get__dummy(const RandomNormalData restrict obj){
6219
+ static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
6261
6220
  int64_t offset=0;
6262
6221
  return *(( uint8_t*) obj+offset);
6263
6222
  }
6264
- static inline void RandomNormalData_set__dummy(RandomNormalData restrict obj, uint8_t value){
6223
+ static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
6265
6224
  int64_t offset=0;
6266
6225
  *(( uint8_t*) obj+offset)=value;
6267
6226
  }
6268
- static inline uint8_t* RandomNormalData_getp__dummy(RandomNormalData restrict obj){
6227
+ static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
6269
6228
  int64_t offset=0;
6270
6229
  return ( uint8_t*)(( char*) obj+offset);
6271
6230
  }
6272
- static inline double RandomNormalData_get__sin_rot_s(const RandomNormalData restrict obj){
6231
+ static inline double RandomExponentialData_get__sin_rot_s(const RandomExponentialData restrict obj){
6273
6232
  int64_t offset=0;
6274
6233
  offset+=8;
6275
6234
  return *( double*)(( char*) obj+offset);
6276
6235
  }
6277
- static inline void RandomNormalData_set__sin_rot_s(RandomNormalData restrict obj, double value){
6236
+ static inline void RandomExponentialData_set__sin_rot_s(RandomExponentialData restrict obj, double value){
6278
6237
  int64_t offset=0;
6279
6238
  offset+=8;
6280
6239
  *( double*)(( char*) obj+offset)=value;
6281
6240
  }
6282
- static inline double* RandomNormalData_getp__sin_rot_s(RandomNormalData restrict obj){
6241
+ static inline double* RandomExponentialData_getp__sin_rot_s(RandomExponentialData restrict obj){
6283
6242
  int64_t offset=0;
6284
6243
  offset+=8;
6285
6244
  return ( double*)(( char*) obj+offset);
6286
6245
  }
6287
- static inline double RandomNormalData_get__cos_rot_s(const RandomNormalData restrict obj){
6246
+ static inline double RandomExponentialData_get__cos_rot_s(const RandomExponentialData restrict obj){
6288
6247
  int64_t offset=0;
6289
6248
  offset+=16;
6290
6249
  return *( double*)(( char*) obj+offset);
6291
6250
  }
6292
- static inline void RandomNormalData_set__cos_rot_s(RandomNormalData restrict obj, double value){
6251
+ static inline void RandomExponentialData_set__cos_rot_s(RandomExponentialData restrict obj, double value){
6293
6252
  int64_t offset=0;
6294
6253
  offset+=16;
6295
6254
  *( double*)(( char*) obj+offset)=value;
6296
6255
  }
6297
- static inline double* RandomNormalData_getp__cos_rot_s(RandomNormalData restrict obj){
6256
+ static inline double* RandomExponentialData_getp__cos_rot_s(RandomExponentialData restrict obj){
6298
6257
  int64_t offset=0;
6299
6258
  offset+=16;
6300
6259
  return ( double*)(( char*) obj+offset);
6301
6260
  }
6302
- static inline double RandomNormalData_get__shift_x(const RandomNormalData restrict obj){
6261
+ static inline double RandomExponentialData_get__shift_x(const RandomExponentialData restrict obj){
6303
6262
  int64_t offset=0;
6304
6263
  offset+=24;
6305
6264
  return *( double*)(( char*) obj+offset);
6306
6265
  }
6307
- static inline void RandomNormalData_set__shift_x(RandomNormalData restrict obj, double value){
6266
+ static inline void RandomExponentialData_set__shift_x(RandomExponentialData restrict obj, double value){
6308
6267
  int64_t offset=0;
6309
6268
  offset+=24;
6310
6269
  *( double*)(( char*) obj+offset)=value;
6311
6270
  }
6312
- static inline double* RandomNormalData_getp__shift_x(RandomNormalData restrict obj){
6271
+ static inline double* RandomExponentialData_getp__shift_x(RandomExponentialData restrict obj){
6313
6272
  int64_t offset=0;
6314
6273
  offset+=24;
6315
6274
  return ( double*)(( char*) obj+offset);
6316
6275
  }
6317
- static inline double RandomNormalData_get__shift_y(const RandomNormalData restrict obj){
6276
+ static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
6318
6277
  int64_t offset=0;
6319
6278
  offset+=32;
6320
6279
  return *( double*)(( char*) obj+offset);
6321
6280
  }
6322
- static inline void RandomNormalData_set__shift_y(RandomNormalData restrict obj, double value){
6281
+ static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
6323
6282
  int64_t offset=0;
6324
6283
  offset+=32;
6325
6284
  *( double*)(( char*) obj+offset)=value;
6326
6285
  }
6327
- static inline double* RandomNormalData_getp__shift_y(RandomNormalData restrict obj){
6286
+ static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
6328
6287
  int64_t offset=0;
6329
6288
  offset+=32;
6330
6289
  return ( double*)(( char*) obj+offset);
6331
6290
  }
6332
- static inline double RandomNormalData_get__shift_s(const RandomNormalData restrict obj){
6291
+ static inline double RandomExponentialData_get__shift_s(const RandomExponentialData restrict obj){
6333
6292
  int64_t offset=0;
6334
6293
  offset+=40;
6335
6294
  return *( double*)(( char*) obj+offset);
6336
6295
  }
6337
- static inline void RandomNormalData_set__shift_s(RandomNormalData restrict obj, double value){
6296
+ static inline void RandomExponentialData_set__shift_s(RandomExponentialData restrict obj, double value){
6338
6297
  int64_t offset=0;
6339
6298
  offset+=40;
6340
6299
  *( double*)(( char*) obj+offset)=value;
6341
6300
  }
6342
- static inline double* RandomNormalData_getp__shift_s(RandomNormalData restrict obj){
6301
+ static inline double* RandomExponentialData_getp__shift_s(RandomExponentialData restrict obj){
6343
6302
  int64_t offset=0;
6344
6303
  offset+=40;
6345
6304
  return ( double*)(( char*) obj+offset);
6346
6305
  }
6347
- static inline double RandomNormalData_get__rot_x_rad(const RandomNormalData restrict obj){
6306
+ static inline double RandomExponentialData_get__rot_x_rad(const RandomExponentialData restrict obj){
6348
6307
  int64_t offset=0;
6349
6308
  offset+=48;
6350
6309
  return *( double*)(( char*) obj+offset);
6351
6310
  }
6352
- static inline void RandomNormalData_set__rot_x_rad(RandomNormalData restrict obj, double value){
6311
+ static inline void RandomExponentialData_set__rot_x_rad(RandomExponentialData restrict obj, double value){
6353
6312
  int64_t offset=0;
6354
6313
  offset+=48;
6355
6314
  *( double*)(( char*) obj+offset)=value;
6356
6315
  }
6357
- static inline double* RandomNormalData_getp__rot_x_rad(RandomNormalData restrict obj){
6316
+ static inline double* RandomExponentialData_getp__rot_x_rad(RandomExponentialData restrict obj){
6358
6317
  int64_t offset=0;
6359
6318
  offset+=48;
6360
6319
  return ( double*)(( char*) obj+offset);
6361
6320
  }
6362
- static inline double RandomNormalData_get__rot_y_rad(const RandomNormalData restrict obj){
6321
+ static inline double RandomExponentialData_get__rot_y_rad(const RandomExponentialData restrict obj){
6363
6322
  int64_t offset=0;
6364
6323
  offset+=56;
6365
6324
  return *( double*)(( char*) obj+offset);
6366
6325
  }
6367
- static inline void RandomNormalData_set__rot_y_rad(RandomNormalData restrict obj, double value){
6326
+ static inline void RandomExponentialData_set__rot_y_rad(RandomExponentialData restrict obj, double value){
6368
6327
  int64_t offset=0;
6369
6328
  offset+=56;
6370
6329
  *( double*)(( char*) obj+offset)=value;
6371
6330
  }
6372
- static inline double* RandomNormalData_getp__rot_y_rad(RandomNormalData restrict obj){
6331
+ static inline double* RandomExponentialData_getp__rot_y_rad(RandomExponentialData restrict obj){
6373
6332
  int64_t offset=0;
6374
6333
  offset+=56;
6375
6334
  return ( double*)(( char*) obj+offset);
6376
6335
  }
6377
- static inline double RandomNormalData_get__rot_s_rad_no_frame(const RandomNormalData restrict obj){
6336
+ static inline double RandomExponentialData_get__rot_s_rad_no_frame(const RandomExponentialData restrict obj){
6378
6337
  int64_t offset=0;
6379
6338
  offset+=64;
6380
6339
  return *( double*)(( char*) obj+offset);
6381
6340
  }
6382
- static inline void RandomNormalData_set__rot_s_rad_no_frame(RandomNormalData restrict obj, double value){
6341
+ static inline void RandomExponentialData_set__rot_s_rad_no_frame(RandomExponentialData restrict obj, double value){
6383
6342
  int64_t offset=0;
6384
6343
  offset+=64;
6385
6344
  *( double*)(( char*) obj+offset)=value;
6386
6345
  }
6387
- static inline double* RandomNormalData_getp__rot_s_rad_no_frame(RandomNormalData restrict obj){
6346
+ static inline double* RandomExponentialData_getp__rot_s_rad_no_frame(RandomExponentialData restrict obj){
6388
6347
  int64_t offset=0;
6389
6348
  offset+=64;
6390
6349
  return ( double*)(( char*) obj+offset);
6391
6350
  }
6392
- static inline double RandomNormalData_get_rot_shift_anchor(const RandomNormalData restrict obj){
6351
+ static inline double RandomExponentialData_get_rot_shift_anchor(const RandomExponentialData restrict obj){
6393
6352
  int64_t offset=0;
6394
6353
  offset+=72;
6395
6354
  return *( double*)(( char*) obj+offset);
6396
6355
  }
6397
- static inline void RandomNormalData_set_rot_shift_anchor(RandomNormalData restrict obj, double value){
6356
+ static inline void RandomExponentialData_set_rot_shift_anchor(RandomExponentialData restrict obj, double value){
6398
6357
  int64_t offset=0;
6399
6358
  offset+=72;
6400
6359
  *( double*)(( char*) obj+offset)=value;
6401
6360
  }
6402
- static inline double* RandomNormalData_getp_rot_shift_anchor(RandomNormalData restrict obj){
6361
+ static inline double* RandomExponentialData_getp_rot_shift_anchor(RandomExponentialData restrict obj){
6403
6362
  int64_t offset=0;
6404
6363
  offset+=72;
6405
6364
  return ( double*)(( char*) obj+offset);
@@ -6614,11 +6573,11 @@ void Drift_single_particle(LocalParticle* part, double length){
6614
6573
 
6615
6574
  #endif // XSTUITE_TRACK_FLAGS_H
6616
6575
 
6617
- #include <random/random_src/normal.h>
6576
+ #include <random/random_src/exponential.h>
6618
6577
 
6619
6578
 
6620
- void sample_gauss(
6621
- RandomNormalData el,
6579
+ void sample_exp(
6580
+ RandomExponentialData el,
6622
6581
 
6623
6582
  ParticlesData particles,
6624
6583
  double* samples, int64_t n_samples_per_seed,
@@ -6666,7 +6625,7 @@ void Drift_single_particle(LocalParticle* part, double length){
6666
6625
  if (part_id<part_capacity){
6667
6626
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
6668
6627
  if (check_is_active(&lpart)>0){
6669
- RandomNormal_sample(el, &lpart, samples, n_samples_per_seed);
6628
+ RandomExponential_sample(el, &lpart, samples, n_samples_per_seed);
6670
6629
 
6671
6630
  }
6672
6631
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -6685,159 +6644,219 @@ void Drift_single_particle(LocalParticle* part, double length){
6685
6644
  // #endif //only_for_context cpu_openmp
6686
6645
  }
6687
6646
 
6688
- #ifndef XOBJ_TYPEDEF_RandomExponentialData
6689
- #define XOBJ_TYPEDEF_RandomExponentialData
6690
- typedef struct RandomExponentialData_s * RandomExponentialData;
6691
- static inline RandomExponentialData RandomExponentialData_getp(RandomExponentialData restrict obj){
6647
+ #ifndef XOBJ_TYPEDEF_RandomRutherfordData
6648
+ #define XOBJ_TYPEDEF_RandomRutherfordData
6649
+ typedef struct RandomRutherfordData_s * RandomRutherfordData;
6650
+ static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
6692
6651
  int64_t offset=0;
6693
- return (RandomExponentialData)(( char*) obj+offset);
6652
+ return (RandomRutherfordData)(( char*) obj+offset);
6694
6653
  }
6695
- static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
6654
+ static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
6696
6655
  int64_t offset=0;
6697
- return *(( uint8_t*) obj+offset);
6656
+ return *( double*)(( char*) obj+offset);
6698
6657
  }
6699
- static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
6658
+ static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
6700
6659
  int64_t offset=0;
6701
- *(( uint8_t*) obj+offset)=value;
6660
+ *( double*)(( char*) obj+offset)=value;
6702
6661
  }
6703
- static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
6662
+ static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
6704
6663
  int64_t offset=0;
6705
- return ( uint8_t*)(( char*) obj+offset);
6664
+ return ( double*)(( char*) obj+offset);
6706
6665
  }
6707
- static inline double RandomExponentialData_get__sin_rot_s(const RandomExponentialData restrict obj){
6666
+ static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData restrict obj){
6708
6667
  int64_t offset=0;
6709
6668
  offset+=8;
6710
6669
  return *( double*)(( char*) obj+offset);
6711
6670
  }
6712
- static inline void RandomExponentialData_set__sin_rot_s(RandomExponentialData restrict obj, double value){
6671
+ static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData restrict obj, double value){
6713
6672
  int64_t offset=0;
6714
6673
  offset+=8;
6715
6674
  *( double*)(( char*) obj+offset)=value;
6716
6675
  }
6717
- static inline double* RandomExponentialData_getp__sin_rot_s(RandomExponentialData restrict obj){
6676
+ static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData restrict obj){
6718
6677
  int64_t offset=0;
6719
6678
  offset+=8;
6720
6679
  return ( double*)(( char*) obj+offset);
6721
6680
  }
6722
- static inline double RandomExponentialData_get__cos_rot_s(const RandomExponentialData restrict obj){
6681
+ static inline double RandomRutherfordData_get_A(const RandomRutherfordData restrict obj){
6723
6682
  int64_t offset=0;
6724
6683
  offset+=16;
6725
6684
  return *( double*)(( char*) obj+offset);
6726
6685
  }
6727
- static inline void RandomExponentialData_set__cos_rot_s(RandomExponentialData restrict obj, double value){
6686
+ static inline void RandomRutherfordData_set_A(RandomRutherfordData restrict obj, double value){
6728
6687
  int64_t offset=0;
6729
6688
  offset+=16;
6730
6689
  *( double*)(( char*) obj+offset)=value;
6731
6690
  }
6732
- static inline double* RandomExponentialData_getp__cos_rot_s(RandomExponentialData restrict obj){
6691
+ static inline double* RandomRutherfordData_getp_A(RandomRutherfordData restrict obj){
6733
6692
  int64_t offset=0;
6734
6693
  offset+=16;
6735
6694
  return ( double*)(( char*) obj+offset);
6736
6695
  }
6737
- static inline double RandomExponentialData_get__shift_x(const RandomExponentialData restrict obj){
6696
+ static inline double RandomRutherfordData_get_B(const RandomRutherfordData restrict obj){
6738
6697
  int64_t offset=0;
6739
6698
  offset+=24;
6740
6699
  return *( double*)(( char*) obj+offset);
6741
6700
  }
6742
- static inline void RandomExponentialData_set__shift_x(RandomExponentialData restrict obj, double value){
6701
+ static inline void RandomRutherfordData_set_B(RandomRutherfordData restrict obj, double value){
6743
6702
  int64_t offset=0;
6744
6703
  offset+=24;
6745
6704
  *( double*)(( char*) obj+offset)=value;
6746
6705
  }
6747
- static inline double* RandomExponentialData_getp__shift_x(RandomExponentialData restrict obj){
6706
+ static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
6748
6707
  int64_t offset=0;
6749
6708
  offset+=24;
6750
6709
  return ( double*)(( char*) obj+offset);
6751
6710
  }
6752
- static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
6711
+ static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
6753
6712
  int64_t offset=0;
6754
6713
  offset+=32;
6755
- return *( double*)(( char*) obj+offset);
6714
+ return *(( int8_t*) obj+offset);
6756
6715
  }
6757
- static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
6716
+ static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
6758
6717
  int64_t offset=0;
6759
6718
  offset+=32;
6760
- *( double*)(( char*) obj+offset)=value;
6719
+ *(( int8_t*) obj+offset)=value;
6761
6720
  }
6762
- static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
6721
+ static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
6763
6722
  int64_t offset=0;
6764
6723
  offset+=32;
6765
- return ( double*)(( char*) obj+offset);
6724
+ return ( int8_t*)(( char*) obj+offset);
6766
6725
  }
6767
- static inline double RandomExponentialData_get__shift_s(const RandomExponentialData restrict obj){
6726
+ static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData restrict obj){
6768
6727
  int64_t offset=0;
6769
6728
  offset+=40;
6770
6729
  return *( double*)(( char*) obj+offset);
6771
6730
  }
6772
- static inline void RandomExponentialData_set__shift_s(RandomExponentialData restrict obj, double value){
6731
+ static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData restrict obj, double value){
6773
6732
  int64_t offset=0;
6774
6733
  offset+=40;
6775
6734
  *( double*)(( char*) obj+offset)=value;
6776
6735
  }
6777
- static inline double* RandomExponentialData_getp__shift_s(RandomExponentialData restrict obj){
6736
+ static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData restrict obj){
6778
6737
  int64_t offset=0;
6779
6738
  offset+=40;
6780
6739
  return ( double*)(( char*) obj+offset);
6781
6740
  }
6782
- static inline double RandomExponentialData_get__rot_x_rad(const RandomExponentialData restrict obj){
6741
+ static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData restrict obj){
6783
6742
  int64_t offset=0;
6784
6743
  offset+=48;
6785
6744
  return *( double*)(( char*) obj+offset);
6786
6745
  }
6787
- static inline void RandomExponentialData_set__rot_x_rad(RandomExponentialData restrict obj, double value){
6746
+ static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData restrict obj, double value){
6788
6747
  int64_t offset=0;
6789
6748
  offset+=48;
6790
6749
  *( double*)(( char*) obj+offset)=value;
6791
6750
  }
6792
- static inline double* RandomExponentialData_getp__rot_x_rad(RandomExponentialData restrict obj){
6751
+ static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData restrict obj){
6793
6752
  int64_t offset=0;
6794
6753
  offset+=48;
6795
6754
  return ( double*)(( char*) obj+offset);
6796
6755
  }
6797
- static inline double RandomExponentialData_get__rot_y_rad(const RandomExponentialData restrict obj){
6756
+ static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData restrict obj){
6798
6757
  int64_t offset=0;
6799
6758
  offset+=56;
6800
6759
  return *( double*)(( char*) obj+offset);
6801
6760
  }
6802
- static inline void RandomExponentialData_set__rot_y_rad(RandomExponentialData restrict obj, double value){
6761
+ static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData restrict obj, double value){
6803
6762
  int64_t offset=0;
6804
6763
  offset+=56;
6805
6764
  *( double*)(( char*) obj+offset)=value;
6806
6765
  }
6807
- static inline double* RandomExponentialData_getp__rot_y_rad(RandomExponentialData restrict obj){
6766
+ static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData restrict obj){
6808
6767
  int64_t offset=0;
6809
6768
  offset+=56;
6810
6769
  return ( double*)(( char*) obj+offset);
6811
6770
  }
6812
- static inline double RandomExponentialData_get__rot_s_rad_no_frame(const RandomExponentialData restrict obj){
6771
+ static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData restrict obj){
6813
6772
  int64_t offset=0;
6814
6773
  offset+=64;
6815
6774
  return *( double*)(( char*) obj+offset);
6816
6775
  }
6817
- static inline void RandomExponentialData_set__rot_s_rad_no_frame(RandomExponentialData restrict obj, double value){
6776
+ static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData restrict obj, double value){
6818
6777
  int64_t offset=0;
6819
6778
  offset+=64;
6820
6779
  *( double*)(( char*) obj+offset)=value;
6821
6780
  }
6822
- static inline double* RandomExponentialData_getp__rot_s_rad_no_frame(RandomExponentialData restrict obj){
6781
+ static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData restrict obj){
6823
6782
  int64_t offset=0;
6824
6783
  offset+=64;
6825
6784
  return ( double*)(( char*) obj+offset);
6826
6785
  }
6827
- static inline double RandomExponentialData_get_rot_shift_anchor(const RandomExponentialData restrict obj){
6786
+ static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData restrict obj){
6828
6787
  int64_t offset=0;
6829
6788
  offset+=72;
6830
6789
  return *( double*)(( char*) obj+offset);
6831
6790
  }
6832
- static inline void RandomExponentialData_set_rot_shift_anchor(RandomExponentialData restrict obj, double value){
6791
+ static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
6833
6792
  int64_t offset=0;
6834
6793
  offset+=72;
6835
6794
  *( double*)(( char*) obj+offset)=value;
6836
6795
  }
6837
- static inline double* RandomExponentialData_getp_rot_shift_anchor(RandomExponentialData restrict obj){
6796
+ static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
6838
6797
  int64_t offset=0;
6839
6798
  offset+=72;
6840
6799
  return ( double*)(( char*) obj+offset);
6800
+ }
6801
+ static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
6802
+ int64_t offset=0;
6803
+ offset+=80;
6804
+ return *( double*)(( char*) obj+offset);
6805
+ }
6806
+ static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
6807
+ int64_t offset=0;
6808
+ offset+=80;
6809
+ *( double*)(( char*) obj+offset)=value;
6810
+ }
6811
+ static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
6812
+ int64_t offset=0;
6813
+ offset+=80;
6814
+ return ( double*)(( char*) obj+offset);
6815
+ }
6816
+ static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
6817
+ int64_t offset=0;
6818
+ offset+=88;
6819
+ return *( double*)(( char*) obj+offset);
6820
+ }
6821
+ static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
6822
+ int64_t offset=0;
6823
+ offset+=88;
6824
+ *( double*)(( char*) obj+offset)=value;
6825
+ }
6826
+ static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
6827
+ int64_t offset=0;
6828
+ offset+=88;
6829
+ return ( double*)(( char*) obj+offset);
6830
+ }
6831
+ static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
6832
+ int64_t offset=0;
6833
+ offset+=96;
6834
+ return *( double*)(( char*) obj+offset);
6835
+ }
6836
+ static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
6837
+ int64_t offset=0;
6838
+ offset+=96;
6839
+ *( double*)(( char*) obj+offset)=value;
6840
+ }
6841
+ static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
6842
+ int64_t offset=0;
6843
+ offset+=96;
6844
+ return ( double*)(( char*) obj+offset);
6845
+ }
6846
+ static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
6847
+ int64_t offset=0;
6848
+ offset+=104;
6849
+ return *( double*)(( char*) obj+offset);
6850
+ }
6851
+ static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
6852
+ int64_t offset=0;
6853
+ offset+=104;
6854
+ *( double*)(( char*) obj+offset)=value;
6855
+ }
6856
+ static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
6857
+ int64_t offset=0;
6858
+ offset+=104;
6859
+ return ( double*)(( char*) obj+offset);
6841
6860
  }
6842
6861
  #endif
6843
6862
  // copyright ############################### //
@@ -7049,11 +7068,11 @@ void Drift_single_particle(LocalParticle* part, double length){
7049
7068
 
7050
7069
  #endif // XSTUITE_TRACK_FLAGS_H
7051
7070
 
7052
- #include <random/random_src/exponential.h>
7071
+ #include <random/random_src/rutherford.h>
7053
7072
 
7054
7073
 
7055
- void sample_exp(
7056
- RandomExponentialData el,
7074
+ void sample_ruth(
7075
+ RandomRutherfordData el,
7057
7076
 
7058
7077
  ParticlesData particles,
7059
7078
  double* samples, int64_t n_samples_per_seed,
@@ -7101,7 +7120,7 @@ void Drift_single_particle(LocalParticle* part, double length){
7101
7120
  if (part_id<part_capacity){
7102
7121
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
7103
7122
  if (check_is_active(&lpart)>0){
7104
- RandomExponential_sample(el, &lpart, samples, n_samples_per_seed);
7123
+ RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
7105
7124
 
7106
7125
  }
7107
7126
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -7120,25 +7139,6 @@ void Drift_single_particle(LocalParticle* part, double length){
7120
7139
  // #endif //only_for_context cpu_openmp
7121
7140
  }
7122
7141
 
7123
- #ifndef XOBJ_TYPEDEF_ElementRefClass
7124
- #define XOBJ_TYPEDEF_ElementRefClass
7125
- typedef struct ElementRefClass_s * ElementRefClass;
7126
- enum ElementRefClass_e{ElementRefClass_ParticlesMonitorData_t};
7127
- static inline ElementRefClass ElementRefClass_getp(ElementRefClass restrict obj){
7128
- int64_t offset=0;
7129
- return (ElementRefClass)(( char*) obj+offset);
7130
- }
7131
- static inline int64_t ElementRefClass_typeid(const ElementRefClass restrict obj){
7132
- int64_t offset=0;
7133
- offset+=8;
7134
- return *( int64_t*)(( char*) obj+offset);
7135
- }
7136
- static inline void* ElementRefClass_member(const ElementRefClass restrict obj){
7137
- int64_t offset=0;
7138
- offset+=*( int64_t*)(( char*) obj+offset);
7139
- return ( void*)(( char*) obj+offset);
7140
- }
7141
- #endif
7142
7142
  #ifndef XOBJ_TYPEDEF_ArrNElementRefClass
7143
7143
  #define XOBJ_TYPEDEF_ArrNElementRefClass
7144
7144
  typedef struct ArrNElementRefClass_s * ArrNElementRefClass;