///////////////////////////////////////////////////////////////////////////////
//  Pluto Thermal Source Class
//
//  This is a static class containing thermal-source functions
//
//                             Author:  R. Holzmann & M.A. Kagarlis
//                             Written: 16.06.00
//
// Ref 1:   Siemens and Rasmussen, PRL 42 (1979) 880 (Note the typos in Eq. 1,
//          corrected e.g. in Reisdorf at al., NP A612 (1997) 512)
//
///////////////////////////////////////////////////////////////////////////////

#include <math.h>
#include <TMath.h>
#include "PThermal.h"
#include "PData.h"

ClassImp(PThermal)

double  PThermal::thermal_unstable_width_default = 0.001;
double *PThermal::thermal_unstable_width = &PThermal::thermal_unstable_width_default;

double PThermal::dNdE(double *x, double *par) {
    // thermal source + blast (Ref 1)

    double E  = x[0];
    double M  = par[0];
    double T1 = par[1];
    double T2 = par[2];
    double f  = par[3];
    double beta = par[4];
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    if (beta < 0.01 || beta > 0.99) {   // simple thermal source
	val = f*exp(-E/T1);
	if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);  
    } else {                            // thermal + blast
	double gamma = 1./sqrt(1.-beta*beta);
	double alpha = beta*gamma*p/T1;
	val = f*exp(-gamma*E/T1)
	    * ((gamma+T1/E)*sinh(alpha)/alpha -T1/E*cosh(alpha));
	if (f < 1. && T2 > 0.) {
	    alpha = beta*gamma*p/T2;
	    val += (1.-f)*exp(-gamma*E/T2)
		* ((gamma+T2/E)*sinh(alpha)/alpha -T2/E*cosh(alpha));
	}
    }

    // Another definition of f is given if dNdE is normalized to 1:
    // val -> val/[M*M*T*K2(M/T)]  (See e.g. NP A612 (1997) 512) 

    return 100000.*p*E*val;
}

double PThermal::dNdE1(double *x, double *par) {
    // thermal source + blast (Ref 1) with E*sqrt(p) weight

    double E  = x[0];
    double M  = par[0];
    double T1 = par[1];
    double T2 = par[2];
    double f  = par[3];
    double beta = par[4];
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    if (beta < 0.01 || beta > 0.99) {   // simple thermal source
	val = f*exp(-E/T1);
	if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);    
    } else {                            // thermal + blast   
	double gamma = 1./sqrt(1.-beta*beta);
	double alpha = beta*gamma*p/T1;
	val = f*exp(-gamma*E/T1)
	    * ((gamma+T1/E)*sinh(alpha)/alpha -T1/E*cosh(alpha));
	if (f < 1. && T2 > 0.) {
	    alpha = beta*gamma*p/T2;
	    val += (1.-f)*exp(-gamma*E/T2)
		* ((gamma+T2/E)*sinh(alpha)/alpha -T2/E*cosh(alpha));
	}
    }
  
    return 100000.*sqrt(p)*E*val;
}

double PThermal::dNdE2(double *x, double *par) {
    // thermal source + blast (Ref 1) with E*p**3 weight

    double E  = x[0];
    double M  = par[0];
    double T1 = par[1];
    double T2 = par[2];
    double f  = par[3];
    double beta = par[4];
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    if (beta < 0.01 || beta > 0.99) {   // simple thermal source
	val = f*exp(-E/T1);
	if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);    
    } else {                            // thermal + blast    
	double gamma = 1./sqrt(1.-beta*beta);
	double alpha = beta*gamma*p/T1;
	val = f*exp(-gamma*E/T1)
	    * ((gamma+T1/E)*sinh(alpha)/alpha -T1/E*cosh(alpha));
	if (f < 1. && T2 > 0.) {
	    alpha = beta*gamma*p/T2;
	    val += (1.-f)*exp(-gamma*E/T2)
		* ((gamma+T2/E)*sinh(alpha)/alpha -T2/E*cosh(alpha));
	}
    }
  
    return 100000.*p*p*p*E*val;
}

