1 | /* Tracy-2 |
---|
2 | |
---|
3 | J. Bengtsson, CBP, LBL 1990 - 1994 Pascal version |
---|
4 | SLS, PSI 1995 - 1997 |
---|
5 | M. Boege SLS, PSI 1998 C translation |
---|
6 | L. Nadolski SOLEIL 2002 Link to NAFF, Radia field maps |
---|
7 | J. Bengtsson NSLS-II, BNL 2004 - |
---|
8 | J. Zhang SOLEIL 2010 ADD SOLEIL PARTS IN TRACY 2.7 |
---|
9 | */ |
---|
10 | |
---|
11 | /**** Protypes ****/ |
---|
12 | void SetErr2(long seed,double fac); //set error for lattice with two half quadrupoles |
---|
13 | void SetErr(long seed,double fac); //set error for lattice with one full quadrupoles |
---|
14 | void InducedAmplitude(long spos); |
---|
15 | void Hfonction(long pos, double dP); |
---|
16 | //void Hcofonction(long pos, double dP,Vector2 H); |
---|
17 | void Hcofonction(long pos, double dP); |
---|
18 | void Get_Disp_dp(void); |
---|
19 | void read_corrh(void); |
---|
20 | void set_vectorcod(Vector codvector[], double dP); |
---|
21 | void SetDecapole(void); |
---|
22 | |
---|
23 | /* Tracking */ |
---|
24 | void Phase(const char *phasefile,double x,double xp,double y, double yp,double energy, double ctau, long Nbtour); |
---|
25 | void Phase2(long pos, double x,double xp,double y, double yp,double energy, double ctau, |
---|
26 | long Nbtour); |
---|
27 | void PhasePoly(long pos, double x0,double px0, double z0, double pz0, double delta0, |
---|
28 | double ctau0, long Nbtour); |
---|
29 | void Check_Trac(double x, double px, double y, double py, double dp); |
---|
30 | void PhasePortrait(double x0,double px0,double z0, double pz0, double delta0, double ctau, |
---|
31 | double end, long Nb, long Nbtour, int num); |
---|
32 | void PhasePortrait2(long pos,double x0,double px0,double z0, double pz0, double delta0, double ctau, |
---|
33 | double end, long Nb, long Nbtour, int num); |
---|
34 | void Multipole_thicksext(const char *fic_hcorr, const char *fic_vcorr, const char *fic_skew); |
---|
35 | void Multipole_thinsext(const char *fic_hcorr, const char *fic_vcorr, const char *fic_skew); |
---|
36 | void MomentumAcceptance(char *MomAccFile,long deb, long fin, double ep_min, |
---|
37 | double ep_max, long nstepp, double em_min, double em_max, |
---|
38 | long nstepm, long nturn, double zmax); |
---|
39 | void MomentumAcceptance_p(char *MomAccFile,long deb, long fin, double ep_min, |
---|
40 | double ep_max, long nstepp, double em_min, double em_max, |
---|
41 | long nstepm, long nturn, double zmax, int numprocs, int myid); |
---|
42 | |
---|
43 | void Trac_Tab(double x, double px, double y, double py, double dp, |
---|
44 | long nmax, long pos, long *lastn, long *lastpos, FILE *outf1, double Tx[][NTURN]); |
---|
45 | void SetSkewQuad(void); |
---|
46 | void TracCO(double x, double px, double y, double py, double dp, double ctau, |
---|
47 | long nmax, long pos, long *lastn, long *lastpos, FILE *outf1); |
---|
48 | void Dyna(long Nbx, long Nbz, long Nbtour, double xmax, double zmax, |
---|
49 | double energy, bool diffusion); |
---|
50 | |
---|
51 | /* Frequency map analysis */ |
---|
52 | void TunesShiftWithAmplitude(const char *NudxFile, const char *NudzFile, long Nbx, |
---|
53 | long Nbz, long Nbtour, double xmax, double zmax, double energy); |
---|
54 | void TunesShiftWithEnergy(const char *NudpFile,long Nb, long Nbtour, double emax); |
---|
55 | //void fmap(long Nbx, long Nbz, long Nbtour, double xmax, double zmax, |
---|
56 | // double energy, bool diffusion, bool matlab); |
---|
57 | //void fmapdp(long Nbx, long Nbe, long Nbtour, double xmax, double emax, |
---|
58 | // double z, bool diffusion, bool matlab); |
---|
59 | void fmap(const char *FmapFile, long Nbx, long Nbz, long Nbtour, double xmax, double zmax, |
---|
60 | double energy, bool diffusion); |
---|
61 | void fmap_p(const char *FmapFile, long Nbx, long Nbz, long Nbtour, double xmax, double zmax, |
---|
62 | double energy, bool diffusion, int numprocs, int myid); |
---|
63 | void fmapdp(const char *FmapdpFile, long Nbx, long Nbe, long Nbtour, double xmax, double emax, |
---|
64 | double z, bool diffusion); |
---|
65 | void fmapdp_p(const char *FmapdpFile, long Nbx, long Nbe, long Nbtour, double xmax, double emax, |
---|
66 | double z, bool diffusion, int numprocs, int myid); |
---|
67 | void Nu_Naff(void); |
---|
68 | |
---|
69 | |
---|
70 | /* Vacuum chamber */ |
---|
71 | void ReadCh(const char *AperFile); |
---|
72 | |
---|
73 | void Enveloppe(double x, double px, double y, double py, |
---|
74 | double dp, double nturn); |
---|
75 | |
---|
76 | |
---|
77 | /* Longitudinal Hamiltonian*/ |
---|
78 | void PhaseLongitudinalHamiltonien(void); |
---|
79 | void PassA(double *phi, double delta0, double step); |
---|
80 | void PassB(double phi0, double *delta, double step); |
---|
81 | double Hsynchrotron(double phi, double delta); |
---|
82 | |
---|
83 | /* Miscelleneous */ |
---|
84 | void Enveloppe2(double x, double px, double y, double py, |
---|
85 | double dp, double nturn); |
---|
86 | void Phase3(long pos, double x,double px,double y, double py,double energy, |
---|
87 | double ctau, long Nbtour); |
---|
88 | double EnergySmall(double *X, double irho); |
---|
89 | double EnergyDrift(double *X); |
---|
90 | void getA4antidamping(); |
---|
91 | void fmapfull(long Nbx, long Nbz, long Nbtour, double xmax, double zmax, |
---|
92 | double energy, bool diffusion); |
---|
93 | void spectrum(long Nbx, long Nbz, long Nbtour, double xmax, double zmax, |
---|
94 | double energy, bool diffusion); |
---|
95 | |
---|
96 | /* coupling*/ |
---|
97 | void Coupling_Edwards_Teng(void); |
---|
98 | |
---|
99 | /* get and set RF voltage */ |
---|
100 | double get_RFVoltage(const int Fnum); |
---|
101 | |
---|
102 | void set_RFVoltage(const int Fnum, const double V_RF); |
---|
103 | |
---|
104 | /* close orbit correction */ |
---|
105 | void CODCorrect(const char *hcorr_file,const char *vcorr_file,int n_orbit,int nwh,int nwv); |
---|
106 | |
---|
107 | /* Read multipole errors from a file for soleil*/ |
---|
108 | void ReadFieldErr(const char *FieldErrorFile); |
---|
109 | |
---|
110 | void AddFieldErrors(const char *name,const char *keywrd, const double r0, |
---|
111 | const int n, const double Bn, const double An); |
---|
112 | |
---|
113 | void AddFieldValues_type(const int N, const char *keywrd, const double r0, |
---|
114 | const int n, const double Bn, const double An); |
---|
115 | |
---|
116 | void AddFieldValues_fam(const int Fnum, const char *keywrd, const double r0, |
---|
117 | const int n, const double Bn, const double An); |
---|
118 | |
---|
119 | void Add_bnL_sys_elem(const int Fnum, const int Knum, const char *keywrd, |
---|
120 | const int n, const double bnL, const double anL); |
---|
121 | |
---|
122 | void AddCorrQtErr_fam(char const *fic, const int Fnum, const double conv, const char *keywrd, const double r0, |
---|
123 | const int n, const double Bn, const double An); |
---|
124 | |
---|
125 | /* Read the setting of skew quadrupoles from a file; for soleil lattice */ |
---|
126 | void ReadVirtualSkewQuad(const char *VirtualSkewQuadFile); |
---|
127 | |
---|
128 | /* fit tunes for soleil lattice, in which each quadrupole is cut into two parts*/ |
---|
129 | void FitTune4(long qf1,long qf2, long qd1, long qd2, double nux, double nuy); |
---|
130 | //print the coordinates at lattice elements |
---|
131 | void PrintTrack(const char *TrackFile, double x, double px,double y,double py, |
---|
132 | double delta, double ctau, long int nmax); |
---|
133 | |
---|
134 | |
---|
135 | |
---|
136 | |
---|