@@ -82,10 +82,8 @@ void markov::Initialization(string FilePrefix) {
82
82
83
83
// /==== initialize observable =======================//
84
84
for (auto &g : Weight.Groups ) {
85
- polar p = polar ();
86
- p.fill (1.0e-10 );
87
- Polar.push_back (p);
88
- PolarStatic.push_back (1.0e-10 );
85
+ Polar[g.ID ].fill (1.0e-10 );
86
+ PolarStatic[g.ID ] = 1.0e-10 ;
89
87
}
90
88
// /=== Do all kinds of test =======================//
91
89
Weight.StaticTest ();
@@ -104,24 +102,24 @@ void markov::AdjustGroupReWeight() {
104
102
void markov::Measure () {
105
103
double MCWeight = fabs (Var.CurrGroup ->Weight ) * Var.CurrGroup ->ReWeight ;
106
104
double WeightFactor = Var.CurrGroup ->Weight / MCWeight;
105
+
107
106
Polar[Var.CurrGroup ->ID ][Var.CurrExtMomBin ] += WeightFactor;
108
107
PolarStatic[Var.CurrGroup ->ID ] += WeightFactor;
109
108
};
110
109
111
110
void markov::SaveToFile () {
112
- for (int i = 0 ; i < Polar. size (); i++ ) {
111
+ for (auto &id : Para. GroupID ) {
113
112
ofstream PolarFile;
114
- string FileName =
115
- tfm::format (" group%d_pid%d.dat" , Weight.Groups [i].ID , Para.PID );
113
+ string FileName = tfm::format (" group%d_pid%d.dat" , id, Para.PID );
116
114
PolarFile.open (FileName, ios::out | ios::trunc );
117
115
if (PolarFile.is_open ()) {
118
116
PolarFile << tfm::format (
119
- " #PID: %d, rs:%.3f, Beta: %.3f, Group: %d, Step: %d\n " , Para. PID ,
120
- Para.Rs , Para.Beta , Weight. Groups [i]. ID , Para.Counter );
117
+ " #PID: %d, Type:%d, rs:%.3f, Beta: %.3f, Group: %d, Step: %d\n " ,
118
+ Para.PID , Para.ObsType , Para. Rs , Para. Beta , id , Para.Counter );
121
119
122
- for (int j = 0 ; j < Polar[i ].size (); j++)
120
+ for (int j = 0 ; j < Polar[id ].size (); j++)
123
121
PolarFile << tfm::format (" %13.6f\t %13.6f\n " , Var.ExtMomTable [j][0 ],
124
- Polar[i ][j]);
122
+ Polar[id ][j]);
125
123
PolarFile.close ();
126
124
} else {
127
125
LOG_WARNING (" Polarization for PID " << Para.PID << " fails to save!" );
@@ -132,12 +130,12 @@ void markov::SaveToFile() {
132
130
string FileName = tfm::format (" output%d.dat" , Para.PID );
133
131
StaticPolarFile.open (FileName, ios::out | ios::trunc );
134
132
if (StaticPolarFile.is_open ()) {
135
- for (int i = 0 ; i < PolarStatic. size (); i++ ) {
133
+ for (auto &id : Para. GroupID ) {
136
134
StaticPolarFile << tfm::format (
137
- " PID:%-4d Group:%-4d rs:%-.3f "
135
+ " PID:%-4d Type:%-2d Group:%-4d rs:%-.3f "
138
136
" Beta:%-.3f Lambda:%-.3f Polar: % 13.6f\n " ,
139
- Para.PID , Weight. Groups [i]. ID , Para.Rs , Para.Beta , Para.Mass2 ,
140
- PolarStatic[i ]);
137
+ Para.PID , Para. ObsType , id , Para.Rs , Para.Beta , Para.Mass2 ,
138
+ PolarStatic[id ]);
141
139
}
142
140
StaticPolarFile.close ();
143
141
} else {
@@ -233,9 +231,6 @@ void markov::ChangeTau() {
233
231
Var.Tau [TauIndex] = NewTau;
234
232
Var.Tau [TauIndex + 1 ] = NewTau;
235
233
236
- // if (Var.CurrGroup->ID == 1 && Para.Counter > 100000)
237
- // cout << Var.CurrGroup->ID << endl;
238
-
239
234
Weight.ChangeTau (*Var.CurrGroup , TauIndex);
240
235
double NewWeight = Weight.GetNewWeight (*Var.CurrGroup );
241
236
double R = Prop * fabs (NewWeight) / fabs (Var.CurrGroup ->Weight );
@@ -252,22 +247,26 @@ void markov::ChangeTau() {
252
247
};
253
248
254
249
void markov::ChangeMomentum () {
255
- static momentum CurrMom;
256
250
int LoopIndex = Random.irn (0 , Var.CurrGroup ->LoopNum - 1 );
257
251
Proposed[CHANGE_MOM][Var.CurrGroup ->ID ]++;
258
252
259
- COPYFROMTO (Var.LoopMom [LoopIndex], CurrMom);
260
-
261
253
double Prop;
262
254
int NewExtMomBin;
255
+ static momentum CurrMom;
256
+
257
+ // COPYFROMTO(Var.LoopMom[LoopIndex], CurrMom);
258
+ CurrMom = Var.LoopMom [LoopIndex];
259
+
263
260
if (LoopIndex == 0 ) {
264
261
Prop = ShiftExtK (Var.CurrExtMomBin , NewExtMomBin);
265
- COPYFROMTO (Var.ExtMomTable [NewExtMomBin], Var.LoopMom [LoopIndex]);
262
+ // COPYFROMTO(Var.ExtMomTable[NewExtMomBin], Var.LoopMom[LoopIndex]);
263
+ Var.LoopMom [LoopIndex] = Var.ExtMomTable [NewExtMomBin];
266
264
} else {
267
265
Prop = ShiftK (CurrMom, Var.LoopMom [LoopIndex]);
268
266
}
269
- if (LoopIndex == 0 && norm2 (Var.LoopMom [LoopIndex]) > Para.MaxExtMom ) {
270
- COPYFROMTO (CurrMom, Var.LoopMom [LoopIndex]);
267
+ if (LoopIndex == 0 && Var.LoopMom [LoopIndex].norm () > Para.MaxExtMom ) {
268
+ Var.LoopMom [LoopIndex] = CurrMom;
269
+ // COPYFROMTO(CurrMom, Var.LoopMom[LoopIndex]);
271
270
return ;
272
271
}
273
272
@@ -280,7 +279,8 @@ void markov::ChangeMomentum() {
280
279
if (LoopIndex == 0 )
281
280
Var.CurrExtMomBin = NewExtMomBin;
282
281
} else {
283
- COPYFROMTO (CurrMom, Var.LoopMom [LoopIndex]);
282
+ Var.LoopMom [LoopIndex] = CurrMom;
283
+ // COPYFROMTO(CurrMom, Var.LoopMom[LoopIndex]);
284
284
Weight.RejectChange (*Var.CurrGroup );
285
285
}
286
286
};
@@ -332,7 +332,7 @@ double markov::RemoveOldK(momentum &OldMom) {
332
332
double dK = Para.Kf / sqrt (Para.Beta ) / 4.0 ;
333
333
if (dK > Para.Kf / 2 )
334
334
dK = Para.Kf / 2 ; // to avoid dK>Kf situation
335
- double KAmp = norm2 ( OldMom);
335
+ double KAmp = OldMom. norm ( );
336
336
if (KAmp < Para.Kf - dK || KAmp > Para.Kf + dK)
337
337
// Kf-dK<KAmp<Kf+dK
338
338
return 0.0 ;
@@ -357,13 +357,14 @@ double markov::ShiftK(const momentum &OldMom, momentum &NewMom) {
357
357
double x = Random.urn ();
358
358
double Prop;
359
359
if (x < 1.0 / 3 ) {
360
- COPYFROMTO (OldMom, NewMom);
360
+ // COPYFROMTO(OldMom, NewMom);
361
+ NewMom = OldMom;
361
362
int dir = Random.irn (0 , D - 1 );
362
363
double STEP = Para.Beta > 1.0 ? Para.Kf / Para.Beta * 3.0 : Para.Kf ;
363
364
NewMom[dir] += STEP * (Random.urn () - 0.5 );
364
365
Prop = 1.0 ;
365
366
} else if (x < 2.0 / 3 ) {
366
- double k = norm2 ( OldMom);
367
+ double k = OldMom. norm ( );
367
368
if (k < EPS)
368
369
Prop = 0.0 ;
369
370
0 commit comments