xsuite 0.41.0__cp313-cp313-macosx_11_0_arm64.whl → 0.41.2__cp313-cp313-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.

@@ -133,6 +133,24 @@ typedef struct ArrNInt64_s * ArrNInt64;
133
133
  return ( int64_t*)(( char*) obj+offset);
134
134
  }
135
135
  #endif
136
+ #ifndef XOBJ_TYPEDEF_ArrNString
137
+ #define XOBJ_TYPEDEF_ArrNString
138
+ typedef struct ArrNString_s * ArrNString;
139
+ static inline ArrNString ArrNString_getp(ArrNString restrict obj){
140
+ int64_t offset=0;
141
+ return (ArrNString)(( char*) obj+offset);
142
+ }
143
+ static inline int64_t ArrNString_len(ArrNString restrict obj){
144
+ int64_t offset=0;
145
+ int64_t* arr = ( int64_t*)(( char*) obj+offset);
146
+ return arr[1];
147
+ }
148
+ static inline char* ArrNString_getp1(ArrNString restrict obj, int64_t i0){
149
+ int64_t offset=0;
150
+ offset=*( int64_t*)(( char*) obj+offset+16+i0*8);
151
+ return ( char*)(( char*) obj+offset);
152
+ }
153
+ #endif
136
154
  #ifndef XOBJ_TYPEDEF_ArrNUint32
137
155
  #define XOBJ_TYPEDEF_ArrNUint32
138
156
  typedef struct ArrNUint32_s * ArrNUint32;
@@ -161,24 +179,6 @@ typedef struct ArrNUint32_s * ArrNUint32;
161
179
  return ( uint32_t*)(( char*) obj+offset);
162
180
  }
163
181
  #endif
164
- #ifndef XOBJ_TYPEDEF_ArrNString
165
- #define XOBJ_TYPEDEF_ArrNString
166
- typedef struct ArrNString_s * ArrNString;
167
- static inline ArrNString ArrNString_getp(ArrNString restrict obj){
168
- int64_t offset=0;
169
- return (ArrNString)(( char*) obj+offset);
170
- }
171
- static inline int64_t ArrNString_len(ArrNString restrict obj){
172
- int64_t offset=0;
173
- int64_t* arr = ( int64_t*)(( char*) obj+offset);
174
- return arr[1];
175
- }
176
- static inline char* ArrNString_getp1(ArrNString restrict obj, int64_t i0){
177
- int64_t offset=0;
178
- offset=*( int64_t*)(( char*) obj+offset+16+i0*8);
179
- return ( char*)(( char*) obj+offset);
180
- }
181
- #endif
182
182
  #ifndef XOBJ_TYPEDEF_MultiSetterData
183
183
  #define XOBJ_TYPEDEF_MultiSetterData
184
184
  typedef struct MultiSetterData_s * MultiSetterData;
