StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Tauola.cxx
1 #include <fstream>
2 #include <cstring>
3 #include <vector>
4 #include "Log.h"
5 #include "Tauola.h"
6 #include "TauolaEvent.h"
7 
8 namespace Tauolapp
9 {
10 
11 int Tauola::m_pdg_id = 15;
12 int Tauola::m_firstDecayMode = 0;
13 int Tauola::m_secondDecayMode = 0;
14 bool Tauola::m_rad = true;
15 double Tauola::m_rad_cut_off = 0.001;
16 double Tauola::m_iniphy = 0.1;
17 double Tauola::m_higgs_scalar_pseudoscalar_mix = M_PI/4;
18 int Tauola::m_higgs_scalar_pseudoscalar_pdg = 35;
19 int Tauola::m_helPlus = 0;
20 int Tauola::m_helMinus = 0;
21 double Tauola::m_wtEW = 0.0;
22 double Tauola::m_wtEW0 = 0.0;
23 double Tauola::table11A[NS1][NCOS][4][4] = {{{{0.0}}}};
24 double Tauola::table1A [NS1][NCOS][4][4] = {{{{0.0}}}};
25 double Tauola::table2A [NS1][NCOS][4][4] = {{{{0.0}}}};
26 double Tauola::wtable11A[NS1][NCOS] = {{0.0}};
27 double Tauola::wtable1A [NS1][NCOS] = {{0.0}};
28 double Tauola::wtable2A [NS1][NCOS] = {{0.0}};
29 double Tauola::w0table11A[NS1][NCOS] = {{0.0}};
30 double Tauola::w0table1A [NS1][NCOS] = {{0.0}};
31 double Tauola::w0table2A [NS1][NCOS] = {{0.0}};
32 
33 double Tauola::table11B[NS2][NCOS][4][4] = {{{{0.0}}}};
34 double Tauola::table1B [NS2][NCOS][4][4] = {{{{0.0}}}};
35 double Tauola::table2B [NS2][NCOS][4][4] = {{{{0.0}}}};
36 double Tauola::wtable11B[NS2][NCOS] = {{0.0}};
37 double Tauola::wtable1B [NS2][NCOS] = {{0.0}};
38 double Tauola::wtable2B [NS2][NCOS] = {{0.0}};
39 double Tauola::w0table11B[NS2][NCOS] = {{0.0}};
40 double Tauola::w0table1B [NS2][NCOS] = {{0.0}};
41 double Tauola::w0table2B [NS2][NCOS] = {{0.0}};
42 
43 double Tauola::table11C[NS3][NCOS][4][4] = {{{{0.0}}}};
44 double Tauola::table1C [NS3][NCOS][4][4] = {{{{0.0}}}};
45 double Tauola::table2C [NS3][NCOS][4][4] = {{{{0.0}}}};
46 double Tauola::wtable11C[NS3][NCOS] = {{0.0}};
47 double Tauola::wtable1C [NS3][NCOS] = {{0.0}};
48 double Tauola::wtable2C [NS3][NCOS] = {{0.0}};
49 double Tauola::w0table11C[NS3][NCOS] = {{0.0}};
50 double Tauola::w0table1C [NS3][NCOS] = {{0.0}};
51 double Tauola::w0table2C [NS3][NCOS] = {{0.0}};
52 
53 double Tauola::sminA = 0;
54 double Tauola::smaxA = 0;
55 
56 double Tauola::sminB = 0;
57 double Tauola::smaxB = 0;
58 
59 double Tauola::sminC = 0;
60 double Tauola::smaxC = 0;
61 
62 int Tauola::ion[3] = {0};
63 double Tauola::tau_lifetime = .08711;
64 double Tauola::momentum_conservation_threshold = 0.1;
65 
66 Tauola::Particles Tauola::spin_correlation;
67 
68 Tauola::MomentumUnits Tauola::momentumUnit = Tauola::DEFAULT_MOMENTUM;
69 Tauola::LengthUnits Tauola::lengthUnit = Tauola::DEFAULT_LENGTH;
70 
71 bool Tauola::m_is_using_decay_one = false;
72 double Tauola::m_decay_one_polarization[3] = {0};
73 void (*Tauola::m_decay_one_boost_routine)(TauolaParticle*,TauolaParticle*) = NULL;
74 
75 int Tauola::buf_incoming_pdg_id = 0;
76 int Tauola::buf_outgoing_pdg_id = 0;
77 double Tauola::buf_invariant_mass_squared = -1.;
78 double Tauola::buf_cosTheta = 0.;
79 
80 double Tauola::buf_R[4][4] = {{0.0}}; //density matrix
81 
82 double (*Tauola::randomDouble)() = Tauola::defaultRandomGenerator;
83 void (*Tauola::redefineTauPlusProperties)(TauolaParticle *) = defaultRedPlus;
84 void (*Tauola::redefineTauMinusProperties)(TauolaParticle *) = defaultRedMinus;
85 
86 /**************************************************************/
87 void Tauola::setNewCurrents(int mode)
88 {
89  inirchl_(&mode);
90 }
91 
92 double Tauola::defaultRandomGenerator(){
93  return rand()*1./RAND_MAX;
94 }
95 
96 void Tauola::setRandomGenerator(double (*gen)()){
97  if(gen==NULL) randomDouble = defaultRandomGenerator;
98  else randomDouble = gen;
99 }
100 
101 void Tauola::defaultRedPlus(TauolaParticle *tau) {}
102 void Tauola::defaultRedMinus(TauolaParticle *tau) {}
103 
104 void Tauola::setRedefineTauMinus( void (*fun)(TauolaParticle *) ){
105  redefineTauMinusProperties=fun;
106 }
107 
108 void Tauola::setRedefineTauPlus ( void (*fun)(TauolaParticle *) ){
109  redefineTauPlusProperties=fun;
110 }
111 
112 void Tauola::getBornKinematics(int *incoming_pdg_id, int *outgoing_pdg_id, double *invariant_mass_squared,double *cosTheta){
113  *incoming_pdg_id = buf_incoming_pdg_id;
114  *outgoing_pdg_id = buf_outgoing_pdg_id;
115  *invariant_mass_squared = buf_invariant_mass_squared;
116  *cosTheta = buf_cosTheta;
117  // m_R[0][0] to be added in next step;
118 }
119 
120 void Tauola::setUnits(MomentumUnits m, LengthUnits l){
121  Tauola::momentumUnit = m;
122  Tauola::lengthUnit = l;
123 }
124 
125 void Tauola::setTauLifetime(double t){
126  tau_lifetime = t;
127 }
128 
130  printf("\n");
131  printf(" *************************************\n");
132  printf(" * TAUOLA C++ Interface v1.1.5 *\n");
133  printf(" *-----------------------------------*\n");
134  printf(" * *\n");
135  printf(" * (c) Nadia Davidson, (1,2) *\n");
136  printf(" * Gizo Nanava, (3) *\n");
137  printf(" * Tomasz Przedzinski,(4) *\n");
138  printf(" * Elzbieta Richter-Was,(2,4) *\n");
139  printf(" * Zbigniew Was (2,5) *\n");
140  printf(" * *\n");
141  printf(" * 1) Unimelb, Melbourne, Australia *\n");
142  printf(" * 2) INP, Krakow, Poland *\n");
143  printf(" * 3) University Bonn, Germany *\n");
144  printf(" * 4) UJ, Krakow, Poland *\n");
145  printf(" * 5) CERN, Geneva, Switzerland *\n");
146  printf(" *************************************\n");
147 
148  // Turn on all spin correlations
149  spin_correlation.setAll(true);
150 
151  // Ininitalize tauola-fortran
152  f_interface_tauolaInitialize(m_pdg_id,m_firstDecayMode,
153  m_secondDecayMode,m_rad,
154  m_rad_cut_off, m_iniphy);
155 
156  //---------------------------------------------------------------------------
157  // Initialize SANC tables
158  //---------------------------------------------------------------------------
159  cout<<"Reading SANC input files."<<endl;
160 
161  ifstream f("table1-1.txt");
162 
163  if(!f.is_open()){
164  cout<<"File 'table1-1.txt' missing... skipped."<<endl;
165  }
166  else{
167  string buf;
168 
169  cout<<"Reading file 'table1-1.txt'..."<<endl;
170 
171  int dbuf1,dbuf2,dbuf3,dbufcos;
172  f>>buf>>dbuf1>>dbuf2>>dbuf3>>dbufcos;
173 
174  // Check table sizes
175  if(dbuf1!=NS1 || dbuf2!=NS2 || dbuf3!=NS3 || dbufcos!=NCOS) {
176  cout<<"mismatched NS1= "<<dbuf1 <<" <--> "<<NS1<<endl;
177  cout<<" NS2= "<<dbuf2 <<" <--> "<<NS2<<endl;
178  cout<<" NS3= "<<dbuf3 <<" <--> "<<NS3<<endl;
179  cout<<" NCOS= "<<dbufcos<<" <--> "<<NCOS<<endl;
180  return;
181  }
182 
183  double buf1,buf2,buf3,buf4,buf5,buf6;
184  f>>buf>>buf1>>buf2>>buf3>>buf4>>buf5>>buf6;
185 
186  // Set ranges
187  if(sminA==0.0){
188  sminA=buf1;
189  smaxA=buf2;
190  sminB=buf3;
191  smaxB=buf4;
192  sminC=buf5;
193  smaxC=buf6;
194  }
195 
196  // Check ranges
197  if(buf1!=sminA || buf2!=smaxA || buf3!=sminB || buf4!=smaxB || buf5!=sminC || buf6!=smaxC) {
198  cout<<"mismatched sminA= "<<buf1<<" <--> "<<sminA<<endl;
199  cout<<" smaxA= "<<buf2<<" <--> "<<smaxA<<endl;
200  cout<<" sminB= "<<buf3<<" <--> "<<sminB<<endl;
201  cout<<" smaxB= "<<buf4<<" <--> "<<smaxB<<endl;
202  cout<<" sminC= "<<buf5<<" <--> "<<sminC<<endl;
203  cout<<" smaxC= "<<buf6<<" <--> "<<smaxC<<endl;
204  return;
205  }
206 
207  // Print out header
208  while(!f.eof()){
209  char head[255];
210  f.getline(head,255);
211  if(strcmp(head,"BeginRange1")==0) break;
212  cout<<head<<endl;
213  }
214 
215  // Read table
216  for (int i=0;i<NS1;i++){
217  for (int j=0;j<NCOS;j++){
218  for (int k=0;k<4;k++){
219  for (int l=0;l<4;l++){
220  f>>table1A[i][j][k][l];
221  } // for(l)
222  } // for(k)
223  f>>wtable1A[i][j];
224  f>>w0table1A[i][j];
225  } // for(j)
226  } // for(i)
227 
228  // Find 2nd range
229  while(!f.eof()){
230  f>>buf;
231  if(strcmp(buf.c_str(),"BeginRange2")==0) break;
232  }
233 
234  // Read table
235  for (int i=0;i<NS2;i++){
236  for (int j=0;j<NCOS;j++){
237  for (int k=0;k<4;k++){
238  for (int l=0;l<4;l++){
239  f>>table1B[i][j][k][l];
240  } // for(l)
241  } // for(k)
242  f>>wtable1B[i][j];
243  f>>w0table1B[i][j];
244  } // for(j)
245  } // for(i)
246 
247  // Find 3rd range
248  while(!f.eof()){
249  f>>buf;
250  if(strcmp(buf.c_str(),"BeginRange3")==0) break;
251  }
252 
253  // Read table
254  for (int i=0;i<NS3;i++){
255  for (int j=0;j<NCOS;j++){
256  for (int k=0;k<4;k++){
257  for (int l=0;l<4;l++){
258  f>>table1C[i][j][k][l];
259  } // for(l)
260  } // for(k)
261  f>>wtable1C[i][j];
262  f>>w0table1C[i][j];
263  } // for(j)
264  } // for(i)
265 
266  // Check for proper file end
267  f>>buf;
268  if(buf.size() == 0 || strcmp(buf.c_str(),"End") != 0){
269  cout<<"...incorrect file version or file incomplete/damaged!"<<endl;
270 
271  // In case of the error - do not use tables
272  table1A[0][0][0][0] = table1B[0][0][0][0] = table1C[0][0][0][0] = 0.0;
273  }
274  } // if (file is open)
275 
276  f.close();
277  f.open("table2-2.txt");
278 
279  if(!f.is_open()){
280  cout<<"File 'table2-2.txt' missing... skipped."<<endl;
281  }
282  else{
283  string buf;
284 
285  cout<<"Reading file 'table2-2.txt'..."<<endl;
286 
287  int dbuf1,dbuf2,dbuf3,dbufcos;
288  f>>buf>>dbuf1>>dbuf2>>dbuf3>>dbufcos;
289 
290  // Check table sizes
291  if(dbuf1!=NS1 || dbuf2!=NS2 || dbuf3!=NS3 || dbufcos!=NCOS) {
292  cout<<"mismatched NS1= "<<dbuf1<<" <--> "<<NS1<<endl;
293  cout<<" NS2= "<<dbuf2<<" <--> "<<NS2<<endl;
294  cout<<" NS3= "<<dbuf3<<" <--> "<<NS3<<endl;
295  cout<<" NCOS= "<<dbufcos<<" <--> "<<NCOS<<endl;
296  return;
297  }
298 
299  double buf1,buf2,buf3,buf4,buf5,buf6;
300  f>>buf>>buf1>>buf2>>buf3>>buf4>>buf5>>buf6;
301 
302  // Set ranges
303  if(sminA==0.0)
304  {
305  sminA=buf1;
306  smaxA=buf2;
307  sminB=buf3;
308  smaxB=buf4;
309  sminC=buf5;
310  smaxC=buf6;
311  }
312 
313  // Check ranges
314  if(buf1!=sminA || buf2!=smaxA || buf3!=sminB || buf4!=smaxB || buf5!=sminC || buf6!=smaxC) {
315  cout<<"mismatched sminA= "<<buf1<<" <--> "<<sminA<<endl;
316  cout<<" smaxA= "<<buf2<<" <--> "<<smaxA<<endl;
317  cout<<" sminB= "<<buf3<<" <--> "<<sminB<<endl;
318  cout<<" smaxB= "<<buf4<<" <--> "<<smaxB<<endl;
319  cout<<" sminC= "<<buf5<<" <--> "<<sminC<<endl;
320  cout<<" smaxC= "<<buf6<<" <--> "<<smaxC<<endl;
321  return;
322  }
323 
324  // Print out header
325  while(!f.eof()){
326  char head[255];
327  f.getline(head,255);
328  if(strcmp(head,"BeginRange1")==0) break;
329  cout<<head<<endl;
330  }
331 
332  // Read table
333  for (int i=0;i<NS1;i++){
334  for (int j=0;j<NCOS;j++){
335  for (int k=0;k<4;k++){
336  for (int l=0;l<4;l++){
337  f>>table2A[i][j][k][l];
338  } // for(l)
339  } // for(k)
340  f>>wtable2A[i][j];
341  f>>w0table2A[i][j];
342  } // for(j)
343  } // for(i)
344 
345  // Find 2nd range
346  while(!f.eof()){
347  f>>buf;
348  if(strcmp(buf.c_str(),"BeginRange2")==0) break;
349  }
350 
351  // Read table
352  for (int i=0;i<NS2;i++){
353  for (int j=0;j<NCOS;j++){
354  for (int k=0;k<4;k++){
355  for (int l=0;l<4;l++){
356  f>>table2B[i][j][k][l];
357  } // for(l)
358  } // for(k)
359  f>>wtable2B[i][j];
360  f>>w0table2B[i][j];
361  } // for(j)
362  } // for(i)
363 
364  // Find 3rd range
365  while(!f.eof()){
366  f>>buf;
367  if(strcmp(buf.c_str(),"BeginRange3")==0) break;
368  }
369 
370  // Read table
371  for (int i=0;i<NS3;i++){
372  for (int j=0;j<NCOS;j++){
373  for (int k=0;k<4;k++){
374  for (int l=0;l<4;l++){
375  f>>table2C[i][j][k][l];
376  } // for(l)
377  } // for(k)
378  f>>wtable2C[i][j];
379  f>>w0table2C[i][j];
380  } // for(j)
381  } // for(i)
382 
383  // Check for proper file end
384  f>>buf;
385  if(buf.size()==0 || strcmp(buf.c_str(),"End")!=0){
386  cout<<"...incorrect file version or file incomplete/damaged!"<<endl;
387 
388  // In case of the error - do not use tables
389  table2A[0][0][0][0] = table2B[0][0][0][0] = table2C[0][0][0][0] = 0.0;
390  }
391  } // if (file is open)
392 
393  f.close();
394  f.open("table11-11.txt");
395 
396  if(!f.is_open()){
397  cout<<"File 'table11-11.txt' missing... skipped."<<endl;
398  }
399  else{
400  string buf;
401 
402  cout<<"Reading file 'table11-11.txt'..."<<endl;
403 
404  int dbuf1,dbuf2,dbuf3,dbufcos;
405  f>>buf>>dbuf1>>dbuf2>>dbuf3>>dbufcos;
406 
407  // Check table sizes
408  if(dbuf1!=NS1 || dbuf2!=NS2 || dbuf3!=NS3 || dbufcos!=NCOS) {
409  cout<<"mismatched NS1= "<<dbuf1<<" <--> "<<NS1<<endl;
410  cout<<" NS2= "<<dbuf2<<" <--> "<<NS2<<endl;
411  cout<<" NS3= "<<dbuf3<<" <--> "<<NS3<<endl;
412  cout<<" NCOS= "<<dbufcos<<" <--> "<<NCOS<<endl;
413  return;
414  }
415 
416  double buf1,buf2,buf3,buf4,buf5,buf6;
417  f>>buf>>buf1>>buf2>>buf3>>buf4>>buf5>>buf6;
418 
419  // Set ranges
420  if(sminA==0.0)
421  {
422  sminA=buf1;
423  smaxA=buf2;
424  sminB=buf3;
425  smaxB=buf4;
426  sminC=buf5;
427  smaxC=buf6;
428  }
429 
430  // Check ranges
431  if(buf1!=sminA || buf2!=smaxA || buf3!=sminB || buf4!=smaxB || buf5!=sminC || buf6!=smaxC) {
432  cout<<"mismatched sminA= "<<buf1<<" <--> "<<sminA<<endl;
433  cout<<" smaxA= "<<buf2<<" <--> "<<smaxA<<endl;
434  cout<<" sminB= "<<buf3<<" <--> "<<sminB<<endl;
435  cout<<" smaxB= "<<buf4<<" <--> "<<smaxB<<endl;
436  cout<<" sminC= "<<buf5<<" <--> "<<sminC<<endl;
437  cout<<" smaxC= "<<buf6<<" <--> "<<smaxC<<endl;
438  return;
439  }
440 
441  // Print out header
442  while(!f.eof()){
443  char head[255];
444  f.getline(head,255);
445  if(strcmp(head,"BeginRange1")==0) break;
446  cout<<head<<endl;
447  }
448 
449  // Read table
450  for (int i=0;i<NS1;i++){
451  for (int j=0;j<NCOS;j++){
452  for (int k=0;k<4;k++){
453  for (int l=0;l<4;l++){
454  f>>table11A[i][j][k][l];
455  } // for(l)
456  } // for(k)
457  f>>wtable11A[i][j];
458  f>>w0table11A[i][j];
459  } // for(j)
460  } // for(i)
461 
462  // Find 2nd range
463  while(!f.eof()){
464  f>>buf;
465  if(strcmp(buf.c_str(),"BeginRange2")==0) break;
466  }
467 
468  // Read table
469  for (int i=0;i<NS2;i++){
470  for (int j=0;j<NCOS;j++){
471  for (int k=0;k<4;k++){
472  for (int l=0;l<4;l++){
473  f>>table11B[i][j][k][l];
474  } // for(l)
475  } // for(k)
476  f>>wtable11B[i][j];
477  f>>w0table11B[i][j];
478  } // for(j)
479  } // for(i)
480 
481  // Find 3rd range
482  while(!f.eof()){
483  f>>buf;
484  if(strcmp(buf.c_str(),"BeginRange3")==0) break;
485  }
486 
487  // Read table
488  for (int i=0;i<NS3;i++){
489  for (int j=0;j<NCOS;j++){
490  for (int k=0;k<4;k++){
491  for (int l=0;l<4;l++){
492  f>>table11C[i][j][k][l];
493  } // for(l)
494  } // for(k)
495  f>>wtable11C[i][j];
496  f>>w0table11C[i][j];
497  } // for(j)
498  } // for(i)
499 
500  f>>buf;
501  if(buf.size()==0 || strcmp(buf.c_str(),"End")!=0){
502  cout<<"...incorrect file version or file incomplete/damaged!"<<endl;
503 
504  // In case of the error - do not use tables
505  table11A[0][0][0][0] = table11B[0][0][0][0] = table11C[0][0][0][0] = 0.0;
506  }
507  } // if (file is open)
508 
509  f.close();
510  cout<<endl;
511 }
512 
513 void Tauola::decayOne(TauolaParticle *tau, bool undecay, double polx, double poly, double polz)
514 {
515  if(!tau) return;
516 
517  if(polx*polx+poly*poly+polz*polz>1)
518  {
519  Log::Warning()<<"decayOne(): ignoring wrong polarization vector: "<<polx<<" "<<poly<<" "<<polz<<endl;
520  polx=poly=polz=0;
521  }
522 
523  // Let the interface know that we work in the decayOne mode
524  m_is_using_decay_one = true;
525 
526  m_decay_one_polarization[0] = polx;
527  m_decay_one_polarization[1] = poly;
528  m_decay_one_polarization[2] = polz;
529 
530  // Undecay if needed
531  if(tau->hasDaughters())
532  {
533  if(undecay) tau->undecay();
534  else
535  {
536  m_is_using_decay_one = false;
537  return;
538  }
539  }
540 
541  std::vector<TauolaParticle *> list;
542  list.push_back(tau);
543 
544  // Decay single tau
545  TauolaParticlePair t_pair(list);
546  t_pair.decayTauPair();
547  t_pair.checkMomentumConservation();
548 
549  // Revert to normal mode
550  m_is_using_decay_one = false;
551 }
552 
554 
555  Log::Warning() <<"Deprecated routine 'Tauola::initialise'"<<endl;
556  Log::Warning(0)<<"Use 'Tauola::initialize' instead."<<endl;
557 
558  initialize();
559 
560  // Deprecated routines: initialise, setInitialisePhy,
561  // f_interface_tauolaInitialise
562 }
563 
565 {
566  return m_is_using_decay_one;
567 }
568 
570 {
571  return (bool) m_decay_one_boost_routine;
572 }
573 
575 {
576  m_decay_one_boost_routine=boost;
577 }
578 
580 {
581  m_decay_one_boost_routine(mother,target);
582 }
583 
585 {
586  return m_decay_one_polarization;
587 }
588 
590  m_pdg_id=pdg_id;
591 }
592 
594  return abs(m_pdg_id);
595 }
596 
597 void Tauola::setSameParticleDecayMode(int firstDecayMode){
598  m_firstDecayMode=firstDecayMode;
599 }
600 
601 void Tauola::setOppositeParticleDecayMode(int secondDecayMode){
602  m_secondDecayMode=secondDecayMode;
603 }
604 
605 void Tauola::setRadiation(bool rad){
606  m_rad=rad;
607 }
608 
609 void Tauola::setRadiationCutOff(double rad_cut_off){
610  m_rad_cut_off=rad_cut_off;
611 }
612 
613 
614 void Tauola::setInitializePhy(double iniphy){
615  m_iniphy=iniphy;
616 }
617 
618 void Tauola::setInitialisePhy(double iniphy){
619 
620  Log::Warning() <<"Deprecated routine 'Tauola::setInitialisePhy'"<<endl;
621  Log::Warning(0)<<"Use 'Tauola::setInitializePhy' instead."<<endl;
622 
623  setInitializePhy(iniphy);
624 
625  // Deprecated routines: initialise, setInitialisePhy,
626  // f_interface_tauolaInitialise
627 }
628 
629 void Tauola::setTauBr(int i, double value)
630 {
631  if(taubra_.nchan==0)
632  Log::Warning()<<"setTauBr(): run Tauola::initialize() first."<<endl;
633  else if(i<1 || i>taubra_.nchan || value<0.)
634  Log::Warning()<<"setTauBr(): Invalid input. Value must be >= 0 and 0 < i <= "<<taubra_.nchan<<endl;
635  else taubra_.gamprt[i-1]=(float)value;
636 }
637 
638 void Tauola::setTaukle(double bra1,double brk0, double brk0b, double brks)
639 {
640  if(bra1<0 || bra1>1 || brk0<0 ||brk0>1 || brk0b<0 || brk0b>1 || brks<0 ||brks>1)
641  {
642  Log::Warning()<<"setTaukle(): variables must be in range [0,1]. Ignored."<<endl;
643  return;
644  }
645  taukle_.bra1 =(float)bra1;
646  taukle_.brk0 =(float)brk0;
647  taukle_.brk0b=(float)brk0b;
648  taukle_.brks =(float)brks;
649 }
650 
652  return f_getTauMass();
653 }
654 
655 double Tauola::getHiggsScalarPseudoscalarMixingAngle(){
656  return m_higgs_scalar_pseudoscalar_mix;
657 }
658 
660  return m_higgs_scalar_pseudoscalar_pdg;
661 }
662 
665  m_higgs_scalar_pseudoscalar_mix=angle;
666 }
667 
671 
672  if (particleCharge(pdg_code)!=0.0){
673  Log::Warning()<<"You want to use spin correlations of Higgs for particle of PDGID= "<<pdg_code<<endl
674  <<"This particle has charge="<<particleCharge(pdg_code)<<endl;
675  Log::Fatal("This choice is not appropriate.",0);
676  }
677  m_higgs_scalar_pseudoscalar_pdg=pdg_code;
678 }
679 
680 int Tauola::getHelPlus(){
681  return m_helPlus;
682 }
683 int Tauola::getHelMinus(){
684  return m_helMinus;
685 }
686 double Tauola::getEWwt(){
687  return m_wtEW;
688 }
689 double Tauola::getEWwt0(){
690  return m_wtEW0;
691 }
692 void Tauola::setEWwt(double wt, double wt0)
693 {
694  m_wtEW = wt;
695  m_wtEW0 = wt0;
696 }
697 void Tauola::setHelicities(int minus, int plus)
698 {
699  m_helMinus = minus;
700  m_helPlus = plus;
701 }
702 void Tauola::setEtaK0sPi(int eta, int k, int pi)
703 {
704  ion[0] = pi;
705  ion[1] = k;
706  ion[2] = eta;
707 }
708 
709 void Tauola::summary()
710 {
711  int sign_type=100;
712  double pol[4] = {0};
713 
714  Log::Info() <<"Tauola::summary(): We use old TAUOLA FORTRAN printout."<<endl;
715  Log::Info(false)<<"As a consequence, there is a mismatch in printed TAUOLA version number."<<endl<<endl;
716 
717  // Print summary taken from FORTRAN TAUOLA
718  dekay_(&sign_type,pol);
719 }
720 
721 void Tauola::fill_val(int beg, int end, double* array, double value)
722 {
723  for (int i = beg; i < end; i++)
724  array[i] = value;
725 }
726 
727 double Tauola::particleCharge(int idhep)
728 {
729  static double CHARGE[101] = { 0 };
730  static int j=0;
731  //--
732  //-- Array 'SPIN' contains the spin of the first 100 particles accor-
733  //-- ding to the PDG particle code...
734 
735  if(j==0) // initialization
736  {
737  j=1;
738  fill_val(0 , 1, CHARGE, 0.0 );
739  fill_val(1 , 2, CHARGE,-0.3333333333);
740  fill_val(2 , 3, CHARGE, 0.6666666667);
741  fill_val(3 , 4, CHARGE,-0.3333333333);
742  fill_val(4 , 5, CHARGE, 0.6666666667);
743  fill_val(5 , 6, CHARGE,-0.3333333333);
744  fill_val(6 , 7, CHARGE, 0.6666666667);
745  fill_val(7 , 8, CHARGE,-0.3333333333);
746  fill_val(8 , 9, CHARGE, 0.6666666667);
747  fill_val(9 , 11, CHARGE, 0.0 );
748  fill_val(11 ,12, CHARGE,-1.0 );
749  fill_val(12 ,13, CHARGE, 0.0 );
750  fill_val(13 ,14, CHARGE,-1.0 );
751  fill_val(14, 15, CHARGE, 0.0 );
752  fill_val(15 ,16, CHARGE,-1.0 );
753  fill_val(16, 17, CHARGE, 0.0 );
754  fill_val(17 ,18, CHARGE,-1.0 );
755  fill_val(18, 24, CHARGE, 0.0 );
756  fill_val(24, 25, CHARGE, 1.0 );
757  fill_val(25, 37, CHARGE, 0.0 );
758  fill_val(37, 38, CHARGE, 1.0 );
759  fill_val(38,101, CHARGE, 0.0 );
760  }
761 
762  int idabs=abs(idhep);
763  double phoch=0.0;
764 
765  //--
766  //-- Charge of quark, lepton, boson etc....
767  if (idabs<=100) phoch=CHARGE[idabs];
768  else {
769  int Q3= idabs/1000 % 10;
770  int Q2= idabs/100 % 10;
771  int Q1= idabs/10 % 10;
772  if (Q3==0){
773  //--
774  //-- ...meson...
775  if(Q2 % 2==0) phoch=CHARGE[Q2]-CHARGE[Q1];
776  else phoch=CHARGE[Q1]-CHARGE[Q2];
777  }
778  else{
779  //--
780  //-- ...diquarks or baryon.
781  phoch=CHARGE[Q1]+CHARGE[Q2]+CHARGE[Q3];
782  }
783  }
784  //--
785  //-- Find the sign of the charge...
786  if (idhep<0.0) phoch=-phoch;
787  if (phoch*phoch<0.000001) phoch=0.0;
788 
789  return phoch;
790 }
791 
792 } // namespace Tauolapp
static void setInitializePhy(double iniphy)
Definition: Tauola.cxx:614
static void setNewCurrents(int mode)
Definition: Tauola.cxx:87
static void setBoostRoutine(void(*boost)(TauolaParticle *, TauolaParticle *))
Definition: Tauola.cxx:574
static void setOppositeParticleDecayMode(int secondDecayMode)
Definition: Tauola.cxx:601
static void initialize()
Definition: Tauola.cxx:129
static void setHiggsScalarPseudoscalarPDG(int pdg_id)
Definition: Tauola.cxx:670
static int getHiggsScalarPseudoscalarPDG()
Definition: Tauola.cxx:659
static void setRadiationCutOff(double rad_cut_off)
Definition: Tauola.cxx:609
static const double * getDecayOnePolarization()
Definition: Tauola.cxx:584
Abstract base class for particle in the event. This class also handles boosting.
static bool isUsingDecayOneBoost()
Definition: Tauola.cxx:569
static void setRadiation(bool rad)
Definition: Tauola.cxx:605
static void initialise()
Definition: Tauola.cxx:553
static bool isUsingDecayOne()
Definition: Tauola.cxx:564
static void setRandomGenerator(double(*gen)())
Definition: Tauola.cxx:96
static void setTauBr(int i, double value)
Definition: Tauola.cxx:629
static void setInitialisePhy(double iniphy)
Definition: Tauola.cxx:618
static void Fatal(string text, unsigned short int code=0)
static void decayOne(TauolaParticle *tau, bool undecay=false, double polx=0, double poly=0, double polz=0)
Definition: Tauola.cxx:513
static void setSameParticleDecayMode(int firstDecayMode)
Definition: Tauola.cxx:597
static void setUnits(MomentumUnits m, LengthUnits l)
Definition: Tauola.cxx:120
static int getDecayingParticle()
Definition: Tauola.cxx:593
static void setTauLifetime(double t)
Definition: Tauola.cxx:125
static void setDecayingParticle(int pdg_id)
Definition: Tauola.cxx:589
static void setHiggsScalarPseudoscalarMixingAngle(double angle)
Definition: Tauola.cxx:664
static double getTauMass()
Definition: Tauola.cxx:651
static void decayOneBoost(TauolaParticle *mother, TauolaParticle *target)
Definition: Tauola.cxx:579