CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TauolappInterface.cc
Go to the documentation of this file.
1 /* this is the code for the new Tauola++ */
2 
3 #include <iostream>
4 
6 
7 #include "Tauola/Tauola.h"
8 #include "Tauola/TauolaHepMCEvent.h"
9 #include "Tauola/Log.h"
10 
14 
15 #include "CLHEP/Random/RandomEngine.h"
16 
17 #include "HepMC/GenEvent.h"
18 #include "HepMC/IO_HEPEVT.h"
19 #include "HepMC/HEPEVT_Wrapper.h"
20 
22 
23 extern "C" {
24 
25  void gen::ranmar_( float *rvec, int *lenv )
26  {
27  TauolappInterface* instance = TauolappInterface::getInstance();
28  for(int i = 0; i < *lenv; i++)
29  *rvec++ = instance->flat();
30  return;
31  }
32 
33  void gen::rmarin_( int*, int*, int* )
34  {
35  return;
36  }
37 
38 }
39 
40 using namespace gen;
41 using namespace edm;
42 using namespace std;
43 
45 
46 
48  Setup();
49 }
50 
52  Setup();
53  setPSet(pset);
54 }
55 
57  fInstance=this;
58  fPolarization=false;
59  fPSet=0;
60  fIsInitialized=false; fMDTAU=-1;
61  fSelectDecayByEvent=false;
62 
64  if(!rng.isAvailable()) {
65  throw cms::Exception("Configuration")
66  << "The RandomNumberProducer module requires the RandomNumberGeneratorService\n"
67  "which appears to be absent. Please add that service to your configuration\n"
68  "or remove the modules that require it." << std::endl;
69  }
70 
71  fRandomEngine = &rng->getEngine();
72 
73 }
74 
76 {
77 
78  if ( fInstance == 0 ) fInstance = new TauolappInterface() ;
79  return fInstance;
80 
81 }
82 
83 
85 {
86 
87  if ( fPSet != 0 ) delete fPSet;
88  if ( fInstance == this ) fInstance = 0;
89 
90 }
91 
93 {
94 
95  if ( fPSet != 0 )
96  {
97  throw cms::Exception("TauolappInterfaceError")
98  << "Attempt to override Tauola an existing ParameterSet\n"
99  << std::endl;
100  }
101 
102  fPSet = new ParameterSet(pset);
103 
104  return;
105 
106 }
107 
109  if ( fIsInitialized ) return; // do init only once
110  if ( fPSet == 0 ) throw cms::Exception("TauolappInterfaceError") << "Attempt to initialize Tauola with an empty ParameterSet\n" << std::endl;
111 
112  fIsInitialized = true;
113 
114  es.getData( fPDGTable ) ;
115 
116  Tauolapp::Tauola::setDecayingParticle(15);
117  // --> ??? Tauola::setRadiation(false);
118 
119  // polarization switch
120  //
121  // fPolarization = fPSet->getParameter<bool>("UseTauolaPolarization") ? 1 : 0 ;
122  fPolarization = fPSet->getParameter<bool>("UseTauolaPolarization");
123 
124  // read tau decay mode switches
125  //
126  ParameterSet cards = fPSet->getParameter< ParameterSet >("InputCards");
127 
128  fMDTAU = cards.getParameter< int >( "mdtau" );
129 
130  if ( fMDTAU == 0 || fMDTAU == 1 )
131  {
132  Tauolapp::Tauola::setSameParticleDecayMode( cards.getParameter< int >( "pjak1" ) ) ;
133  Tauolapp::Tauola::setOppositeParticleDecayMode( cards.getParameter< int >( "pjak2" ) ) ;
134  }
135 
136  Tauolapp::Tauola::spin_correlation.setAll(fPolarization);
137 
138  // some more options, copied over from an example
139  // - maybe will use later...
140  //
141  //Tauola::setEtaK0sPi(0,0,0); // switches to decay eta K0_S and pi0 1/0 on/off.
142  //
143 
144  const HepPDT::ParticleData* PData = fPDGTable->particle(HepPDT::ParticleID( abs(Tauolapp::Tauola::getDecayingParticle()) )) ;
145  double lifetime = PData->lifetime().value();
146  Tauolapp::Tauola::setTauLifetime( lifetime );
147 
148  fPDGs.push_back( Tauolapp::Tauola::getDecayingParticle() );
149 
150  Tauolapp::Tauola::setRandomGenerator(gen::TauolappInterface_RandGetter);
151  Tauolapp::Tauola::initialize();
152 
153  Tauolapp::Tauola::spin_correlation.setAll(fPolarization);// Tauola switches this on during Tauola::initialise(); so we add this here to keep it on/off
154 
155  if (fPSet->exists("parameterSets")){
156  std::vector<std::string> par = fPSet->getParameter< std::vector<std::string> >("parameterSets");
157  for (unsigned int ip=0; ip<par.size(); ++ip ){
158  std::string curSet = par[ip];
159 
160  if(curSet=="setNewCurrents") Tauolapp::Tauola::setNewCurrents(fPSet->getParameter<int>(curSet));
161  if(curSet=="spinCorrelationSetAll") Tauolapp::Tauola::spin_correlation.setAll(fPSet->getParameter<bool>(curSet));
162  if(curSet=="spinCorrelationGAMMA") Tauolapp::Tauola::spin_correlation.GAMMA=fPSet->getParameter<bool>(curSet);
163  if(curSet=="spinCorrelationZ0") Tauolapp::Tauola::spin_correlation.Z0=fPSet->getParameter<bool>(curSet);
164  if(curSet=="spinCorrelationHIGGS") Tauolapp::Tauola::spin_correlation.HIGGS=fPSet->getParameter<bool>(curSet);
165  if(curSet=="spinCorrelationHIGGSH") Tauolapp::Tauola::spin_correlation.HIGGS_H=fPSet->getParameter<bool>(curSet);
166  if(curSet=="spinCorrelationHIGGSA") Tauolapp::Tauola::spin_correlation.HIGGS_A=fPSet->getParameter<bool>(curSet);
167  if(curSet=="spinCorrelationHIGGSPLUS") Tauolapp::Tauola::spin_correlation.HIGGS_PLUS=fPSet->getParameter<bool>(curSet);
168  if(curSet=="spinCorrelationHIGGSMINUS") Tauolapp::Tauola::spin_correlation.HIGGS_MINUS=fPSet->getParameter<bool>(curSet);
169  if(curSet=="spinCorrelationWPLUS") Tauolapp::Tauola::spin_correlation.W_PLUS=fPSet->getParameter<bool>(curSet);
170  if(curSet=="spinCorrelationWMINUS") Tauolapp::Tauola::spin_correlation.W_MINUS=fPSet->getParameter<bool>(curSet);
171 
172  if(curSet=="setHiggsScalarPseudoscalarPDG") Tauolapp::Tauola::setHiggsScalarPseudoscalarPDG(fPSet->getParameter<int>(curSet));
173  if(curSet=="setHiggsScalarPseudoscalarMixingAngle") Tauolapp::Tauola::setHiggsScalarPseudoscalarMixingAngle(fPSet->getParameter<double>(curSet));
174 
175  if(curSet=="setRadiation") Tauolapp::Tauola::setRadiation(fPSet->getParameter<bool>(curSet));
176  if(curSet=="setRadiationCutOff") Tauolapp::Tauola::setRadiationCutOff(fPSet->getParameter<double>(curSet));
177 
178  if(curSet=="setEtaK0sPi"){
179  std::vector<int> vpar = fPSet->getParameter<std::vector<int> >(curSet);
180  if(vpar.size()==3) Tauolapp::Tauola::setEtaK0sPi(vpar[0],vpar[1],vpar[2]);
181  else {std::cout << "WARNING invalid size for setEtaK0sPi: " << vpar.size() << " Require 3 elements " << std::endl;}
182  }
183 
184  if(curSet=="setTaukle"){
185  std::vector<double> vpar = fPSet->getParameter<std::vector<double> >(curSet);
186  if(vpar.size()==4) Tauolapp::Tauola::setTaukle(vpar[0], vpar[1], vpar[2], vpar[3]);
187  else {std::cout << "WARNING invalid size for setTaukle: " << vpar.size() << " Require 4 elements " << std::endl;}
188  }
189 
190  if(curSet=="setTauBr"){
191  edm::ParameterSet cfg = fPSet->getParameter<edm::ParameterSet>(curSet);
192  std::vector<int> vJAK = cfg.getParameter<std::vector<int> >("JAK");
193  std::vector<double> vBR = cfg.getParameter<std::vector<double> >("BR");
194  if(vJAK.size() == vBR.size()){
195  for(unsigned int i=0;i<vJAK.size();i++) Tauolapp::Tauola::setTauBr(vJAK[i],vBR[i]);
196  }
197  else {std::cout << "WARNING invalid size for setTauBr - JAK: " << vJAK.size() << " BR: " << vBR.size() << std::endl;}
198  }
199  }
200  }
201 
202  // override decay modes if needs be
203  //
204  // we have to do it AFTER init because otherwises branching ratios are NOT filled in
205  //
206  if ( fMDTAU != 0 && fMDTAU != 1 )
207  {
208  decodeMDTAU( fMDTAU );
209  }
210 
211  Tauolapp::Log::LogWarning(false);
212 
213  return;
214 }
215 
217  if ( !fIsInitialized ){
218  // throw
219  throw cms::Exception("TauolappInterfaceError")
220  << "Attempt to run random number generator of un-initialized Tauola\n"
221  << std::endl;
222  }
223  return fRandomEngine->flat();
224 }
225 
226 HepMC::GenEvent* TauolappInterface::decay( HepMC::GenEvent* evt ){
227 
228  if ( !fIsInitialized ) return evt;
229 
230  int NPartBefore = evt->particles_size();
231  int NVtxBefore = evt->vertices_size();
232 
233  // what do we do if Hep::GenEvent size is larger than 10K ???
234  // Tauola (& Photos, BTW) can only handle up to 10K via HEPEVT,
235  // and in case of CMS, it's only up to 4K !!!
236  //
237  // if ( NPartBefore > 10000 ) return evt;
238  //
239 
240  // override decay mode if needs be
241  if ( fSelectDecayByEvent )
242  {
243  selectDecayByMDTAU();
244  }
245 
246  //construct tmp TAUOLA event
247  //
248  auto * t_event = new Tauolapp::TauolaHepMCEvent(evt);
249 
250  // another option: if one lets Pythia or another master gen to decay taus,
251  // we have to undecay them first
252  // t_event->undecayTaus();
253 
254  // run Tauola on the tmp event - HepMC::GenEvernt will be MODIFIED !!!
255  //
256  t_event->decayTaus();
257 
258  // delet tmp Tauola event
259  //
260  delete t_event;
261 
262  // do we also need to apply the lifetime and vtx position shift ???
263  // (see TauolappInterface, for example)
264  //
265  // NOTE: the procedure ASSYMES that vertex barcoding is COUNTIUOUS/SEQUENTIAL,
266  // and that the abs(barcode) corresponds to vertex "plain indexing"
267  //
268  for ( int iv=NVtxBefore+1; iv<=evt->vertices_size(); iv++ )
269  {
270  HepMC::GenVertex* GenVtx = evt->barcode_to_vertex(-iv);
271  std::vector<int> BCodes;
272  BCodes.clear();
273  for (HepMC::GenVertex::particle_iterator pitr= GenVtx->particles_begin(HepMC::children);
274  pitr != GenVtx->particles_end(HepMC::children); ++pitr)
275  {
276  if ( (*pitr)->barcode() > 10000 )
277  {
278  BCodes.push_back( (*pitr)->barcode() );
279  }
280  }
281  if ( BCodes.size() > 0 )
282  {
283  for ( size_t ibc=0; ibc<BCodes.size(); ibc++ )
284  {
285  HepMC::GenParticle* p1 = evt->barcode_to_particle( BCodes[ibc] );
286  int nbc = p1->barcode() - 10000 + NPartBefore;
287  p1->suggest_barcode( nbc );
288  }
289  }
290  }
291 
292  return evt;
293 
294 }
295 
297 {
298  return;
299 }
300 
302 {
303 
304  // Note-1:
305  // I have to hack the common block directly because set<...>DecayMode(...)
306  // only changes it in the Tauola++ instance but does NOT passes it over
307  // to the Fortran core - this it does only one, via initialize() stuff...
308  //
309  // So I'll do both ways of settings, just for consistency...
310  // but I probably need to communicate it to the Tauola(++) team...
311  //
312 
313  // Note-2:
314  // originally, the 1xx settings are meant for tau's from hard event,
315  // and the 2xx settings are for any tau in the event record;
316  //
317  // later one, we'll have to take this into account...
318  // but first I'll have to sort out what happens in the 1xx case
319  // to tau's coming outside of hard event (if any in the record)
320  //
321 
322  if ( mdtau == 101 || mdtau == 201 )
323  {
324  // override with electron mode for both tau's
325  //
326  Tauolapp::jaki_.jak1 = 1;
327  Tauolapp::jaki_.jak2 = 1;
328  Tauolapp::Tauola::setSameParticleDecayMode( 1 ) ;
329  Tauolapp::Tauola::setOppositeParticleDecayMode( 1 ) ;
330  return;
331  }
332 
333  if ( mdtau == 102 || mdtau == 202 )
334  {
335  // override with muon mode for both tau's
336  //
337  Tauolapp::jaki_.jak1 = 2;
338  Tauolapp::jaki_.jak2 = 2;
339  Tauolapp::Tauola::setSameParticleDecayMode( 2 ) ;
340  Tauolapp::Tauola::setOppositeParticleDecayMode( 2 ) ;
341  return;
342  }
343 
344  if ( mdtau == 111 || mdtau == 211 )
345  {
346  // override with electron mode for 1st tau
347  // and any mode for 2nd tau
348  //
349  Tauolapp::jaki_.jak1 = 1;
350  Tauolapp::jaki_.jak2 = 0;
351  Tauolapp::Tauola::setSameParticleDecayMode( 1 ) ;
352  Tauolapp::Tauola::setOppositeParticleDecayMode( 0 ) ;
353  return;
354  }
355 
356  if ( mdtau == 112 || mdtau == 212 )
357  {
358  // override with muon mode for the 1st tau
359  // and any mode for the 2nd tau
360  //
361  Tauolapp::jaki_.jak1 = 2;
362  Tauolapp::jaki_.jak2 = 0;
363  Tauolapp::Tauola::setSameParticleDecayMode( 2 ) ;
364  Tauolapp::Tauola::setOppositeParticleDecayMode( 0 ) ;
365  return;
366  }
367 
368  if ( mdtau == 121 || mdtau == 221 )
369  {
370  // override with any mode for the 1st tau
371  // and electron mode for the 2nd tau
372  //
373  Tauolapp::jaki_.jak1 = 0;
374  Tauolapp::jaki_.jak2 = 1;
375  Tauolapp::Tauola::setSameParticleDecayMode( 0 ) ;
376  Tauolapp::Tauola::setOppositeParticleDecayMode( 1 ) ;
377  return;
378  }
379 
380  if ( mdtau == 122 || mdtau == 222 )
381  {
382  // override with any mode for the 1st tau
383  // and muon mode for the 2nd tau
384  //
385  Tauolapp::jaki_.jak1 = 0;
386  Tauolapp::jaki_.jak2 = 2;
387  Tauolapp::Tauola::setSameParticleDecayMode( 0 ) ;
388  Tauolapp::Tauola::setOppositeParticleDecayMode( 2 ) ;
389  return;
390  }
391 
392  if ( mdtau == 140 || mdtau == 240 )
393  {
394  // override with pi+/- nutau mode for both tau's
395  //
396  Tauolapp::jaki_.jak1 = 3;
397  Tauolapp::jaki_.jak2 = 3;
398  Tauolapp::Tauola::setSameParticleDecayMode( 3 ) ;
399  Tauolapp::Tauola::setOppositeParticleDecayMode( 3 ) ;
400  return;
401  }
402 
403  if ( mdtau == 141 || mdtau == 241 )
404  {
405  // override with pi+/- nutau mode for the 1st tau
406  // and any mode for the 2nd tau
407  //
408  Tauolapp::jaki_.jak1 = 3;
409  Tauolapp::jaki_.jak2 = 0;
410  Tauolapp::Tauola::setSameParticleDecayMode( 3 ) ;
411  Tauolapp::Tauola::setOppositeParticleDecayMode( 0 ) ;
412  return;
413  }
414 
415  if ( mdtau == 142 || mdtau == 242 )
416  {
417  // override with any mode for the 1st tau
418  // and pi+/- nutau mode for 2nd tau
419  //
420  Tauolapp::jaki_.jak1 = 0;
421  Tauolapp::jaki_.jak2 = 3;
422  Tauolapp::Tauola::setSameParticleDecayMode( 0 ) ;
423  Tauolapp::Tauola::setOppositeParticleDecayMode( 3 ) ;
424  return;
425  }
426 
427  // OK, we come here for semi-inclusive modes
428  //
429 
430  // First of all, leptons and hadron modes sums
431  //
432  // re-scale branching ratios, just in case...
433  //
434  double sumBra = 0;
435 
436  // the number of decay modes is hardcoded at 22 because that's what it is right now in Tauola
437  // in the future, perhaps an asscess method would be useful - communicate to Tauola team...
438  //
439 
440  for ( int i=0; i<22; i++ )
441  {
442  sumBra += Tauolapp::taubra_.gamprt[i];
443  }
444  if ( sumBra == 0. ) return ; // perhaps need to throw ?
445  for ( int i=0; i<22; i++ )
446  {
447  double newBra = Tauolapp::taubra_.gamprt[i] / sumBra;
448  Tauolapp::Tauola::setTauBr( i+1, newBra );
449  }
450  sumBra = 1.0;
451 
452  double sumLeptonBra = Tauolapp::taubra_.gamprt[0] + Tauolapp::taubra_.gamprt[1];
453  double sumHadronBra = sumBra - sumLeptonBra;
454 
455  for ( int i=0; i<2; i++ )
456  {
457  fLeptonModes.push_back( i+1 );
458  fScaledLeptonBrRatios.push_back( (Tauolapp::taubra_.gamprt[i]/sumLeptonBra) );
459  }
460  for ( int i=2; i<22; i++ )
461  {
462  fHadronModes.push_back( i+1 );
463  fScaledHadronBrRatios.push_back( (Tauolapp::taubra_.gamprt[i]/sumHadronBra) );
464  }
465 
466  fSelectDecayByEvent = true;
467  return;
468 
469 }
470 
472 {
473 
474 
475  if ( fMDTAU == 100 || fMDTAU == 200 )
476  {
477  int mode = selectLeptonic();
478  Tauolapp::jaki_.jak1 = mode;
479  Tauolapp::Tauola::setSameParticleDecayMode( mode );
480  mode = selectLeptonic();
481  Tauolapp::jaki_.jak2 = mode;
482  Tauolapp::Tauola::setOppositeParticleDecayMode( mode );
483  return ;
484  }
485 
486  int modeL = selectLeptonic();
487  int modeH = selectHadronic();
488 
489  if ( fMDTAU == 110 || fMDTAU == 210 )
490  {
491  Tauolapp::jaki_.jak1 = modeL;
492  Tauolapp::jaki_.jak2 = 0;
493  Tauolapp::Tauola::setSameParticleDecayMode( modeL );
494  Tauolapp::Tauola::setOppositeParticleDecayMode( 0 );
495  return ;
496  }
497 
498  if ( fMDTAU == 120 || fMDTAU == 22 )
499  {
500  Tauolapp::jaki_.jak1 = 0;
501  Tauolapp::jaki_.jak2 = modeL;
502  Tauolapp::Tauola::setSameParticleDecayMode( 0 );
503  Tauolapp::Tauola::setOppositeParticleDecayMode( modeL );
504  return;
505  }
506 
507  if ( fMDTAU == 114 || fMDTAU == 214 )
508  {
509  Tauolapp::jaki_.jak1 = modeL;
510  Tauolapp::jaki_.jak2 = modeH;
511  Tauolapp::Tauola::setSameParticleDecayMode( modeL );
512  Tauolapp::Tauola::setOppositeParticleDecayMode( modeH );
513  return;
514  }
515 
516  if ( fMDTAU == 124 || fMDTAU == 224 )
517  {
518  Tauolapp::jaki_.jak1 = modeH;
519  Tauolapp::jaki_.jak2 = modeL;
520  Tauolapp::Tauola::setSameParticleDecayMode( modeH );
521  Tauolapp::Tauola::setOppositeParticleDecayMode( modeL );
522  return;
523  }
524 
525  if ( fMDTAU == 115 || fMDTAU == 215 )
526  {
527  Tauolapp::jaki_.jak1 = 1;
528  Tauolapp::jaki_.jak2 = modeH;
529  Tauolapp::Tauola::setSameParticleDecayMode( 1 );
530  Tauolapp::Tauola::setOppositeParticleDecayMode( modeH );
531  return;
532  }
533 
534  if ( fMDTAU == 125 || fMDTAU == 225 )
535  {
536  Tauolapp::jaki_.jak1 = modeH;
537  Tauolapp::jaki_.jak2 = 1;
538  Tauolapp::Tauola::setSameParticleDecayMode( modeH );
539  Tauolapp::Tauola::setOppositeParticleDecayMode( 1 );
540  return;
541  }
542 
543  if ( fMDTAU == 116 || fMDTAU == 216 )
544  {
545  Tauolapp::jaki_.jak1 = 2;
546  Tauolapp::jaki_.jak2 = modeH;
547  Tauolapp::Tauola::setSameParticleDecayMode( 2 );
548  Tauolapp::Tauola::setOppositeParticleDecayMode( modeH );
549  return;
550  }
551 
552  if ( fMDTAU == 126 || fMDTAU == 226 )
553  {
554  Tauolapp::jaki_.jak1 = modeH;
555  Tauolapp::jaki_.jak2 = 2;
556  Tauolapp::Tauola::setSameParticleDecayMode( modeH );
557  Tauolapp::Tauola::setOppositeParticleDecayMode( 2 );
558  return;
559  }
560 
561  if ( fMDTAU == 130 || fMDTAU == 230 )
562  {
563  Tauolapp::jaki_.jak1 = modeH;
564  Tauolapp::jaki_.jak2 = selectHadronic();
565  Tauolapp::Tauola::setSameParticleDecayMode( modeH );
566  Tauolapp::Tauola::setOppositeParticleDecayMode( Tauolapp::jaki_.jak2 );
567  return;
568  }
569 
570  if ( fMDTAU == 131 || fMDTAU == 231 )
571  {
572  Tauolapp::jaki_.jak1 = modeH;
573  Tauolapp::jaki_.jak2 = 0;
574  Tauolapp::Tauola::setSameParticleDecayMode( modeH );
575  Tauolapp::Tauola::setOppositeParticleDecayMode( 0 );
576  return;
577  }
578 
579  if ( fMDTAU == 132 || fMDTAU == 232 )
580  {
581  Tauolapp::jaki_.jak1 = 0;
582  Tauolapp::jaki_.jak2 = modeH;
583  Tauolapp::Tauola::setSameParticleDecayMode( 0 );
584  Tauolapp::Tauola::setOppositeParticleDecayMode( modeH );
585  return;
586  }
587 
588  // unlikely that we get here on unknown mdtau
589  // - there's a protection earlier
590  // but if we do, just set defaults
591  // probably need to spit a warning...
592  //
593  Tauolapp::Tauola::setSameParticleDecayMode( 0 );
594  Tauolapp::Tauola::setOppositeParticleDecayMode( 0 );
595 
596  return;
597 
598 
599 }
600 
602 {
603 
604  float prob = flat();
605 
606  if ( prob > 0. && prob <= fScaledLeptonBrRatios[0] )
607  {
608  return 1;
609  }
610  else if ( prob > fScaledLeptonBrRatios[1] && prob <=1. )
611  {
612  return 2;
613  }
614 
615  return 0;
616 }
617 
619 {
620 
621  float prob = 0.;
622  int len = 1;
623  ranmar_(&prob,&len);
624 
625  double sumBra = fScaledHadronBrRatios[0];
626  if ( prob > 0. && prob <= sumBra )
627  {
628  return fHadronModes[0];
629  }
630  else
631  {
632  int NN = fScaledHadronBrRatios.size();
633  for ( int i=1; i<NN; i++ )
634  {
635  if ( prob > sumBra && prob <= (sumBra+fScaledHadronBrRatios[i]) )
636  {
637  return fHadronModes[i];
638  }
639  sumBra += fScaledHadronBrRatios[i];
640  }
641  }
642 
643  return 0;
644 
645 }
646 
649  return (double)instance->flat();
650 }
651 
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
static PFTauRenderPlugin instance
#define abs(x)
Definition: mlp_lapack.h:159
void rmarin_(int *, int *, int *)
void getData(T &iHolder) const
Definition: EventSetup.h:67
float gamprt[30]
Definition: TauolaWrapper.h:78
int jak2
Definition: TauolaWrapper.h:67
static TauolappInterface * getInstance()
double TauolappInterface_RandGetter()
bool isAvailable() const
Definition: Service.h:47
static TauolappInterface * fInstance
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
void ranmar_(float *rvec, int *lenv)
HepPDT::ParticleData ParticleData
void init(const edm::EventSetup &)
HepMC::GenEvent * decay(HepMC::GenEvent *)
double p1[4]
Definition: TauolaWrapper.h:89
tuple cout
Definition: gather_cfg.py:121
struct @481 taubra_
int mdtau
Definition: TauolaWrapper.h:59
void setPSet(const edm::ParameterSet &)