double PThermal::dNdE3(double *x, double *par) {
    // thermal source with E*p**n weight

    double E  = x[0];
    double M  = par[0];
    double T1 = par[1];
    double T2 = par[2];
    double f  = par[3];
    double n  = par[4];
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    val = f*exp(-E/T1);
    if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);
    
    return 1000000.*pow(p,n)*val;
}

double PThermal::d2NdEdM(double *x, double *par) {
    // thermal source + blast (Ref 1)  x  Breit-Wigner

    double T1 = par[0];
    double T2 = par[1];
    double f  = par[2];
    double beta = par[3];
    int id  = int(par[4]+0.001);
    int idx = int(par[5]+0.001); 

    double val;
    double E = x[0];
    double M = x[1];

    if (int(par[6]+0.001) == 1) {
	//option=rotate
	E = (x[0]*0.5 + 2.*x[1])*0.5;
	M = (2.*x[1] - x[0]*0.5)*0.5;
    }

    double p2 = E*E - M*M;

    if (p2 <= 0.) return 0.;
    
    double p = sqrt(p2);
  
    if (beta < 0.01 || beta > 0.99) {   // simple thermal source
	val = f*exp(-E/T1);
	if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);	
    } else {                            // thermal + blast	
	double gamma = 1./sqrt(1.-beta*beta);
	double alpha = beta*gamma*p/T1;
	val = f*exp(-gamma*E/T1)
	    * ((gamma+T1/E)*sinh(alpha)/alpha -T1/E*cosh(alpha));
	
	if (f < 1. && T2 > 0.) {
	    alpha = beta*gamma*p/T2;
	    val += (1.-f)*exp(-gamma*E/T2)
		* ((gamma+T2/E)*sinh(alpha)/alpha -T2/E*cosh(alpha));
	}
    }
    
    //if (makeStaticData()->GetParticleTotalWidth(id) > *thermal_unstable_width) 
    val *= makeDynamicData()->GetParticleTotalWeight(M,id,idx);
  
    // Another definition of f is given if d2NdEdM is normalized to 1
    
    return 100000.*p*E*val;
}

double PThermal::d2NdEdM1(double *x, double *par) {
    // thermal source + blast (Ref 1) with E*sqrt(p) weight  x  Breit-Wigner

    double E  = x[0];
    double M  = x[1];
    double T1 = par[0];
    double T2 = par[1];
    double f  = par[2];
    double beta = par[3];
    int id  = int(par[4]+0.001);
    int idx = int(par[5]+0.001);
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    if (beta < 0.01 || beta > 0.99) {   // simple thermal source
	val = f*exp(-E/T1);
	if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);    
    } else {                            // thermal + blast   
	double gamma = 1./sqrt(1.-beta*beta);
	double alpha = beta*gamma*p/T1;
	val = f*exp(-gamma*E/T1)
	    * ((gamma+T1/E)*sinh(alpha)/alpha -T1/E*cosh(alpha));
	if (f < 1. && T2 > 0.) {
	    alpha = beta*gamma*p/T2;
	    val += (1.-f)*exp(-gamma*E/T2)
		* ((gamma+T2/E)*sinh(alpha)/alpha -T2/E*cosh(alpha));
	}
    }
 
    //if (makeStaticData()->GetParticleTotalWidth(id) > *thermal_unstable_width) 
    val *= makeDynamicData()->GetParticleTotalWeight(M,id,idx);
    // else
    //       val *= makeDynamicData()->GetParticleTotalWeight(M,id);
    return 100000.*sqrt(p)*E*val;
}