@@ -3368,652 +3368,217 @@ 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);
3511
+ return ( int64_t*)(( char*) obj+offset);
3524
3512
  }
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;
3513
+ static inline ParticlesData ParticlesMonitorData_getp_data(ParticlesMonitorData restrict obj){
3514
+ int64_t offset=0;
3515
+ offset+=152;
3516
+ return (ParticlesData)(( char*) obj+offset);
3604
3517
  }
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){
3518
+ static inline int64_t ParticlesMonitorData_get_data__capacity(const ParticlesMonitorData restrict obj){
3814
3519
  int64_t offset=0;
3815
- offset+=8;
3520
+ offset+=160;
3816
3521
  return *( int64_t*)(( char*) obj+offset);
3817
3522
  }
3818
- static inline void ParticlesMonitorData_set_start_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3523
+ static inline void ParticlesMonitorData_set_data__capacity(ParticlesMonitorData restrict obj, int64_t value){
3819
3524
  int64_t offset=0;
3820
- offset+=8;
3525
+ offset+=160;
3821
3526
  *( int64_t*)(( char*) obj+offset)=value;
3822
3527
  }
3823
- static inline int64_t* ParticlesMonitorData_getp_start_at_turn(ParticlesMonitorData restrict obj){
3528
+ static inline int64_t* ParticlesMonitorData_getp_data__capacity(ParticlesMonitorData restrict obj){
3824
3529
  int64_t offset=0;
3825
- offset+=8;
3530
+ offset+=160;
3826
3531
  return ( int64_t*)(( char*) obj+offset);
3827
3532
  }
3828
- static inline int64_t ParticlesMonitorData_get_stop_at_turn(const ParticlesMonitorData restrict obj){
3533
+ static inline int64_t ParticlesMonitorData_get_data__num_active_particles(const ParticlesMonitorData restrict obj){
3829
3534
  int64_t offset=0;
3830
- offset+=16;
3535
+ offset+=168;
3831
3536
  return *( int64_t*)(( char*) obj+offset);
3832
3537
  }
3833
- static inline void ParticlesMonitorData_set_stop_at_turn(ParticlesMonitorData restrict obj, int64_t value){
3538
+ static inline void ParticlesMonitorData_set_data__num_active_particles(ParticlesMonitorData restrict obj, int64_t value){
3834
3539
  int64_t offset=0;
3835
- offset+=16;
3540
+ offset+=168;
3836
3541
  *( int64_t*)(( char*) obj+offset)=value;
3837
3542
  }
3838
- static inline int64_t* ParticlesMonitorData_getp_stop_at_turn(ParticlesMonitorData restrict obj){
3543
+ static inline int64_t* ParticlesMonitorData_getp_data__num_active_particles(ParticlesMonitorData restrict obj){
3839
3544
  int64_t offset=0;
3840
- offset+=16;
3545
+ offset+=168;
3841
3546
  return ( int64_t*)(( char*) obj+offset);
3842
3547
  }
3843
- static inline int64_t ParticlesMonitorData_get_part_id_start(const ParticlesMonitorData restrict obj){
3548
+ static inline int64_t ParticlesMonitorData_get_data__num_lost_particles(const ParticlesMonitorData restrict obj){
3844
3549
  int64_t offset=0;
3845
- offset+=24;
3550
+ offset+=176;
3846
3551
  return *( int64_t*)(( char*) obj+offset);
3847
3552
  }
3848
- static inline void ParticlesMonitorData_set_part_id_start(ParticlesMonitorData restrict obj, int64_t value){
3553
+ static inline void ParticlesMonitorData_set_data__num_lost_particles(ParticlesMonitorData restrict obj, int64_t value){
3849
3554
  int64_t offset=0;
3850
- offset+=24;
3555
+ offset+=176;
3851
3556
  *( int64_t*)(( char*) obj+offset)=value;
3852
3557
  }
3853
- static inline int64_t* ParticlesMonitorData_getp_part_id_start(ParticlesMonitorData restrict obj){
3558
+ static inline int64_t* ParticlesMonitorData_getp_data__num_lost_particles(ParticlesMonitorData restrict obj){
3854
3559
  int64_t offset=0;
3855
- offset+=24;
3560
+ offset+=176;
3856
3561
  return ( int64_t*)(( char*) obj+offset);
3857
3562
  }
3858
- static inline int64_t ParticlesMonitorData_get_part_id_end(const ParticlesMonitorData restrict obj){
3563
+ static inline int64_t ParticlesMonitorData_get_data_start_tracking_at_element(const ParticlesMonitorData restrict obj){
3859
3564
  int64_t offset=0;
3860
- offset+=32;
3565
+ offset+=184;
3861
3566
  return *( int64_t*)(( char*) obj+offset);
3862
3567
  }
3863
- static inline void ParticlesMonitorData_set_part_id_end(ParticlesMonitorData restrict obj, int64_t value){
3568
+ static inline void ParticlesMonitorData_set_data_start_tracking_at_element(ParticlesMonitorData restrict obj, int64_t value){
3864
3569
  int64_t offset=0;
3865
- offset+=32;
3570
+ offset+=184;
3866
3571
  *( int64_t*)(( char*) obj+offset)=value;
3867
3572
  }
3868
- static inline int64_t* ParticlesMonitorData_getp_part_id_end(ParticlesMonitorData restrict obj){
3573
+ static inline int64_t* ParticlesMonitorData_getp_data_start_tracking_at_element(ParticlesMonitorData restrict obj){
3869
3574
  int64_t offset=0;
3870
- offset+=32;
3575
+ offset+=184;
3871
3576
  return ( int64_t*)(( char*) obj+offset);
3872
3577
  }
3873
- static inline int64_t ParticlesMonitorData_get_ebe_mode(const ParticlesMonitorData restrict obj){
3578
+ static inline double ParticlesMonitorData_get_data_q0(const ParticlesMonitorData restrict obj){
3874
3579
  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);
3580
+ offset+=192;
3581
+ return *( double*)(( char*) obj+offset);
4017
3582
  }
4018
3583
  static inline void ParticlesMonitorData_set_data_q0(ParticlesMonitorData restrict obj, double value){
4019
3584
  int64_t offset=0;
@@ -5097,180 +4662,816 @@ typedef struct ParticlesMonitorData_s * ParticlesMonitorData;
5097
4662
  offset+=16+i0*4;
5098
4663
  *( uint32_t*)(( char*) obj+offset)=value;
5099
4664
  }
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);
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){
4732
+ int64_t offset=0;
4733
+ offset+=88;
4734
+ return ( double*)(( char*) obj+offset);
4735
+ }
4736
+ static inline double ParticlesMonitorData_get__shift_x(const ParticlesMonitorData restrict obj){
4737
+ int64_t offset=0;
4738
+ offset+=96;
4739
+ return *( double*)(( char*) obj+offset);
4740
+ }
4741
+ static inline void ParticlesMonitorData_set__shift_x(ParticlesMonitorData restrict obj, double value){
4742
+ int64_t offset=0;
4743
+ offset+=96;
4744
+ *( double*)(( char*) obj+offset)=value;
4745
+ }
4746
+ static inline double* ParticlesMonitorData_getp__shift_x(ParticlesMonitorData restrict obj){
4747
+ int64_t offset=0;
4748
+ offset+=96;
4749
+ return ( double*)(( char*) obj+offset);
4750
+ }
4751
+ static inline double ParticlesMonitorData_get__shift_y(const ParticlesMonitorData restrict obj){
4752
+ int64_t offset=0;
4753
+ offset+=104;
4754
+ return *( double*)(( char*) obj+offset);
4755
+ }
4756
+ static inline void ParticlesMonitorData_set__shift_y(ParticlesMonitorData restrict obj, double value){
4757
+ int64_t offset=0;
4758
+ offset+=104;
4759
+ *( double*)(( char*) obj+offset)=value;
4760
+ }
4761
+ static inline double* ParticlesMonitorData_getp__shift_y(ParticlesMonitorData restrict obj){
4762
+ int64_t offset=0;
4763
+ offset+=104;
4764
+ return ( double*)(( char*) obj+offset);
4765
+ }
4766
+ static inline double ParticlesMonitorData_get__shift_s(const ParticlesMonitorData restrict obj){
4767
+ int64_t offset=0;
4768
+ offset+=112;
4769
+ return *( double*)(( char*) obj+offset);
4770
+ }
4771
+ static inline void ParticlesMonitorData_set__shift_s(ParticlesMonitorData restrict obj, double value){
4772
+ int64_t offset=0;
4773
+ offset+=112;
4774
+ *( double*)(( char*) obj+offset)=value;
4775
+ }
4776
+ static inline double* ParticlesMonitorData_getp__shift_s(ParticlesMonitorData restrict obj){
4777
+ int64_t offset=0;
4778
+ offset+=112;
4779
+ return ( double*)(( char*) obj+offset);
4780
+ }
4781
+ static inline double ParticlesMonitorData_get__rot_x_rad(const ParticlesMonitorData restrict obj){
4782
+ int64_t offset=0;
4783
+ offset+=120;
4784
+ return *( double*)(( char*) obj+offset);
4785
+ }
4786
+ static inline void ParticlesMonitorData_set__rot_x_rad(ParticlesMonitorData restrict obj, double value){
4787
+ int64_t offset=0;
4788
+ offset+=120;
4789
+ *( double*)(( char*) obj+offset)=value;
4790
+ }
4791
+ static inline double* ParticlesMonitorData_getp__rot_x_rad(ParticlesMonitorData restrict obj){
4792
+ int64_t offset=0;
4793
+ offset+=120;
4794
+ return ( double*)(( char*) obj+offset);
4795
+ }
4796
+ static inline double ParticlesMonitorData_get__rot_y_rad(const ParticlesMonitorData restrict obj){
4797
+ int64_t offset=0;
4798
+ offset+=128;
4799
+ return *( double*)(( char*) obj+offset);
4800
+ }
4801
+ static inline void ParticlesMonitorData_set__rot_y_rad(ParticlesMonitorData restrict obj, double value){
4802
+ int64_t offset=0;
4803
+ offset+=128;
4804
+ *( double*)(( char*) obj+offset)=value;
4805
+ }
4806
+ static inline double* ParticlesMonitorData_getp__rot_y_rad(ParticlesMonitorData restrict obj){
4807
+ int64_t offset=0;
4808
+ offset+=128;
4809
+ return ( double*)(( char*) obj+offset);
4810
+ }
4811
+ static inline double ParticlesMonitorData_get__rot_s_rad_no_frame(const ParticlesMonitorData restrict obj){
4812
+ int64_t offset=0;
4813
+ offset+=136;
4814
+ return *( double*)(( char*) obj+offset);
4815
+ }
4816
+ static inline void ParticlesMonitorData_set__rot_s_rad_no_frame(ParticlesMonitorData restrict obj, double value){
4817
+ int64_t offset=0;
4818
+ offset+=136;
4819
+ *( double*)(( char*) obj+offset)=value;
4820
+ }
4821
+ static inline double* ParticlesMonitorData_getp__rot_s_rad_no_frame(ParticlesMonitorData restrict obj){
4822
+ int64_t offset=0;
4823
+ offset+=136;
4824
+ return ( double*)(( char*) obj+offset);
4825
+ }
4826
+ static inline double ParticlesMonitorData_get_rot_shift_anchor(const ParticlesMonitorData restrict obj){
4827
+ int64_t offset=0;
4828
+ offset+=144;
4829
+ return *( double*)(( char*) obj+offset);
4830
+ }
4831
+ static inline void ParticlesMonitorData_set_rot_shift_anchor(ParticlesMonitorData restrict obj, double value){
4832
+ int64_t offset=0;
4833
+ offset+=144;
4834
+ *( double*)(( char*) obj+offset)=value;
4835
+ }
4836
+ static inline double* ParticlesMonitorData_getp_rot_shift_anchor(ParticlesMonitorData restrict obj){
4837
+ int64_t offset=0;
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;
4932
+ }
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);
4982
+ }
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 );
5006
+ }
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);
5024
+ }
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
5034
+ }
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;
5124
+ }
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
+
5192
+ }
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
@@ -5430,268 +5631,67 @@ GPUFUN
5430
5631
  void Drift_single_particle_expanded(LocalParticle* part, double length){
5431
5632
  double const rpp = LocalParticle_get_rpp(part);
5432
5633
  double const rv0v = 1./LocalParticle_get_rvv(part);
5433
- double const xp = LocalParticle_get_px(part) * rpp;
5434
- 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
5634
+ double const xp = LocalParticle_get_px(part) * rpp;
5635
+ double const yp = LocalParticle_get_py(part) * rpp;
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,159 +5755,238 @@ if (_sin_rot_s > -2.) {
5755
5755
  // #endif //only_for_context cpu_openmp
5756
5756
  }
5757
5757
 
5758
- #ifndef XOBJ_TYPEDEF_RandomNormalData
5759
- #define XOBJ_TYPEDEF_RandomNormalData
5760
- typedef struct RandomNormalData_s * RandomNormalData;
5761
- static inline RandomNormalData RandomNormalData_getp(RandomNormalData 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 (RandomNormalData)(( char*) obj+offset);
5764
+ return (ElementRefClass)(( char*) obj+offset);
5764
5765
  }
5765
- static inline uint8_t RandomNormalData_get__dummy(const RandomNormalData restrict obj){
5766
+ static inline int64_t ElementRefClass_typeid(const ElementRefClass restrict obj){
5766
5767
  int64_t offset=0;
5767
- return *(( uint8_t*) obj+offset);
5768
+ offset+=8;
5769
+ return *( int64_t*)(( char*) obj+offset);
5768
5770
  }
5769
- static inline void RandomNormalData_set__dummy(RandomNormalData restrict obj, uint8_t value){
5771
+ static inline void* ElementRefClass_member(const ElementRefClass restrict obj){
5770
5772
  int64_t offset=0;
5771
- *(( uint8_t*) obj+offset)=value;
5773
+ offset+=*( int64_t*)(( char*) obj+offset);
5774
+ return ( void*)(( char*) obj+offset);
5772
5775
  }
5773
- static inline uint8_t* RandomNormalData_getp__dummy(RandomNormalData restrict obj){
5776
+ #endif
5777
+ #ifndef XOBJ_TYPEDEF_RandomRutherfordData
5778
+ #define XOBJ_TYPEDEF_RandomRutherfordData
5779
+ typedef struct RandomRutherfordData_s * RandomRutherfordData;
5780
+ static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
5774
5781
  int64_t offset=0;
5775
- return ( uint8_t*)(( char*) obj+offset);
5782
+ return (RandomRutherfordData)(( char*) obj+offset);
5776
5783
  }
5777
- static inline double RandomNormalData_get__sin_rot_s(const RandomNormalData restrict obj){
5784
+ static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
5785
+ int64_t offset=0;
5786
+ return *( double*)(( char*) obj+offset);
5787
+ }
5788
+ static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
5789
+ int64_t offset=0;
5790
+ *( double*)(( char*) obj+offset)=value;
5791
+ }
5792
+ static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
5793
+ int64_t offset=0;
5794
+ return ( double*)(( char*) obj+offset);
5795
+ }
5796
+ static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData 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 RandomNormalData_set__sin_rot_s(RandomNormalData restrict obj, double value){
5801
+ static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData 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* RandomNormalData_getp__sin_rot_s(RandomNormalData restrict obj){
5806
+ static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData 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 RandomNormalData_get__cos_rot_s(const RandomNormalData restrict obj){
5811
+ static inline double RandomRutherfordData_get_A(const RandomRutherfordData 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 RandomNormalData_set__cos_rot_s(RandomNormalData restrict obj, double value){
5816
+ static inline void RandomRutherfordData_set_A(RandomRutherfordData 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* RandomNormalData_getp__cos_rot_s(RandomNormalData restrict obj){
5821
+ static inline double* RandomRutherfordData_getp_A(RandomRutherfordData 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 RandomNormalData_get__shift_x(const RandomNormalData restrict obj){
5826
+ static inline double RandomRutherfordData_get_B(const RandomRutherfordData 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 RandomNormalData_set__shift_x(RandomNormalData restrict obj, double value){
5831
+ static inline void RandomRutherfordData_set_B(RandomRutherfordData 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* RandomNormalData_getp__shift_x(RandomNormalData restrict obj){
5836
+ static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
5818
5837
  int64_t offset=0;
5819
5838
  offset+=24;
5820
5839
  return ( double*)(( char*) obj+offset);
5821
5840
  }
5822
- static inline double RandomNormalData_get__shift_y(const RandomNormalData restrict obj){
5841
+ static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
5823
5842
  int64_t offset=0;
5824
5843
  offset+=32;
5825
- return *( double*)(( char*) obj+offset);
5844
+ return *(( int8_t*) obj+offset);
5826
5845
  }
5827
- static inline void RandomNormalData_set__shift_y(RandomNormalData restrict obj, double value){
5846
+ static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
5828
5847
  int64_t offset=0;
5829
5848
  offset+=32;
5830
- *( double*)(( char*) obj+offset)=value;
5849
+ *(( int8_t*) obj+offset)=value;
5831
5850
  }
5832
- static inline double* RandomNormalData_getp__shift_y(RandomNormalData restrict obj){
5851
+ static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
5833
5852
  int64_t offset=0;
5834
5853
  offset+=32;
5835
- return ( double*)(( char*) obj+offset);
5854
+ return ( int8_t*)(( char*) obj+offset);
5836
5855
  }
5837
- static inline double RandomNormalData_get__shift_s(const RandomNormalData restrict obj){
5856
+ static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData 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 RandomNormalData_set__shift_s(RandomNormalData restrict obj, double value){
5861
+ static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData 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* RandomNormalData_getp__shift_s(RandomNormalData restrict obj){
5866
+ static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData 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 RandomNormalData_get__rot_x_rad(const RandomNormalData restrict obj){
5871
+ static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData 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 RandomNormalData_set__rot_x_rad(RandomNormalData restrict obj, double value){
5876
+ static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData 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* RandomNormalData_getp__rot_x_rad(RandomNormalData restrict obj){
5881
+ static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData 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 RandomNormalData_get__rot_y_rad(const RandomNormalData restrict obj){
5886
+ static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData 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 RandomNormalData_set__rot_y_rad(RandomNormalData restrict obj, double value){
5891
+ static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData 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* RandomNormalData_getp__rot_y_rad(RandomNormalData restrict obj){
5896
+ static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData 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 RandomNormalData_get__rot_s_rad_no_frame(const RandomNormalData restrict obj){
5901
+ static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData 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 RandomNormalData_set__rot_s_rad_no_frame(RandomNormalData restrict obj, double value){
5906
+ static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData 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* RandomNormalData_getp__rot_s_rad_no_frame(RandomNormalData restrict obj){
5911
+ static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData 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 RandomNormalData_get_rot_shift_anchor(const RandomNormalData restrict obj){
5916
+ static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData 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 RandomNormalData_set_rot_shift_anchor(RandomNormalData restrict obj, double value){
5921
+ static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
5903
5922
  int64_t offset=0;
5904
5923
  offset+=72;
5905
5924
  *( double*)(( char*) obj+offset)=value;
5906
5925
  }
5907
- static inline double* RandomNormalData_getp_rot_shift_anchor(RandomNormalData restrict obj){
5926
+ static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
5908
5927
  int64_t offset=0;
5909
5928
  offset+=72;
5910
5929
  return ( double*)(( char*) obj+offset);
5930
+ }
5931
+ static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
5932
+ int64_t offset=0;
5933
+ offset+=80;
5934
+ return *( double*)(( char*) obj+offset);
5935
+ }
5936
+ static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
5937
+ int64_t offset=0;
5938
+ offset+=80;
5939
+ *( double*)(( char*) obj+offset)=value;
5940
+ }
5941
+ static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
5942
+ int64_t offset=0;
5943
+ offset+=80;
5944
+ return ( double*)(( char*) obj+offset);
5945
+ }
5946
+ static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
5947
+ int64_t offset=0;
5948
+ offset+=88;
5949
+ return *( double*)(( char*) obj+offset);
5950
+ }
5951
+ static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
5952
+ int64_t offset=0;
5953
+ offset+=88;
5954
+ *( double*)(( char*) obj+offset)=value;
5955
+ }
5956
+ static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
5957
+ int64_t offset=0;
5958
+ offset+=88;
5959
+ return ( double*)(( char*) obj+offset);
5960
+ }
5961
+ static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
5962
+ int64_t offset=0;
5963
+ offset+=96;
5964
+ return *( double*)(( char*) obj+offset);
5965
+ }
5966
+ static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
5967
+ int64_t offset=0;
5968
+ offset+=96;
5969
+ *( double*)(( char*) obj+offset)=value;
5970
+ }
5971
+ static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
5972
+ int64_t offset=0;
5973
+ offset+=96;
5974
+ return ( double*)(( char*) obj+offset);
5975
+ }
5976
+ static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
5977
+ int64_t offset=0;
5978
+ offset+=104;
5979
+ return *( double*)(( char*) obj+offset);
5980
+ }
5981
+ static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
5982
+ int64_t offset=0;
5983
+ offset+=104;
5984
+ *( double*)(( char*) obj+offset)=value;
5985
+ }
5986
+ static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
5987
+ int64_t offset=0;
5988
+ offset+=104;
5989
+ return ( double*)(( char*) obj+offset);
5911
5990
  }
5912
5991
  #endif
5913
5992
  // copyright ############################### //
@@ -6119,11 +6198,11 @@ void Drift_single_particle(LocalParticle* part, double length){
6119
6198
 
6120
6199
  #endif // XSTUITE_TRACK_FLAGS_H
6121
6200
 
6122
- #include <random/random_src/normal.h>
6201
+ #include <random/random_src/rutherford.h>
6123
6202
 
6124
6203
 
6125
- void sample_gauss(
6126
- RandomNormalData el,
6204
+ void sample_ruth(
6205
+ RandomRutherfordData el,
6127
6206
 
6128
6207
  ParticlesData particles,
6129
6208
  double* samples, int64_t n_samples_per_seed,
@@ -6171,7 +6250,7 @@ void Drift_single_particle(LocalParticle* part, double length){
6171
6250
  if (part_id<part_capacity){
6172
6251
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
6173
6252
  if (check_is_active(&lpart)>0){
6174
- RandomNormal_sample(el, &lpart, samples, n_samples_per_seed);
6253
+ RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
6175
6254
 
6176
6255
  }
6177
6256
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -6190,156 +6269,156 @@ void Drift_single_particle(LocalParticle* part, double length){
6190
6269
  // #endif //only_for_context cpu_openmp
6191
6270
  }
6192
6271
 
6193
- #ifndef XOBJ_TYPEDEF_RandomExponentialData
6194
- #define XOBJ_TYPEDEF_RandomExponentialData
6195
- typedef struct RandomExponentialData_s * RandomExponentialData;
6196
- static inline RandomExponentialData RandomExponentialData_getp(RandomExponentialData restrict obj){
6272
+ #ifndef XOBJ_TYPEDEF_RandomNormalData
6273
+ #define XOBJ_TYPEDEF_RandomNormalData
6274
+ typedef struct RandomNormalData_s * RandomNormalData;
6275
+ static inline RandomNormalData RandomNormalData_getp(RandomNormalData restrict obj){
6197
6276
  int64_t offset=0;
6198
- return (RandomExponentialData)(( char*) obj+offset);
6277
+ return (RandomNormalData)(( char*) obj+offset);
6199
6278
  }
6200
- static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
6279
+ static inline uint8_t RandomNormalData_get__dummy(const RandomNormalData restrict obj){
6201
6280
  int64_t offset=0;
6202
6281
  return *(( uint8_t*) obj+offset);
6203
6282
  }
6204
- static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
6283
+ static inline void RandomNormalData_set__dummy(RandomNormalData restrict obj, uint8_t value){
6205
6284
  int64_t offset=0;
6206
6285
  *(( uint8_t*) obj+offset)=value;
6207
6286
  }
6208
- static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
6287
+ static inline uint8_t* RandomNormalData_getp__dummy(RandomNormalData restrict obj){
6209
6288
  int64_t offset=0;
6210
6289
  return ( uint8_t*)(( char*) obj+offset);
6211
6290
  }
6212
- static inline double RandomExponentialData_get__sin_rot_s(const RandomExponentialData restrict obj){
6291
+ static inline double RandomNormalData_get__sin_rot_s(const RandomNormalData restrict obj){
6213
6292
  int64_t offset=0;
6214
6293
  offset+=8;
6215
6294
  return *( double*)(( char*) obj+offset);
6216
6295
  }
6217
- static inline void RandomExponentialData_set__sin_rot_s(RandomExponentialData restrict obj, double value){
6296
+ static inline void RandomNormalData_set__sin_rot_s(RandomNormalData restrict obj, double value){
6218
6297
  int64_t offset=0;
6219
6298
  offset+=8;
6220
6299
  *( double*)(( char*) obj+offset)=value;
6221
6300
  }
6222
- static inline double* RandomExponentialData_getp__sin_rot_s(RandomExponentialData restrict obj){
6301
+ static inline double* RandomNormalData_getp__sin_rot_s(RandomNormalData restrict obj){
6223
6302
  int64_t offset=0;
6224
6303
  offset+=8;
6225
6304
  return ( double*)(( char*) obj+offset);
6226
6305
  }
6227
- static inline double RandomExponentialData_get__cos_rot_s(const RandomExponentialData restrict obj){
6306
+ static inline double RandomNormalData_get__cos_rot_s(const RandomNormalData restrict obj){
6228
6307
  int64_t offset=0;
6229
6308
  offset+=16;
6230
6309
  return *( double*)(( char*) obj+offset);
6231
6310
  }
6232
- static inline void RandomExponentialData_set__cos_rot_s(RandomExponentialData restrict obj, double value){
6311
+ static inline void RandomNormalData_set__cos_rot_s(RandomNormalData restrict obj, double value){
6233
6312
  int64_t offset=0;
6234
6313
  offset+=16;
6235
6314
  *( double*)(( char*) obj+offset)=value;
6236
6315
  }
6237
- static inline double* RandomExponentialData_getp__cos_rot_s(RandomExponentialData restrict obj){
6316
+ static inline double* RandomNormalData_getp__cos_rot_s(RandomNormalData restrict obj){
6238
6317
  int64_t offset=0;
6239
6318
  offset+=16;
6240
6319
  return ( double*)(( char*) obj+offset);
6241
6320
  }
6242
- static inline double RandomExponentialData_get__shift_x(const RandomExponentialData restrict obj){
6321
+ static inline double RandomNormalData_get__shift_x(const RandomNormalData restrict obj){
6243
6322
  int64_t offset=0;
6244
6323
  offset+=24;
6245
6324
  return *( double*)(( char*) obj+offset);
6246
6325
  }
6247
- static inline void RandomExponentialData_set__shift_x(RandomExponentialData restrict obj, double value){
6326
+ static inline void RandomNormalData_set__shift_x(RandomNormalData restrict obj, double value){
6248
6327
  int64_t offset=0;
6249
6328
  offset+=24;
6250
6329
  *( double*)(( char*) obj+offset)=value;
6251
6330
  }
6252
- static inline double* RandomExponentialData_getp__shift_x(RandomExponentialData restrict obj){
6331
+ static inline double* RandomNormalData_getp__shift_x(RandomNormalData restrict obj){
6253
6332
  int64_t offset=0;
6254
6333
  offset+=24;
6255
6334
  return ( double*)(( char*) obj+offset);
6256
6335
  }
6257
- static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
6336
+ static inline double RandomNormalData_get__shift_y(const RandomNormalData restrict obj){
6258
6337
  int64_t offset=0;
6259
6338
  offset+=32;
6260
6339
  return *( double*)(( char*) obj+offset);
6261
6340
  }
6262
- static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
6341
+ static inline void RandomNormalData_set__shift_y(RandomNormalData restrict obj, double value){
6263
6342
  int64_t offset=0;
6264
6343
  offset+=32;
6265
6344
  *( double*)(( char*) obj+offset)=value;
6266
6345
  }
6267
- static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
6346
+ static inline double* RandomNormalData_getp__shift_y(RandomNormalData restrict obj){
6268
6347
  int64_t offset=0;
6269
6348
  offset+=32;
6270
6349
  return ( double*)(( char*) obj+offset);
6271
6350
  }
6272
- static inline double RandomExponentialData_get__shift_s(const RandomExponentialData restrict obj){
6351
+ static inline double RandomNormalData_get__shift_s(const RandomNormalData restrict obj){
6273
6352
  int64_t offset=0;
6274
6353
  offset+=40;
6275
6354
  return *( double*)(( char*) obj+offset);
6276
6355
  }
6277
- static inline void RandomExponentialData_set__shift_s(RandomExponentialData restrict obj, double value){
6356
+ static inline void RandomNormalData_set__shift_s(RandomNormalData restrict obj, double value){
6278
6357
  int64_t offset=0;
6279
6358
  offset+=40;
6280
6359
  *( double*)(( char*) obj+offset)=value;
6281
6360
  }
6282
- static inline double* RandomExponentialData_getp__shift_s(RandomExponentialData restrict obj){
6361
+ static inline double* RandomNormalData_getp__shift_s(RandomNormalData restrict obj){
6283
6362
  int64_t offset=0;
6284
6363
  offset+=40;
6285
6364
  return ( double*)(( char*) obj+offset);
6286
6365
  }
6287
- static inline double RandomExponentialData_get__rot_x_rad(const RandomExponentialData restrict obj){
6366
+ static inline double RandomNormalData_get__rot_x_rad(const RandomNormalData restrict obj){
6288
6367
  int64_t offset=0;
6289
6368
  offset+=48;
6290
6369
  return *( double*)(( char*) obj+offset);
6291
6370
  }
6292
- static inline void RandomExponentialData_set__rot_x_rad(RandomExponentialData restrict obj, double value){
6371
+ static inline void RandomNormalData_set__rot_x_rad(RandomNormalData restrict obj, double value){
6293
6372
  int64_t offset=0;
6294
6373
  offset+=48;
6295
6374
  *( double*)(( char*) obj+offset)=value;
6296
6375
  }
6297
- static inline double* RandomExponentialData_getp__rot_x_rad(RandomExponentialData restrict obj){
6376
+ static inline double* RandomNormalData_getp__rot_x_rad(RandomNormalData restrict obj){
6298
6377
  int64_t offset=0;
6299
6378
  offset+=48;
6300
6379
  return ( double*)(( char*) obj+offset);
6301
6380
  }
6302
- static inline double RandomExponentialData_get__rot_y_rad(const RandomExponentialData restrict obj){
6381
+ static inline double RandomNormalData_get__rot_y_rad(const RandomNormalData restrict obj){
6303
6382
  int64_t offset=0;
6304
6383
  offset+=56;
6305
6384
  return *( double*)(( char*) obj+offset);
6306
6385
  }
6307
- static inline void RandomExponentialData_set__rot_y_rad(RandomExponentialData restrict obj, double value){
6386
+ static inline void RandomNormalData_set__rot_y_rad(RandomNormalData restrict obj, double value){
6308
6387
  int64_t offset=0;
6309
6388
  offset+=56;
6310
6389
  *( double*)(( char*) obj+offset)=value;
6311
6390
  }
6312
- static inline double* RandomExponentialData_getp__rot_y_rad(RandomExponentialData restrict obj){
6391
+ static inline double* RandomNormalData_getp__rot_y_rad(RandomNormalData restrict obj){
6313
6392
  int64_t offset=0;
6314
6393
  offset+=56;
6315
6394
  return ( double*)(( char*) obj+offset);
6316
6395
  }
6317
- static inline double RandomExponentialData_get__rot_s_rad_no_frame(const RandomExponentialData restrict obj){
6396
+ static inline double RandomNormalData_get__rot_s_rad_no_frame(const RandomNormalData restrict obj){
6318
6397
  int64_t offset=0;
6319
6398
  offset+=64;
6320
6399
  return *( double*)(( char*) obj+offset);
6321
6400
  }
6322
- static inline void RandomExponentialData_set__rot_s_rad_no_frame(RandomExponentialData restrict obj, double value){
6401
+ static inline void RandomNormalData_set__rot_s_rad_no_frame(RandomNormalData restrict obj, double value){
6323
6402
  int64_t offset=0;
6324
6403
  offset+=64;
6325
6404
  *( double*)(( char*) obj+offset)=value;
6326
6405
  }
6327
- static inline double* RandomExponentialData_getp__rot_s_rad_no_frame(RandomExponentialData restrict obj){
6406
+ static inline double* RandomNormalData_getp__rot_s_rad_no_frame(RandomNormalData restrict obj){
6328
6407
  int64_t offset=0;
6329
6408
  offset+=64;
6330
6409
  return ( double*)(( char*) obj+offset);
6331
6410
  }
6332
- static inline double RandomExponentialData_get_rot_shift_anchor(const RandomExponentialData restrict obj){
6411
+ static inline double RandomNormalData_get_rot_shift_anchor(const RandomNormalData restrict obj){
6333
6412
  int64_t offset=0;
6334
6413
  offset+=72;
6335
6414
  return *( double*)(( char*) obj+offset);
6336
6415
  }
6337
- static inline void RandomExponentialData_set_rot_shift_anchor(RandomExponentialData restrict obj, double value){
6416
+ static inline void RandomNormalData_set_rot_shift_anchor(RandomNormalData restrict obj, double value){
6338
6417
  int64_t offset=0;
6339
6418
  offset+=72;
6340
6419
  *( double*)(( char*) obj+offset)=value;
6341
6420
  }
6342
- static inline double* RandomExponentialData_getp_rot_shift_anchor(RandomExponentialData restrict obj){
6421
+ static inline double* RandomNormalData_getp_rot_shift_anchor(RandomNormalData restrict obj){
6343
6422
  int64_t offset=0;
6344
6423
  offset+=72;
6345
6424
  return ( double*)(( char*) obj+offset);
@@ -6554,11 +6633,11 @@ void Drift_single_particle(LocalParticle* part, double length){
6554
6633
 
6555
6634
  #endif // XSTUITE_TRACK_FLAGS_H
6556
6635
 
6557
- #include <random/random_src/exponential.h>
6636
+ #include <random/random_src/normal.h>
6558
6637
 
6559
6638
 
6560
- void sample_exp(
6561
- RandomExponentialData el,
6639
+ void sample_gauss(
6640
+ RandomNormalData el,
6562
6641
 
6563
6642
  ParticlesData particles,
6564
6643
  double* samples, int64_t n_samples_per_seed,
@@ -6606,7 +6685,7 @@ void Drift_single_particle(LocalParticle* part, double length){
6606
6685
  if (part_id<part_capacity){
6607
6686
  Particles_to_LocalParticle(particles, &lpart, part_id, end_id);
6608
6687
  if (check_is_active(&lpart)>0){
6609
- RandomExponential_sample(el, &lpart, samples, n_samples_per_seed);
6688
+ RandomNormal_sample(el, &lpart, samples, n_samples_per_seed);
6610
6689
 
6611
6690
  }
6612
6691
  if (check_is_active(&lpart)>0 && flag_increment_at_element){
@@ -6625,219 +6704,159 @@ void Drift_single_particle(LocalParticle* part, double length){
6625
6704
  // #endif //only_for_context cpu_openmp
6626
6705
  }
6627
6706
 
6628
- #ifndef XOBJ_TYPEDEF_RandomRutherfordData
6629
- #define XOBJ_TYPEDEF_RandomRutherfordData
6630
- typedef struct RandomRutherfordData_s * RandomRutherfordData;
6631
- static inline RandomRutherfordData RandomRutherfordData_getp(RandomRutherfordData restrict obj){
6707
+ #ifndef XOBJ_TYPEDEF_RandomExponentialData
6708
+ #define XOBJ_TYPEDEF_RandomExponentialData
6709
+ typedef struct RandomExponentialData_s * RandomExponentialData;
6710
+ static inline RandomExponentialData RandomExponentialData_getp(RandomExponentialData restrict obj){
6632
6711
  int64_t offset=0;
6633
- return (RandomRutherfordData)(( char*) obj+offset);
6712
+ return (RandomExponentialData)(( char*) obj+offset);
6634
6713
  }
6635
- static inline double RandomRutherfordData_get_lower_val(const RandomRutherfordData restrict obj){
6714
+ static inline uint8_t RandomExponentialData_get__dummy(const RandomExponentialData restrict obj){
6636
6715
  int64_t offset=0;
6637
- return *( double*)(( char*) obj+offset);
6716
+ return *(( uint8_t*) obj+offset);
6638
6717
  }
6639
- static inline void RandomRutherfordData_set_lower_val(RandomRutherfordData restrict obj, double value){
6718
+ static inline void RandomExponentialData_set__dummy(RandomExponentialData restrict obj, uint8_t value){
6640
6719
  int64_t offset=0;
6641
- *( double*)(( char*) obj+offset)=value;
6720
+ *(( uint8_t*) obj+offset)=value;
6642
6721
  }
6643
- static inline double* RandomRutherfordData_getp_lower_val(RandomRutherfordData restrict obj){
6722
+ static inline uint8_t* RandomExponentialData_getp__dummy(RandomExponentialData restrict obj){
6644
6723
  int64_t offset=0;
6645
- return ( double*)(( char*) obj+offset);
6724
+ return ( uint8_t*)(( char*) obj+offset);
6646
6725
  }
6647
- static inline double RandomRutherfordData_get_upper_val(const RandomRutherfordData restrict obj){
6726
+ static inline double RandomExponentialData_get__sin_rot_s(const RandomExponentialData restrict obj){
6648
6727
  int64_t offset=0;
6649
6728
  offset+=8;
6650
6729
  return *( double*)(( char*) obj+offset);
6651
6730
  }
6652
- static inline void RandomRutherfordData_set_upper_val(RandomRutherfordData restrict obj, double value){
6731
+ static inline void RandomExponentialData_set__sin_rot_s(RandomExponentialData restrict obj, double value){
6653
6732
  int64_t offset=0;
6654
6733
  offset+=8;
6655
6734
  *( double*)(( char*) obj+offset)=value;
6656
6735
  }
6657
- static inline double* RandomRutherfordData_getp_upper_val(RandomRutherfordData restrict obj){
6736
+ static inline double* RandomExponentialData_getp__sin_rot_s(RandomExponentialData restrict obj){
6658
6737
  int64_t offset=0;
6659
6738
  offset+=8;
6660
6739
  return ( double*)(( char*) obj+offset);
6661
6740
  }
6662
- static inline double RandomRutherfordData_get_A(const RandomRutherfordData restrict obj){
6741
+ static inline double RandomExponentialData_get__cos_rot_s(const RandomExponentialData restrict obj){
6663
6742
  int64_t offset=0;
6664
6743
  offset+=16;
6665
6744
  return *( double*)(( char*) obj+offset);
6666
6745
  }
6667
- static inline void RandomRutherfordData_set_A(RandomRutherfordData restrict obj, double value){
6746
+ static inline void RandomExponentialData_set__cos_rot_s(RandomExponentialData restrict obj, double value){
6668
6747
  int64_t offset=0;
6669
6748
  offset+=16;
6670
6749
  *( double*)(( char*) obj+offset)=value;
6671
6750
  }
6672
- static inline double* RandomRutherfordData_getp_A(RandomRutherfordData restrict obj){
6751
+ static inline double* RandomExponentialData_getp__cos_rot_s(RandomExponentialData restrict obj){
6673
6752
  int64_t offset=0;
6674
6753
  offset+=16;
6675
6754
  return ( double*)(( char*) obj+offset);
6676
6755
  }
6677
- static inline double RandomRutherfordData_get_B(const RandomRutherfordData restrict obj){
6756
+ static inline double RandomExponentialData_get__shift_x(const RandomExponentialData restrict obj){
6678
6757
  int64_t offset=0;
6679
6758
  offset+=24;
6680
6759
  return *( double*)(( char*) obj+offset);
6681
6760
  }
6682
- static inline void RandomRutherfordData_set_B(RandomRutherfordData restrict obj, double value){
6761
+ static inline void RandomExponentialData_set__shift_x(RandomExponentialData restrict obj, double value){
6683
6762
  int64_t offset=0;
6684
6763
  offset+=24;
6685
6764
  *( double*)(( char*) obj+offset)=value;
6686
6765
  }
6687
- static inline double* RandomRutherfordData_getp_B(RandomRutherfordData restrict obj){
6766
+ static inline double* RandomExponentialData_getp__shift_x(RandomExponentialData restrict obj){
6688
6767
  int64_t offset=0;
6689
6768
  offset+=24;
6690
6769
  return ( double*)(( char*) obj+offset);
6691
6770
  }
6692
- static inline int8_t RandomRutherfordData_get_Newton_iterations(const RandomRutherfordData restrict obj){
6771
+ static inline double RandomExponentialData_get__shift_y(const RandomExponentialData restrict obj){
6693
6772
  int64_t offset=0;
6694
6773
  offset+=32;
6695
- return *(( int8_t*) obj+offset);
6774
+ return *( double*)(( char*) obj+offset);
6696
6775
  }
6697
- static inline void RandomRutherfordData_set_Newton_iterations(RandomRutherfordData restrict obj, int8_t value){
6776
+ static inline void RandomExponentialData_set__shift_y(RandomExponentialData restrict obj, double value){
6698
6777
  int64_t offset=0;
6699
6778
  offset+=32;
6700
- *(( int8_t*) obj+offset)=value;
6779
+ *( double*)(( char*) obj+offset)=value;
6701
6780
  }
6702
- static inline int8_t* RandomRutherfordData_getp_Newton_iterations(RandomRutherfordData restrict obj){
6781
+ static inline double* RandomExponentialData_getp__shift_y(RandomExponentialData restrict obj){
6703
6782
  int64_t offset=0;
6704
6783
  offset+=32;
6705
- return ( int8_t*)(( char*) obj+offset);
6784
+ return ( double*)(( char*) obj+offset);
6706
6785
  }
6707
- static inline double RandomRutherfordData_get__sin_rot_s(const RandomRutherfordData restrict obj){
6786
+ static inline double RandomExponentialData_get__shift_s(const RandomExponentialData restrict obj){
6708
6787
  int64_t offset=0;
6709
6788
  offset+=40;
6710
6789
  return *( double*)(( char*) obj+offset);
6711
6790
  }
6712
- static inline void RandomRutherfordData_set__sin_rot_s(RandomRutherfordData restrict obj, double value){
6791
+ static inline void RandomExponentialData_set__shift_s(RandomExponentialData restrict obj, double value){
6713
6792
  int64_t offset=0;
6714
6793
  offset+=40;
6715
6794
  *( double*)(( char*) obj+offset)=value;
6716
6795
  }
6717
- static inline double* RandomRutherfordData_getp__sin_rot_s(RandomRutherfordData restrict obj){
6796
+ static inline double* RandomExponentialData_getp__shift_s(RandomExponentialData restrict obj){
6718
6797
  int64_t offset=0;
6719
6798
  offset+=40;
6720
6799
  return ( double*)(( char*) obj+offset);
6721
6800
  }
6722
- static inline double RandomRutherfordData_get__cos_rot_s(const RandomRutherfordData restrict obj){
6801
+ static inline double RandomExponentialData_get__rot_x_rad(const RandomExponentialData restrict obj){
6723
6802
  int64_t offset=0;
6724
6803
  offset+=48;
6725
6804
  return *( double*)(( char*) obj+offset);
6726
6805
  }
6727
- static inline void RandomRutherfordData_set__cos_rot_s(RandomRutherfordData restrict obj, double value){
6806
+ static inline void RandomExponentialData_set__rot_x_rad(RandomExponentialData restrict obj, double value){
6728
6807
  int64_t offset=0;
6729
6808
  offset+=48;
6730
6809
  *( double*)(( char*) obj+offset)=value;
6731
6810
  }
6732
- static inline double* RandomRutherfordData_getp__cos_rot_s(RandomRutherfordData restrict obj){
6811
+ static inline double* RandomExponentialData_getp__rot_x_rad(RandomExponentialData restrict obj){
6733
6812
  int64_t offset=0;
6734
6813
  offset+=48;
6735
6814
  return ( double*)(( char*) obj+offset);
6736
6815
  }
6737
- static inline double RandomRutherfordData_get__shift_x(const RandomRutherfordData restrict obj){
6816
+ static inline double RandomExponentialData_get__rot_y_rad(const RandomExponentialData restrict obj){
6738
6817
  int64_t offset=0;
6739
6818
  offset+=56;
6740
6819
  return *( double*)(( char*) obj+offset);
6741
6820
  }
6742
- static inline void RandomRutherfordData_set__shift_x(RandomRutherfordData restrict obj, double value){
6821
+ static inline void RandomExponentialData_set__rot_y_rad(RandomExponentialData restrict obj, double value){
6743
6822
  int64_t offset=0;
6744
6823
  offset+=56;
6745
6824
  *( double*)(( char*) obj+offset)=value;
6746
6825
  }
6747
- static inline double* RandomRutherfordData_getp__shift_x(RandomRutherfordData restrict obj){
6826
+ static inline double* RandomExponentialData_getp__rot_y_rad(RandomExponentialData restrict obj){
6748
6827
  int64_t offset=0;
6749
6828
  offset+=56;
6750
6829
  return ( double*)(( char*) obj+offset);
6751
6830
  }
6752
- static inline double RandomRutherfordData_get__shift_y(const RandomRutherfordData restrict obj){
6831
+ static inline double RandomExponentialData_get__rot_s_rad_no_frame(const RandomExponentialData restrict obj){
6753
6832
  int64_t offset=0;
6754
6833
  offset+=64;
6755
6834
  return *( double*)(( char*) obj+offset);
6756
6835
  }
6757
- static inline void RandomRutherfordData_set__shift_y(RandomRutherfordData restrict obj, double value){
6836
+ static inline void RandomExponentialData_set__rot_s_rad_no_frame(RandomExponentialData restrict obj, double value){
6758
6837
  int64_t offset=0;
6759
6838
  offset+=64;
6760
6839
  *( double*)(( char*) obj+offset)=value;
6761
6840
  }
6762
- static inline double* RandomRutherfordData_getp__shift_y(RandomRutherfordData restrict obj){
6841
+ static inline double* RandomExponentialData_getp__rot_s_rad_no_frame(RandomExponentialData restrict obj){
6763
6842
  int64_t offset=0;
6764
6843
  offset+=64;
6765
6844
  return ( double*)(( char*) obj+offset);
6766
6845
  }
6767
- static inline double RandomRutherfordData_get__shift_s(const RandomRutherfordData restrict obj){
6846
+ static inline double RandomExponentialData_get_rot_shift_anchor(const RandomExponentialData restrict obj){
6768
6847
  int64_t offset=0;
6769
6848
  offset+=72;
6770
6849
  return *( double*)(( char*) obj+offset);
6771
6850
  }
6772
- static inline void RandomRutherfordData_set__shift_s(RandomRutherfordData restrict obj, double value){
6851
+ static inline void RandomExponentialData_set_rot_shift_anchor(RandomExponentialData restrict obj, double value){
6773
6852
  int64_t offset=0;
6774
6853
  offset+=72;
6775
6854
  *( double*)(( char*) obj+offset)=value;
6776
6855
  }
6777
- static inline double* RandomRutherfordData_getp__shift_s(RandomRutherfordData restrict obj){
6856
+ static inline double* RandomExponentialData_getp_rot_shift_anchor(RandomExponentialData restrict obj){
6778
6857
  int64_t offset=0;
6779
6858
  offset+=72;
6780
6859
  return ( double*)(( char*) obj+offset);
6781
- }
6782
- static inline double RandomRutherfordData_get__rot_x_rad(const RandomRutherfordData restrict obj){
6783
- int64_t offset=0;
6784
- offset+=80;
6785
- return *( double*)(( char*) obj+offset);
6786
- }
6787
- static inline void RandomRutherfordData_set__rot_x_rad(RandomRutherfordData restrict obj, double value){
6788
- int64_t offset=0;
6789
- offset+=80;
6790
- *( double*)(( char*) obj+offset)=value;
6791
- }
6792
- static inline double* RandomRutherfordData_getp__rot_x_rad(RandomRutherfordData restrict obj){
6793
- int64_t offset=0;
6794
- offset+=80;
6795
- return ( double*)(( char*) obj+offset);
6796
- }
6797
- static inline double RandomRutherfordData_get__rot_y_rad(const RandomRutherfordData restrict obj){
6798
- int64_t offset=0;
6799
- offset+=88;
6800
- return *( double*)(( char*) obj+offset);
6801
- }
6802
- static inline void RandomRutherfordData_set__rot_y_rad(RandomRutherfordData restrict obj, double value){
6803
- int64_t offset=0;
6804
- offset+=88;
6805
- *( double*)(( char*) obj+offset)=value;
6806
- }
6807
- static inline double* RandomRutherfordData_getp__rot_y_rad(RandomRutherfordData restrict obj){
6808
- int64_t offset=0;
6809
- offset+=88;
6810
- return ( double*)(( char*) obj+offset);
6811
- }
6812
- static inline double RandomRutherfordData_get__rot_s_rad_no_frame(const RandomRutherfordData restrict obj){
6813
- int64_t offset=0;
6814
- offset+=96;
6815
- return *( double*)(( char*) obj+offset);
6816
- }
6817
- static inline void RandomRutherfordData_set__rot_s_rad_no_frame(RandomRutherfordData restrict obj, double value){
6818
- int64_t offset=0;
6819
- offset+=96;
6820
- *( double*)(( char*) obj+offset)=value;
6821
- }
6822
- static inline double* RandomRutherfordData_getp__rot_s_rad_no_frame(RandomRutherfordData restrict obj){
6823
- int64_t offset=0;
6824
- offset+=96;
6825
- return ( double*)(( char*) obj+offset);
6826
- }
6827
- static inline double RandomRutherfordData_get_rot_shift_anchor(const RandomRutherfordData restrict obj){
6828
- int64_t offset=0;
6829
- offset+=104;
6830
- return *( double*)(( char*) obj+offset);
6831
- }
6832
- static inline void RandomRutherfordData_set_rot_shift_anchor(RandomRutherfordData restrict obj, double value){
6833
- int64_t offset=0;
6834
- offset+=104;
6835
- *( double*)(( char*) obj+offset)=value;
6836
- }
6837
- static inline double* RandomRutherfordData_getp_rot_shift_anchor(RandomRutherfordData restrict obj){
6838
- int64_t offset=0;
6839
- offset+=104;
6840
- 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/rutherford.h>
7071
+ #include <random/random_src/exponential.h>
7053
7072
 
7054
7073
 
7055
- void sample_ruth(
7056
- RandomRutherfordData el,
7074
+ void sample_exp(
7075
+ RandomExponentialData 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
- RandomRutherford_sample(el, &lpart, samples, n_samples_per_seed);
7123
+ RandomExponential_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;