14Double_t PBremsstrahlung::Pol1(Double_t z, Double_t par1, Double_t
par2)
const {
19Double_t PBremsstrahlung::Pol2(Double_t z, Double_t par1, Double_t
par2, Double_t par3)
const {
21 return par1+
par2*x+par3*x*x;
25Double_t PBremsstrahlung::Pol3(Double_t z, Double_t par1, Double_t
par2, Double_t par3, Double_t par4)
28 return par1+
par2*x+par3*x*x+par4*x*x*x;
32Double_t PBremsstrahlung::DLines(Double_t x, Double_t par0, Double_t par1, Double_t
par2, Double_t par3)
const {
36 m = (par1-par0)/(0.65);
41 m = (
par2-par1)/(0.3);
45 m = (par3-
par2)/(1.3);
52Double_t PBremsstrahlung::AGauss(Double_t x, Double_t *
par)
const
56 if(
par[0] == 0)
return 0;
59 result =
par[0]*exp(-0.5*pow((x-
par[2])/(TMath::Max(1.e-10,((1.0 +
par[3])*
par[1]))),2));
61 result =
par[0]*exp(-0.5*pow((x-
par[2])/(TMath::Max(1.e-10,((1.0 -
par[3])*
par[1]))),2));
79 Fatal(
"PBremsstrahlung",
"The model (%s) should be bound to CHANNELS only", de);
89 Fatal(
"PBremsstrahlung",
"Only 3 body decay");
91 dilepton_position = -1;
92 neutron_position = -1;
93 for (
int i=1; i<=3; i++) {
94 if (
makeStaticData()->IsParticle(tid[i],
"dilepton")) dilepton_position = i;
95 if (
makeStaticData()->IsParticle(tid[i],
"n")) neutron_position = i;
98 if (dilepton_position == -1) {
99 Fatal(
"PBremsstrahlung",
"No dilepton found");
102 if (neutron_position != -1) {
135 Warning(
"Init",
"Dilepton not found");
141 Warning(
"Init",
"Parent not found");
159Double_t PBremsstrahlung::EvalSM(Double_t x, Double_t, Double_t, Double_t)
const {
162 Double_t b0=0, b1=0, b2=0, b3=0;
164 if(neutron_position > -1) {
167 kinLim = TMath::Sqrt(pow((mn + mp),2)+2*mp* p2_energy)-(mn+mp);
172 b0 = Pol2(p2_energy, 24.4393, -7.58498, 0.819536);
173 b1 = Pol2(p2_energy, -33.4414, 14.8302, -1.75497);
174 b2 = Pol2(p2_energy, 4.13174, -5.99696, 1.95849);
175 b3 = Pol2(p2_energy, 0.942944, 1.5077, -0.207335);
178 b0 = Pol2(p2_energy, 5.40183, 4.9095, -1.06483);
179 b1 = Pol2(p2_energy, 27.9443, -25.8368, 4.04411);
180 b2 = Pol2(p2_energy, 0.859852, -1.2709, 0.437889);
181 b3 = Pol2(p2_energy, 1.3053, 0.788249, -0.109513);
183 if(model == gN1520) {
184 b0 = Pol2(p2_energy, 41.7807, -22.0668, 2.91033);
185 b1 = Pol2(p2_energy, -41.2204, 22.8689, -3.01134);
186 b2 = Pol2(p2_energy, 6.69874, -9.94155, 3.39074);
187 b3 = Pol2(p2_energy, 0.795684, 1.37388, -0.172581);
191 b0 = Pol2(p2_energy,7.65485, 3.43015, -0.811125);
192 b1 = Pol2(p2_energy, 14.7932, -15.5442, 2.47197);
193 b2 = Pol2(p2_energy, 0.379128, -0.559714, 0.193903);
194 b3 = Pol2(p2_energy, 1.60404, 0.522244, -0.0678947);
196 Error(
"EvalSM",
"Invalid Bremsstrahlung model!");
203 return (1./1000000.)*pow(fabs(M - kinLim),b3)/fabs((b2*exp(b0*M+b1*M*M)));
206 kinLim = TMath::Sqrt(pow((mp + mp),2)+2*mp* p2_energy)-(mp+mp);
208 Error(
"EvalSM",
"M>kinLim");
212 b0 = Pol2(p2_energy, 27.4811, -10.6609, 1.25601);
213 b1 = Pol2(p2_energy, -38.7574, 19.8781, -2.52863);
214 b2 = Pol2(p2_energy, 9.29954, -13.6681, 4.60585);
215 b3 = Pol2(p2_energy, 1.85104, 0.518799, -0.0646308);
218 b0 = Pol2(p2_energy, 2.13375, 7.31236, -1.44497);
219 b1 = Pol2(p2_energy, 49.7263, -40.9453, 6.24139);
220 b2 = Pol2(p2_energy, 1.93576, -2.96657, 1.02646);
221 b3 = Pol2(p2_energy, 0.621623, 1.22859, -0.160213);
223 if(model == gN1520) {
224 b0 = Pol2(p2_energy, 43.3482, -24.036, 3.24966);
225 b1 = Pol2(p2_energy, -43.0502, 26.0555, -3.58266);
226 b2 = Pol2(p2_energy, 8.37618, -12.8982, 4.7091);
227 b3 = Pol2(p2_energy, 1.47027, 0.557303, -0.0442349);
230 b0 = Pol2(p2_energy, 6.2699, 3.50518, -0.808666);
231 b1 = Pol2(p2_energy, 30.9533, -25.3514, 3.81197);
232 b2 = Pol2(p2_energy, 2.07252, -3.04563, 1.02282);
233 b3 = Pol2(p2_energy, 2.69517, -0.512592, 0.119903);
235 Error(
"EvalSM",
"Invalid Bremsstrahlung model!");
241 return (1./1000000.)*pow(fabs(M - kinLim),b3)/fabs((b2*exp(b0*M+b1*M*M)));
248 if (graph)
return graph->Eval(x);
249 if (graph2d)
return graph2d->Interpolate(x,p2_energy);
255 Double_t b0=0, b1=0, b2=0, b3=0;
259 if(neutron_position > -1) {
262 kinLim = TMath::Sqrt(pow((mn + mp),2)+2*mp* p2_energy)-(mn+mp);
267 b0 = Pol2(p2_energy, 16.9411, -5.93276, 0.7807);
268 b1 = Pol2(p2_energy, -33.19, 18.8141, -2.91396);
269 b2 = Pol2(p2_energy, 0.0654566, -0.102335, 0.0592914);
270 b3 = Pol2(p2_energy, 1.99472, 0.447733, -0.0727639);
273 b0 = Pol2(p2_energy, 20.240726, -7.9911127, 0.94649249);
274 b1 = Pol2(p2_energy, -27.103907, 14.986975, -2.3138011);
275 b2 = Pol2(p2_energy, 0.057434153, -0.12646526, 0.07317695);
276 b3 = Pol2( p2_energy, 4.2753172, -1.5160941, 0.33231404);
279 b0 = Pol2( p2_energy, 12.370295, -2.379364, 0.045619611);
280 b1 = Pol2( p2_energy, -10.650187, 2.7560029, -0.16295315);
281 b2 = Pol2( p2_energy, 0.041419424, -0.069788419, 0.038073331);
282 b3 = Pol2( p2_energy, 1.9655238, 0.43345186, -0.04576372);
289 if(model == cFsiVmd) {
290 b0 = DLines(p2_energy, 11.73, 9.873, 6.253, 7.787);
291 b1 = DLines(p2_energy, -7.589, -8.468, -30.1, -11.75);
292 b2 = DLines(p2_energy, 0.01877, 0.03573, 0.007521, 0.2954);
293 b3 = DLines(p2_energy, 1.595, 2.317, 11.43, 7.124);
295 if(p2_energy > 1.9) {
296 parA[0] = Pol2(p2_energy, -0.65, 0.09, 0.116);
297 parA[1] = Pol1(p2_energy, -0.008866, 0.00908);
298 parA[2] = Pol1(p2_energy, 0.7693, 0.004265);
299 parA[3] = Pol1(p2_energy, 0.5262, -0.2392);
301 parB[0] = Pol2(p2_energy, -0.7279, 0.4763, -0.04907);
302 parB[1] = Pol1(p2_energy, -0.1483, 0.09447);
303 parB[2] = Pol1(p2_energy, 0.7329, 0.009148);
304 parB[3] = Pol1(p2_energy, 0.08683, -0.2189);
306 for(Int_t i=0; i<4; i++) {
311 return (1./1000000.)*pow(fabs(M - kinLim),b3)/(b2*exp(b0*M+b1*M*M)) + AGauss(p2_energy,parA) + AGauss(p2_energy,parB);
313 Error(
"Eval",
"Invalid Bremsstrahlung model!");
322 return (1./1000000.)*pow(fabs(M - kinLim),b3)/(b2*exp(b0*M+b1*M*M));
327 kinLim = TMath::Sqrt(pow((mp + mp),2)+2*mp* p2_energy)-(mp+mp);
344 b0 = Pol2(p2_energy, 28.572, -15.518, 2.41939);
345 b1 = Pol2(p2_energy, -61.4211, 43.4459, -7.57627);
346 b2 = Pol2(p2_energy, 0.226395, -0.510502, 0.35198);
347 b3 = Pol2(p2_energy, 4.2694, -1.5697, 0.338622);
350 b0 = Pol2(p2_energy, 17.5256, -5.47771, 0.389949);
351 b1 = Pol2(p2_energy, -31.254, 18.2722, -2.80298);
352 b2 = Pol2(p2_energy, 0.0928247, -0.188658, 0.102528);
353 b3 = Pol2(p2_energy, 4.63276, -1.19151, 0.210233);
356 b0 = Pol2(p2_energy, 16.1204, -6.72895, 0.927332);
357 b1 = Pol2(p2_energy, -13.0257, 4.86514, -0.614537);
358 b2 = Pol2(p2_energy, 0.0421482, -0.0873232, 0.0551647);
359 b3 = Pol2(p2_energy, 2.48228, 0.668239, -0.0493283);
366 if(model == cFsiVmd) {
368 Error(
"Eval",
"Invalid Bremsstrahlung model!");
377 return (1./1000000.)*pow(fabs(M - kinLim),b3)/(b2*exp(b0*M+b1*M*M));
385 Double_t
m1 = p1->M();
386 Double_t m2 = p2->M();
388 Double_t mq = parent->M();
391 p2_energy = (mq*mq-
m1*
m1-m2*m2-2*
m1*m2)/(2*m2);
394 p2_energy = (mq*mq-
m1*
m1-m2*m2-2*
m1*m2)/(2*
m1);
396 Double_t val =
Eval(dilepton->M());
406 tmp.Boost(-p1->BoostVector());
407 p2_energy = tmp.
KE();
412 bin->SetTF1((TF1*)
this);
420 dilepton->SetM(bin->GetRandom());
ClassImp(PBeamLineSimulation) PBeamLineSimulation
#define BREMS_SHYAM_MOSEL
PStaticData * makeStaticData()
PDistribution * Clone(const char *delme=NULL) const
Double_t EvalPar(const Double_t *x, const Double_t *params)
void SetMode(Char_t mode)
PBremsstrahlung(const Char_t *id, const Char_t *de, Int_t key)
Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
PParticle * GetParticle(const Char_t *pflag=NULL)
virtual Double_t KE() const
double GetParticleMass(const int &id)
void GetDecayModeByKey(const int, int *n)