double PThermal::d2NdEdM2(double *x, double *par) {
    // thermal source + blast (Ref 1) with E*p**3 weight  x  Breit-Wigner

    double E  = x[0];
    double M  = x[1];
    double T1 = par[0];
    double T2 = par[1];
    double f  = par[2];
    double beta = par[3];
    int id  = int(par[4]+0.001);
    int idx = int(par[5]+0.001);
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    if (beta < 0.01 || beta > 0.99) {   // simple thermal source
	val = f*exp(-E/T1);
	if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);    
    } else {                            // thermal + blast   
	double gamma = 1./sqrt(1.-beta*beta);
	double alpha = beta*gamma*p/T1;
	val = f*exp(-gamma*E/T1)
	    * ((gamma+T1/E)*sinh(alpha)/alpha -T1/E*cosh(alpha));
	if (f < 1. && T2 > 0.) {
	    alpha = beta*gamma*p/T2;
	    val += (1.-f)*exp(-gamma*E/T2)
		* ((gamma+T2/E)*sinh(alpha)/alpha -T2/E*cosh(alpha));
	}
    }
  
    //if (makeStaticData()->GetParticleTotalWidth(id) > *thermal_unstable_width) 
    val *= makeDynamicData()->GetParticleTotalWeight(M,id,idx);
    //  else
    //       val *= makeDynamicData()->GetParticleTotalWeight(M,id);
    return 100000.*p*p*p*E*val;
}

double PThermal::d2NdEdM3(double *x, double *par) {
    // thermal source with E*p**n weight  x  Breit-Wigner

    double E  = x[0];
    double M  = x[1];
    double T1 = par[0];
    double T2 = par[1];
    double f  = par[2];
    double n  = par[3];
    int id  = int(par[4]+0.001);
    int idx = int(par[5]+0.001);
    double val;
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p = sqrt(p2);
  
    val = f*exp(-E/T1);
    if (f < 1. && T2 > 0.) val += (1.-f)*exp(-E/T2);
    
    if (makeStaticData()->GetParticleTotalWidth(id) > *thermal_unstable_width) 
	val *= makeDynamicData()->GetParticleTotalWeight(M,id,idx);
    //  else
    //       val *= makeDynamicData()->GetParticleTotalWeight(M,id);
    return 100000.*E*pow(p,n)*val;
}

double PThermal::d2NdEdTheta(double *x, double *par) {
    // thermal source with E*p**n weight with T=T(theta_cm) and n=n(theta_cm)

    double E  = x[0];
    double T1 = par[0];
    double T2 = par[1];
    double n1 = par[2];
    double n2 = par[3];
    double M  = par[4];
    double p2 = E*E - M*M;
    if (p2 <= 0.) return 0.;
    double p  = sqrt(p2);
    double A2 = par[5];
    double A4 = par[6];
    double cost  = cos(x[1]);
    double cost2 = cost*cost;
    double sint  = sin(x[1]);
    double val   = sint*(1. + (A2 + A4*cost2)*cost2);
    //double Theta = 57.29577951*x[1];
    //double Thetar = Theta<90. ? Theta : 180.-Theta;
    double T = T1 + (T2-T1)*sint;  // interpolate T and n with angle
    double n = n1 + (n2-n1)*sint;
    //double T = T1 + (T2-T1)*Thetar/90.;
    //double n = n1 + (n2-n1)*Thetar/90.;

    double norm1 = IntThermal(M,T,int(TMath::Floor(n)));
    double norm2 = IntThermal(M,T,int(TMath::Ceil(n)));
    double frac  = n-TMath::Floor(n);  // fractional exponent for interpolation
    double norm  = norm1*pow(norm2/norm1,frac);

    // Must be normalized to keep an instrinsically flat angular distribution
    // if summed over all momenta.
    //
    return val*E*pow(p,n)*exp(-E/T)/norm;
}


double PThermal::dNdTheta(double *x, double *par) {  
    // polar angular distribution

    double theta = x[0];
    double A2 = par[0];
    double A4 = par[1];
    double cost  = cos(theta);
    double cost2 = cost*cost;
    return sin(theta)*(1. + A2*cost2 + A4*cost2*cost2);
}

double PThermal::dNdy(double *x, double *par) {  
    // rapidity distribution

    double y = x[0];
    double m = par[0];
    double T = par[1];
    if (T<=0. || m<=0.) return 0.;
    double chi = T/(m*cosh(y));
    return m*m*T*(1.+2.*chi*(1.+chi))*exp(-1./chi);
}

double PThermal::dNdMt(double *x, double *par) {  
    // transverse-mass distribution

    double mt = x[0];
    double m  = par[0];
    double T1 = par[1];
    double T2 = par[2];
    double f  = par[3];
    if (T1<=0.0 || mt<=m) return 0.;
    Double_t val = f*TMath::BesselK1(mt/T1)/T1;
    if (f < 1. && T2 > 0.) val += (1.-f)*TMath::BesselK1(mt/T2)/T2;
    return mt*mt*val;
}

double PThermal::dNdPt(double *x, double *par) {  
    // transverse-momentum distribution

    double pt = x[0];
    double m  = par[0];
    double mt = sqrt(pt*pt + m*m);
    return dNdMt(x,par)*pt/mt;
}


double PThermal::IntThermal(double m, double T, int n) {
    //
    // return Integral|m,inf| E*p**n exp(-E/T)  n=0,1,2,3,4,5,6,7 
    //
    double sum = 1;

    switch (n) {
    case 0:
	sum = exp(-m/T)*T*(m+T);
	break;
    case 1:
	sum = m*m*T*TMath::BesselK(2,m/T);
	break;
    case 2:
	sum = 2.*exp(-m/T)*pow(T,2.)*(m*m+3.*T*(m+T));
	break;
    case 3:
	sum = 3.*m*pow(m*T,2.)*TMath::BesselK(3,m/T);
	break;
    case 4:
	sum = 8.*exp(-m/T)*pow(T,3.)*(m*m*(m+6.*T)+15.*T*T*(m+T));
	break;
    case 5:
	sum = 15.*m*pow(m*T,3.)*TMath::BesselK(4,m/T);
	break;
    case 6:
	sum = 48.*exp(-m/T)*pow(T,4.)*(m*m*m*(m+10.*T)+45.*m*m*T*T+105.*T*T*T*(m+T));
	break;
    case 7:
	sum = 105.*m*pow(m*T,4.)*TMath::BesselK(5,m/T);
	break;
    default:
	sum = 1;
    }
    return sum;
}



Double_t PThermal::mtScaleFactor(Int_t id, const Float_t T) {
    //
    // Compute the yield enhancement factor due to thermal weighting of a
    // resonance with id at temperature T.
    // 
    // Factor = 1/B(M0) x Integral[M=0,Inf](B(M)*BW(M))/Integral[M=0,Inf](BW(M)) 
    //
    // where BW(M) is the bare resonance shape and B(M) is the integral of the
    // Boltzmann distribution: B(M) = Integral[E=M,Inf](exp(-E/T)*E*sqrt(E^2-M^2))
    //                              = M^2*T*BesselK(2,M/T)
    // 
    // Tool function copied from PData (IF)

    Double_t val = 0.;
    if (T <= 0.) return val;
    Double_t M0  = makeStaticData()->GetParticleMass(id);  // pole mass
    Double_t BM0 = M0*M0*T*TMath::BesselK(2,M0/T); // normalization
    Double_t I1  = 0.;
    Double_t I2  = 0.;
    Double_t M;
    for (Int_t i=1; i<1000; i++) {  // do a rudimentary integration from 0-5 GeV
	M = float(i)/200;
	//	I1 += BreitWigner(id,M)*M*M*T*TMath::BesselK(2,M/T);
	//	I2 += BreitWigner(id,M);
	I1 += makeDynamicData()->GetParticleTotalWeight(M,id)*M*M*T*TMath::BesselK(2,M/T);
	I2 += makeDynamicData()->GetParticleTotalWeight(M,id);
    }
    val = I1/(I2*BM0);
    printf("Factor = %f\n\n",val);
    return val;
}







 PThermal.cc:1
 PThermal.cc:2
 PThermal.cc:3
 PThermal.cc:4
 PThermal.cc:5
 PThermal.cc:6
 PThermal.cc:7
 PThermal.cc:8
 PThermal.cc:9
 PThermal.cc:10
 PThermal.cc:11
 PThermal.cc:12
 PThermal.cc:13
 PThermal.cc:14
 PThermal.cc:15
 PThermal.cc:16
 PThermal.cc:17
 PThermal.cc:18
 PThermal.cc:19
 PThermal.cc:20
 PThermal.cc:21
 PThermal.cc:22
 PThermal.cc:23
 PThermal.cc:24
 PThermal.cc:25
 PThermal.cc:26
 PThermal.cc:27
 PThermal.cc:28
 PThermal.cc:29
 PThermal.cc:30
 PThermal.cc:31
 PThermal.cc:32
 PThermal.cc:33
 PThermal.cc:34
 PThermal.cc:35
 PThermal.cc:36
 PThermal.cc:37
 PThermal.cc:38
 PThermal.cc:39
 PThermal.cc:40
 PThermal.cc:41
 PThermal.cc:42
 PThermal.cc:43
 PThermal.cc:44
 PThermal.cc:45
 PThermal.cc:46
 PThermal.cc:47
 PThermal.cc:48
 PThermal.cc:49
 PThermal.cc:50
 PThermal.cc:51
 PThermal.cc:52
 PThermal.cc:53
 PThermal.cc:54
 PThermal.cc:55
 PThermal.cc:56
 PThermal.cc:57
 PThermal.cc:58
 PThermal.cc:59
 PThermal.cc:60
 PThermal.cc:61
 PThermal.cc:62
 PThermal.cc:63
 PThermal.cc:64
 PThermal.cc:65
 PThermal.cc:66
 PThermal.cc:67
 PThermal.cc:68
 PThermal.cc:69
 PThermal.cc:70
 PThermal.cc:71
 PThermal.cc:72
 PThermal.cc:73
 PThermal.cc:74
 PThermal.cc:75
 PThermal.cc:76
 PThermal.cc:77
 PThermal.cc:78
 PThermal.cc:79
 PThermal.cc:80
 PThermal.cc:81
 PThermal.cc:82
 PThermal.cc:83
 PThermal.cc:84
 PThermal.cc:85
 PThermal.cc:86
 PThermal.cc:87
 PThermal.cc:88
 PThermal.cc:89
 PThermal.cc:90
 PThermal.cc:91
 PThermal.cc:92
 PThermal.cc:93
 PThermal.cc:94
 PThermal.cc:95
 PThermal.cc:96
 PThermal.cc:97
 PThermal.cc:98
 PThermal.cc:99
 PThermal.cc:100
 PThermal.cc:101
 PThermal.cc:102
 PThermal.cc:103
 PThermal.cc:104
 PThermal.cc:105
 PThermal.cc:106
 PThermal.cc:107
 PThermal.cc:108
 PThermal.cc:109
 PThermal.cc:110
 PThermal.cc:111
 PThermal.cc:112
 PThermal.cc:113
 PThermal.cc:114
 PThermal.cc:115
 PThermal.cc:116
 PThermal.cc:117
 PThermal.cc:118
 PThermal.cc:119
 PThermal.cc:120
 PThermal.cc:121
 PThermal.cc:122
 PThermal.cc:123
 PThermal.cc:124
 PThermal.cc:125
 PThermal.cc:126
 PThermal.cc:127
 PThermal.cc:128
 PThermal.cc:129
 PThermal.cc:130
 PThermal.cc:131
 PThermal.cc:132
 PThermal.cc:133
 PThermal.cc:134
 PThermal.cc:135
 PThermal.cc:136
 PThermal.cc:137
 PThermal.cc:138
 PThermal.cc:139
 PThermal.cc:140
 PThermal.cc:141
 PThermal.cc:142
 PThermal.cc:143
 PThermal.cc:144
 PThermal.cc:145
 PThermal.cc:146
 PThermal.cc:147
 PThermal.cc:148
 PThermal.cc:149
 PThermal.cc:150
 PThermal.cc:151
 PThermal.cc:152
 PThermal.cc:153
 PThermal.cc:154
 PThermal.cc:155
 PThermal.cc:156
 PThermal.cc:157
 PThermal.cc:158
 PThermal.cc:159
 PThermal.cc:160
 PThermal.cc:161
 PThermal.cc:162
 PThermal.cc:163
 PThermal.cc:164
 PThermal.cc:165
 PThermal.cc:166
 PThermal.cc:167
 PThermal.cc:168
 PThermal.cc:169
 PThermal.cc:170
 PThermal.cc:171
 PThermal.cc:172
 PThermal.cc:173
 PThermal.cc:174
 PThermal.cc:175
 PThermal.cc:176
 PThermal.cc:177
 PThermal.cc:178
 PThermal.cc:179
 PThermal.cc:180
 PThermal.cc:181
 PThermal.cc:182
 PThermal.cc:183
 PThermal.cc:184
 PThermal.cc:185
 PThermal.cc:186
 PThermal.cc:187
 PThermal.cc:188
 PThermal.cc:189
 PThermal.cc:190
 PThermal.cc:191
 PThermal.cc:192
 PThermal.cc:193
 PThermal.cc:194
 PThermal.cc:195
 PThermal.cc:196
 PThermal.cc:197
 PThermal.cc:198
 PThermal.cc:199
 PThermal.cc:200
 PThermal.cc:201
 PThermal.cc:202
 PThermal.cc:203
 PThermal.cc:204
 PThermal.cc:205
 PThermal.cc:206
 PThermal.cc:207
 PThermal.cc:208
 PThermal.cc:209
 PThermal.cc:210
 PThermal.cc:211
 PThermal.cc:212
 PThermal.cc:213
 PThermal.cc:214
 PThermal.cc:215
 PThermal.cc:216
 PThermal.cc:217
 PThermal.cc:218
 PThermal.cc:219
 PThermal.cc:220
 PThermal.cc:221
 PThermal.cc:222
 PThermal.cc:223
 PThermal.cc:224
 PThermal.cc:225
 PThermal.cc:226
 PThermal.cc:227
 PThermal.cc:228
 PThermal.cc:229
 PThermal.cc:230
 PThermal.cc:231
 PThermal.cc:232
 PThermal.cc:233
 PThermal.cc:234
 PThermal.cc:235
 PThermal.cc:236
 PThermal.cc:237
 PThermal.cc:238
 PThermal.cc:239
 PThermal.cc:240
 PThermal.cc:241
 PThermal.cc:242
 PThermal.cc:243
 PThermal.cc:244
 PThermal.cc:245
 PThermal.cc:246
 PThermal.cc:247
 PThermal.cc:248
 PThermal.cc:249
 PThermal.cc:250
 PThermal.cc:251
 PThermal.cc:252
 PThermal.cc:253
 PThermal.cc:254
 PThermal.cc:255
 PThermal.cc:256
 PThermal.cc:257
 PThermal.cc:258
 PThermal.cc:259
 PThermal.cc:260
 PThermal.cc:261
 PThermal.cc:262
 PThermal.cc:263
 PThermal.cc:264
 PThermal.cc:265
 PThermal.cc:266
 PThermal.cc:267
 PThermal.cc:268
 PThermal.cc:269
 PThermal.cc:270
 PThermal.cc:271
 PThermal.cc:272
 PThermal.cc:273
 PThermal.cc:274
 PThermal.cc:275
 PThermal.cc:276
 PThermal.cc:277
 PThermal.cc:278
 PThermal.cc:279
 PThermal.cc:280
 PThermal.cc:281
 PThermal.cc:282
 PThermal.cc:283
 PThermal.cc:284
 PThermal.cc:285
 PThermal.cc:286
 PThermal.cc:287
 PThermal.cc:288
 PThermal.cc:289
 PThermal.cc:290
 PThermal.cc:291
 PThermal.cc:292
 PThermal.cc:293
 PThermal.cc:294
 PThermal.cc:295
 PThermal.cc:296
 PThermal.cc:297
 PThermal.cc:298
 PThermal.cc:299
 PThermal.cc:300
 PThermal.cc:301
 PThermal.cc:302
 PThermal.cc:303
 PThermal.cc:304
 PThermal.cc:305
 PThermal.cc:306
 PThermal.cc:307
 PThermal.cc:308
 PThermal.cc:309
 PThermal.cc:310
 PThermal.cc:311
 PThermal.cc:312
 PThermal.cc:313
 PThermal.cc:314
 PThermal.cc:315
 PThermal.cc:316
 PThermal.cc:317
 PThermal.cc:318
 PThermal.cc:319
 PThermal.cc:320
 PThermal.cc:321
 PThermal.cc:322
 PThermal.cc:323
 PThermal.cc:324
 PThermal.cc:325
 PThermal.cc:326
 PThermal.cc:327
 PThermal.cc:328
 PThermal.cc:329
 PThermal.cc:330
 PThermal.cc:331
 PThermal.cc:332
 PThermal.cc:333
 PThermal.cc:334
 PThermal.cc:335
 PThermal.cc:336
 PThermal.cc:337
 PThermal.cc:338
 PThermal.cc:339
 PThermal.cc:340
 PThermal.cc:341
 PThermal.cc:342
 PThermal.cc:343
 PThermal.cc:344
 PThermal.cc:345
 PThermal.cc:346
 PThermal.cc:347
 PThermal.cc:348
 PThermal.cc:349
 PThermal.cc:350
 PThermal.cc:351
 PThermal.cc:352
 PThermal.cc:353
 PThermal.cc:354
 PThermal.cc:355
 PThermal.cc:356
 PThermal.cc:357
 PThermal.cc:358
 PThermal.cc:359
 PThermal.cc:360
 PThermal.cc:361
 PThermal.cc:362
 PThermal.cc:363
 PThermal.cc:364
 PThermal.cc:365
 PThermal.cc:366
 PThermal.cc:367
 PThermal.cc:368
 PThermal.cc:369
 PThermal.cc:370
 PThermal.cc:371
 PThermal.cc:372
 PThermal.cc:373
 PThermal.cc:374
 PThermal.cc:375
 PThermal.cc:376
 PThermal.cc:377
 PThermal.cc:378
 PThermal.cc:379
 PThermal.cc:380
 PThermal.cc:381
 PThermal.cc:382
 PThermal.cc:383
 PThermal.cc:384
 PThermal.cc:385
 PThermal.cc:386
 PThermal.cc:387
 PThermal.cc:388
 PThermal.cc:389
 PThermal.cc:390
 PThermal.cc:391
 PThermal.cc:392
 PThermal.cc:393
 PThermal.cc:394
 PThermal.cc:395
 PThermal.cc:396
 PThermal.cc:397
 PThermal.cc:398
 PThermal.cc:399
 PThermal.cc:400
 PThermal.cc:401
 PThermal.cc:402
 PThermal.cc:403
 PThermal.cc:404
 PThermal.cc:405
 PThermal.cc:406
 PThermal.cc:407
 PThermal.cc:408
 PThermal.cc:409
 PThermal.cc:410
 PThermal.cc:411
 PThermal.cc:412
 PThermal.cc:413
 PThermal.cc:414
 PThermal.cc:415
 PThermal.cc:416
 PThermal.cc:417
 PThermal.cc:418
 PThermal.cc:419
 PThermal.cc:420
 PThermal.cc:421
 PThermal.cc:422
 PThermal.cc:423
 PThermal.cc:424
 PThermal.cc:425
 PThermal.cc:426
 PThermal.cc:427
 PThermal.cc:428
 PThermal.cc:429
 PThermal.cc:430
 PThermal.cc:431
 PThermal.cc:432
 PThermal.cc:433
 PThermal.cc:434
 PThermal.cc:435
 PThermal.cc:436
 PThermal.cc:437
 PThermal.cc:438
 PThermal.cc:439
 PThermal.cc:440
 PThermal.cc:441
 PThermal.cc:442
 PThermal.cc:443
 PThermal.cc:444
 PThermal.cc:445
 PThermal.cc:446
 PThermal.cc:447
 PThermal.cc:448
 PThermal.cc:449
 PThermal.cc:450
 PThermal.cc:451
 PThermal.cc:452
 PThermal.cc:453
 PThermal.cc:454