BOSS 7.0.3
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDecay Class Reference

#include <EvtDecay.h>

+ Inheritance diagram for EvtDecay:

Public Member Functions

 EvtDecay (const string &name, ISvcLocator *pSvcLocator)
 
StatusCode initialize ()
 
StatusCode execute ()
 
StatusCode finalize ()
 
double ampsLenu (vector< double > Vexp, std::vector< double > vpars)
 
double ampsLbenu (vector< double > Vexp, std::vector< double > vpars)
 
double HV (double i, double j, vector< double > Vexp, std::vector< double > vpars)
 
double HA (double i, double j, vector< double > Vexp, std::vector< double > vpars)
 
double getObsXsection (double mhds, int mode)
 
double energySpread (double mu, double sigma)
 

Public Attributes

IDataInfoSvctmpInfoSvc
 
DataInfoSvcdataInfoSvc
 

Detailed Description

Definition at line 65 of file EvtDecay.h.

Constructor & Destructor Documentation

◆ EvtDecay()

EvtDecay::EvtDecay ( const string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 83 of file EvtDecay.cxx.

83 :Algorithm( name, pSvcLocator )
84{
85
86
87
88 // these can be used to specify alternative locations or filenames
89 // for the EvtGen particle and channel definition files.
90
91 declareProperty("DecayDecDir", m_DecayDec = "");
92 declareProperty("PdtTableDir", m_PdtTable = "");
93 declareProperty("userDecayTableName", userDecFileName = "NONE");
94 declareProperty("DecayTopology", m_DecayTop = ""); // output decay topology to a file specified by user
95 declareProperty("DecayRecord", m_DecayRec = ""); // output decay topology of one particle specified by user to a file
96 declareProperty("ParentParticle", m_ParentPart = "NONE");// Mothor particle name in pdt.table for only running BesEvtGen
97 declareProperty("Multiplicity", m_Ncharge = false); // output ncharge number of an event
98 declareProperty("NutupleFile",m_NtupleFile = false); // output Ntuple file
99 declareProperty("mDIY",_mDIY= false); // mDIY model
100 declareProperty("FDPdata",m_SB3File = ""); // Fit Dalitz Plot (FDP) data file name (*.root)
101 declareProperty("FDPHisT",m_SB3HT = ""); // histogram title of Dalitz plot in data file
102 declareProperty("FDPpart",m_FDPparticle =""); //to assign the FDP parent particle name (string)
103 declareProperty("TruthFile",m_truthFile ="");
104 declareProperty("TruthPart",m_truthPart ="");
105 declareProperty("Psi3SopenCharm",m_Psi4040OpenCharm=false);
106 declareProperty("Psi2openCharm", m_Psi2openCharm=false);
107 declareProperty("SetMthrForConExc",m_SetMthr=0.0);
108 declareProperty("statDecays",m_statDecays=false);
109 declareProperty("TagLundCharmModel", m_tagLundModel=false);
110 m_mystring.clear();
111 declareProperty("FileForTrackGen", m_mystring);
112 //for polarized charmonium production
113 m_polarization.clear();//= diag{1+Pe, 0, 1-Pe} with electron polarization Pe
114 declareProperty("polarization", m_polarization);
115 declareProperty("eBeamPolarization", m_eBeamPolarization=-1);
116 m_cluster0.clear();m_wind0.clear();
117 m_cluster1.clear();m_wind1.clear();
118 m_cluster2.clear();m_wind2.clear();
119 declareProperty("cluster0",m_cluster0);
120 declareProperty("cluster1",m_cluster1);
121 declareProperty("cluster2",m_cluster2);
122 declareProperty("masswin0",m_wind0);
123 declareProperty("masswin1",m_wind1);
124 declareProperty("masswin2",m_wind2);
125 declareProperty("OutputP4",m_outputp4="");
126 declareProperty("ReadMeasuredEcms", m_RdMeasuredEcms = false);
127 declareProperty("beamEnergySpread", m_beamEnergySpread = 0);
128 m_ReadTruth.clear();
129 declareProperty("ReadTruth",m_ReadTruth);
130 //ReadTruth={{"ParentName"},{"i0","i1","i2"},{"j0","j1","j2","j3"}}, where the first part. is Parent->getDaug(i0)->getDaug(i1)->getDaug(i2),
131 //and second particle is Parent ->getDaug(j0)->getDaug(j1)->getDaug(j2)->getDaug(j3);
132 declareProperty("RvalueTag",_RvalueTag=false);
133}

Member Function Documentation

◆ ampsLbenu()

double EvtDecay::ampsLbenu ( vector< double >  Vexp,
std::vector< double >  vpars 
)

◆ ampsLenu()

double EvtDecay::ampsLenu ( vector< double >  Vexp,
std::vector< double >  vpars 
)

◆ energySpread()

double EvtDecay::energySpread ( double  mu,
double  sigma 
)

Definition at line 1577 of file EvtDecay.cxx.

1577 {
1578 //mu: mean value in Gaussian
1579 //sigma: variance in Gaussian
1580 rloop:
1581 int n=12;
1582 double ri=0;
1583 for(int i=0;i<n;i++){
1584 double pm= EvtRandom::Flat(0.,1);
1585 ri += pm;
1586 }
1587 double eta=sqrt(n*12.0)*(ri/12-0.5);
1588 double xsig= sigma*eta+mu;
1589 double mx0=EvtConExc::mlow;
1590 double mx1=EvtConExc::mup;
1591 if(xsig<mx0 || xsig>mx1) goto rloop;
1592 return xsig;
1593}
const Int_t n
static double mlow
Definition: EvtConExc.hh:184
static double mup
Definition: EvtConExc.hh:184
static double Flat()
Definition: EvtRandom.cc:73

◆ execute()

StatusCode EvtDecay::execute ( )

Definition at line 334 of file EvtDecay.cxx.

335{
336
337 MsgStream log(messageService(), name());
338 // log << MSG::INFO << "EvtDecay executing" << endreq;
339 //------------------
340 string key = "GEN_EVENT";
341 // retrieve event from Transient Store (Storegate)
342 SmartDataPtr<McGenEventCol> McEvtColl(eventSvc(), "/Event/Gen");
343
344 m_numberEvent += 1;
345 writeFlag = 0;
346 //std::cout<<"EvtNumber= "<<m_numberEvent<<std::endl;
347 if ( McEvtColl == 0 )
348 {
349 HepMC::GenEvent* evt=new GenEvent();
350 evt->set_event_number(m_numberEvent);
351
352 //read Ecms from the database
353 SmartDataPtr<Event::EventHeader> eventHeader(eventSvc(),"/Event/EventHeader");
354 int runNo=eventHeader->runNumber();
355 int event=eventHeader->eventNumber();
356 bool newRunFlag=0;
357 if(runNo != 0 && runNo != m_runNo){m_runNo=runNo;newRunFlag = true;}else{newRunFlag=false;}
358 if(m_RdMeasuredEcms&& newRunFlag){// using cms energy of beam read from database
359 runNo = std::abs(runNo);
360 ReadME theME(runNo);
361 if(theME.isRunNoValid()){
362 dbEcms=theME.getEcms();
363 std::cout<<"Read Ecms= "<<dbEcms<<std::endl;
364 if(dbEcms!=0){
365 std::cout<<"INFO: Read the MeasuredEcms"<<std::endl;
366 }
367 else{
368 std::cout<<"ERROR: Can not read the MeasuredEcms, try to turn off the ReadEcmsDB"<<std::endl;
369 return StatusCode::FAILURE;
370 }
371 }
372 }
373 //end of read Ecms
374
375 callBesEvtGen( evt );
376 if(!(m_DecayTop=="")) evt->print(outfile);
377
378 //create a Transient store
379 McGenEventCol *mcColl = new McGenEventCol;
380 McGenEvent* mcEvent = new McGenEvent(evt);
381 mcColl->push_back(mcEvent);
382 StatusCode sc = eventSvc()->registerObject("/Event/Gen",mcColl);
383 if(sc != SUCCESS) return StatusCode::FAILURE;
384
385 } else // (McEvtColl != 0)
386 {
387 McGenEventCol::iterator mcItr;
388 for( mcItr = McEvtColl->begin(); mcItr != McEvtColl->end(); mcItr++ )
389 {
390 HepMC::GenEvent* hEvt = (*mcItr)->getGenEvt();
391 // MeVToGeV( hEvt );
392
393 callEvtGen( hEvt );
394
395 if(!(m_DecayTop=="")) hEvt->print(outfile);
396 // GeVToMeV( hEvt );
397 // if(!(m_DecayRec=="")) outfile2<<std::endl;
398 if(!(m_DecayRec=="")) std::cout<<std::endl;
399 };
400 }
401 if( m_NtupleFile ){ m_tuple->write();}
402 return StatusCode::SUCCESS;
403}
int runNo
Definition: DQA_TO_DB.cxx:12
*************DOUBLE PRECISION m_pi *DOUBLE PRECISION m_HvecTau2 DOUBLE PRECISION m_HvClone2 DOUBLE PRECISION m_gamma1 DOUBLE PRECISION m_gamma2 DOUBLE PRECISION m_thet1 DOUBLE PRECISION m_thet2 INTEGER m_IFPHOT *COMMON c_Taupair $ !Spin Polarimeter vector first Tau $ !Spin Polarimeter vector second Tau $ !Clone Spin Polarimeter vector first Tau $ !Clone Spin Polarimeter vector second Tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning st tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !Random Euler angle for cloning nd tau $ !phi of HvecTau1 $ !theta of HvecTau1 $ !phi of HvecTau2 $ !theta of HvecTau2 $ !super key
Definition: Taupair.h:42

◆ finalize()

StatusCode EvtDecay::finalize ( )

Definition at line 979 of file EvtDecay.cxx.

980{
981
982 if(EvtCalHelAmp::nevt>0){
983 double H2=EvtCalHelAmp::_H2;
984 double H1=EvtCalHelAmp::_H1;
985 double H0=EvtCalHelAmp::_H0;
986 double H2err=EvtCalHelAmp::_H2err;
987 double H1err=EvtCalHelAmp::_H1err;
988 double H0err=EvtCalHelAmp::_H0err;
989 int nd = EvtCalHelAmp::nevt;
990 std::cout<<"Calculated helicity amplitude sqaured are:"<<std::endl;
991 std::cout<<"|H_{2}|^2=|H_{-2}|^2= "<<H2/nd<<" +/- "<<sqrt(H2err/nd)<<endl;
992 std::cout<<"|H_{1}|^2=|H_{-1}|^2= "<<H1/nd<<" +/- "<<sqrt(H1err/nd)<<endl;
993 //std::cout<<"|H_{0}|^2= "<<H0/nd <<" +/- "<<sqrt(H0err/nd)<<endl;
994 }
995 MsgStream log(messageService(), name());
996 truth.close();
997 log << MSG::INFO << "EvtDecay finalized" << endreq;
998 fstream Forfile;
999 Forfile.open("fort.16",ios::in);
1000 char delcmd[300];
1001 strcpy(delcmd,"rm -f ");
1002 strcat(delcmd,"fort.16");
1003 // if(Forfile)system(delcmd);
1004
1005 fstream Forfile2;
1006 Forfile2.open("fort.22",ios::in);
1007 strcpy(delcmd,"rm -f ");
1008 strcat(delcmd,"fort.22");
1009 // if(Forfile2)system(delcmd);
1010
1011 // To get the branching fraction of the specified mode in Lundcharm Model
1012 /*
1013 EvtLundCharm lundcharmEvt;
1014 int nevt=lundcharmEvt.getTotalEvt();
1015 std::cout<<"The total number of the specified mode is "<<nevt<<std::endl;
1016 */
1017 int totalEvt=0;
1018 if(!(m_SB3File=="" || m_SB3HT=="")){
1019 for(int i=0;i<500;i++){totalEvt=totalEvt+br[i];}
1020 for(int i=0;i<500;i++){
1021 double bi=1.0*br[i]/totalEvt;
1022 std::cout<<"Branching fraction of channel "<<i<<" is: "<<bi<<std::endl;
1023 if(br[i]==0) break;
1024 }
1025 }
1026
1027 if(m_statDecays){
1028 int totalEvt=0;
1029 for(int i=0;i<=totalChannels;i++){totalEvt=totalEvt+br[i];}
1030 std::cout<<"==================Statistical first chain decay ==============================="<<std::endl;
1031 std::cout<<"i-th channel Events Generated Branching fraction generated "<<std::endl;
1032 for(int i=0;i<=totalChannels;i++){
1033 std::cout<<"| "<<i<<" "<<br[i]<<" "<<br[i]*1.0/totalEvt<<std::endl;
1034
1035 }
1036 std::cout<<"--------------------------------------------------------------------------------"<<std::endl;
1037 std::cout<<" sum: "<<totalEvt<<" "<<"1"<<std::endl;
1038 std::cout<<"================== End of statistical first chain decay ========================"<<std::endl;
1039 }
1040
1041 return StatusCode::SUCCESS;
1042}
static double _H0err
Definition: EvtCalHelAmp.hh:58
static double _H1err
Definition: EvtCalHelAmp.hh:58
static double _H0
Definition: EvtCalHelAmp.hh:58
static int nevt
Definition: EvtCalHelAmp.hh:59
static double _H1
Definition: EvtCalHelAmp.hh:58
static double _H2
Definition: EvtCalHelAmp.hh:58
static double _H2err
Definition: EvtCalHelAmp.hh:58

◆ getObsXsection()

double EvtDecay::getObsXsection ( double  mhds,
int  mode 
)

◆ HA()

double EvtDecay::HA ( double  i,
double  j,
vector< double >  Vexp,
std::vector< double >  vpars 
)

◆ HV()

double EvtDecay::HV ( double  i,
double  j,
vector< double >  Vexp,
std::vector< double >  vpars 
)

◆ initialize()

StatusCode EvtDecay::initialize ( )

Definition at line 136 of file EvtDecay.cxx.

136 {
137
138 MsgStream log(messageService(), name());
139 system("cat $BESEVTGENROOT/share/phokhara_9.1.fferr>phokhara_9.1.fferr");
140 system("cat $BESEVTGENROOT/share/phokhara_9.1.ffwarn>phokhara_9.1.ffwarn");
141
142 if(m_truthFile!=""){truth.open(m_truthFile.c_str());}
143 log << MSG::INFO << "EvtDecay initialize" << endreq;
144 static const bool CREATEIFNOTTHERE(true);
145 StatusCode RndmStatus = service("BesRndmGenSvc", p_BesRndmGenSvc, CREATEIFNOTTHERE);
146 if (!RndmStatus.isSuccess() || 0 == p_BesRndmGenSvc)
147 {
148 log << MSG::ERROR << " Could not initialize Random Number Service" << endreq;
149 return RndmStatus;
150 }
151
152 EvtGlobalSet::SV.clear();
153 for(int i=0;i<m_mystring.size();i++){EvtGlobalSet::SV.push_back(m_mystring[i]);}
154
155 EvtGlobalSet::iVV.clear();
156 EvtGlobalSet::dVV.clear();
157 std::vector<std::vector<int> >myivv;
158 std::vector<std::vector<double> >mydvv;
159
160 EvtConExc::SetMthr=m_SetMthr;
161
162 myivv.push_back(m_cluster0);
163 myivv.push_back(m_cluster1);
164 myivv.push_back(m_cluster2);
165
166 mydvv.push_back(m_wind0);
167 mydvv.push_back(m_wind1);
168 mydvv.push_back(m_wind2);
169
170 for(int i=0;i<myivv.size();i++){
171 std::vector<int> theivv;
172 for(int j=0;j<myivv[i].size();j++){
173 theivv.push_back(myivv[i][j]);
174 }
175 if(theivv.size()) EvtGlobalSet::iVV.push_back(theivv);
176 }
177
178 for(int i=0;i<mydvv.size();i++){
179 std::vector<double> thedvv;
180 for(int j=0;j<mydvv[i].size();j++){
181 thedvv.push_back(mydvv[i][j]);
182 }
183 if(thedvv.size()) EvtGlobalSet::dVV.push_back(thedvv);
184 }
185
186
187 if(m_eBeamPolarization>1) {std::cout<<"The e-beam polaziation should be in 0 to 1"<<std::endl;abort();}
188 m_numberEvent=0;
189 first = true;
190 m_ampscalflag = true;
191 // Save the random number seeds in the event
192 CLHEP::HepRandomEngine* engine = p_BesRndmGenSvc->GetEngine("EVTGEN");
193 const long s = engine->getSeed();
194 p_BesRndmGenSvc->setGenseed(s+1);
195
196 m_seeds.clear();
197 m_seeds.push_back(s);
198 totalChannels = 0;
199
200 // open an interface to EvtGen
201
202 if ( m_DecayDec == "") { //use default DECAY.DEC and pdt.table if not defined by user
203 m_DecayDec=getenv("BESEVTGENROOT");
204 m_DecayDec +="/share/DECAY.DEC";
205 }
206
207 if ( m_PdtTable == "") {
208 m_PdtTable =getenv("BESEVTGENROOT");
209 m_PdtTable +="/share/pdt.table";
210 }
211
212 char catcmd[300]; //output user decay cards to log file
213 std::cout<<"===================== user decay card ========================"<<std::endl;
214 strcpy(catcmd, "cat ");
215 strcat(catcmd, userDecFileName.c_str());
216 system(catcmd);
217
220
221 // write decay cards to the root file: pingrg@2009-09-09
222 StatusCode status;
223 status = service("DataInfoSvc",tmpInfoSvc);
224 if (status.isSuccess()) {
225 log << MSG::INFO << "got the DataInfoSvc" << endreq;
226 dataInfoSvc=dynamic_cast<DataInfoSvc *>(tmpInfoSvc);
227 dataInfoSvc->setDecayCard(userDecFileName);
228 } else {
229 log << MSG::ERROR << "could not get the DataInfoSvc" << endreq;
230 return StatusCode::FAILURE;
231 }
232
233
234
235 m_RandomEngine = new EvtBesRandom(engine);
236 m_Gen = new EvtGen( m_DecayDec.c_str(), m_PdtTable.c_str(), m_RandomEngine );
237
238 if(userDecFileName =="NONE") log << MSG::INFO << "EvtDecay User did not define his Decay table EvtGen will use standart" << endreq;
239 if(!(userDecFileName =="NONE")) m_Gen->readUDecay(userDecFileName.c_str());
240
241 if(!(m_DecayTop==" ")) {
242 outfile.open(m_DecayTop.c_str());
243 }
244
245 //for output Ntuple file, pingrg-2009-09-07
246
247
248 if(m_NtupleFile) {
249 NTuplePtr nt1(ntupleSvc(),"MYROOTFILE/Trk");
250 if(nt1) {m_tuple=nt1;}
251 else {
252 m_tuple = ntupleSvc()->book ("MYROOTFILE/Trk", CLID_ColumnWiseTuple, "Generator-trk-Ntuple");
253 if(m_tuple){
254 status = m_tuple->addItem ("TotNumTrk", TotNumTrk, 0,100);
255 status = m_tuple->addIndexedItem ("Trk_index", TotNumTrk, m_Trk_index);
256 status = m_tuple->addIndexedItem ("m_px_trk", TotNumTrk, m_px_trk);
257 status = m_tuple->addIndexedItem ("m_py_trk", TotNumTrk, m_py_trk);
258 status = m_tuple->addIndexedItem ("m_pz_trk", TotNumTrk, m_pz_trk);
259 status = m_tuple->addIndexedItem ("m_en_trk", TotNumTrk, m_en_trk);
260 status = m_tuple->addIndexedItem ("FST", TotNumTrk, m_fst);
261
262 status = m_tuple->addItem ("nchr", m_nchr);
263 status = m_tuple->addItem ("nchr_e", m_nchr_e);
264 status = m_tuple->addItem ("nchr_mu", m_nchr_mu);
265 status = m_tuple->addItem ("nchr_pi", m_nchr_pi);
266 status = m_tuple->addItem ("nchr_k", m_nchr_k);
267 status = m_tuple->addItem ("nchr_p", m_nchr_p);
268 status = m_tuple->addItem ("N_gamma", m_gamma);
269 status = m_tuple->addItem ("N_gammaFSR", m_gammaFSR);
270 status = m_tuple->addItem ("Flag1", m_flag1);
271 } else {
272 log << MSG::ERROR << " Cannot book N-tuple:"<< long(m_tuple) << endmsg;
273 return StatusCode::FAILURE;
274 }
275 }
276
277 NTuplePtr nt2(ntupleSvc(),"MYROOTFILE/mass");
278 if(nt2) {mass_tuple=nt2;}
279 else {
280 mass_tuple = ntupleSvc()->book ("MYROOTFILE/mass", CLID_ColumnWiseTuple, "Generator-mass-Ntuple");
281 if(mass_tuple){
282 status = mass_tuple->addItem ("m12", m_m12);
283 status = mass_tuple->addItem ("m13", m_m13);
284 status = mass_tuple->addItem ("m23", m_m23);
285 status = mass_tuple->addItem ("m1", m_m1);
286 status = mass_tuple->addItem ("m2", m_m2);
287 status = mass_tuple->addItem ("m3", m_m3);
288 status = mass_tuple->addItem ("costheta1", m_cos1);
289 status = mass_tuple->addItem ("costheta2", m_cos2);
290 status = mass_tuple->addItem ("costheta3", m_cos3);
291 status = mass_tuple->addItem ("ichannel", m_ich);
292 } else {
293 log << MSG::ERROR << " Cannot book N-tuple:"<< long(m_tuple) << endmsg;
294 return StatusCode::FAILURE;
295 }
296 }
297
298 NTuplePtr nt3(ntupleSvc(),"MYROOTFILE/massGen");
299 if(nt3) {massgen_tuple=nt3;}
300 else {
301 massgen_tuple = ntupleSvc()->book ("MYROOTFILE/massGen", CLID_ColumnWiseTuple, "Generator-mass-Ntuple");
302 if(massgen_tuple){
303 status = massgen_tuple->addItem ("m12", _m12);
304 status = massgen_tuple->addItem ("m13", _m13);
305 status = massgen_tuple->addItem ("m23", _m23);
306 status = massgen_tuple->addItem ("m1", _m1);
307 status = massgen_tuple->addItem ("m2", _m2);
308 status = massgen_tuple->addItem ("m3", _m3);
309 status = massgen_tuple->addItem ("costheta1", _cos1);
310 status = massgen_tuple->addItem ("costheta2", _cos2);
311 status = massgen_tuple->addItem ("costheta3", _cos3);
312 status = massgen_tuple->addItem ("ichannel", _ich);
313 } else {
314 log << MSG::ERROR << " Cannot book N-tuple:"<< long(m_tuple) << endmsg;
315 return StatusCode::FAILURE;
316 }
317 }
318
319
320 }
321 for(int i=0;i<500;i++){br[i]=0;}
322 if(!(m_SB3File=="" && m_SB3HT=="")) {
323 const char *filename, *histitle;
324 filename=(char*)m_SB3File.c_str();
325 histitle=(char*)m_SB3HT.c_str();
326 SuperBody3decay.setFile(filename);
327 SuperBody3decay.setHTitle(histitle);
328 SuperBody3decay.init();
329 }
330
331 return StatusCode::SUCCESS;
332}
XmlRpcServer s
Definition: HelloServer.cpp:11
void setDecayCard(string card)
Definition: DataInfoSvc.cxx:50
static double SetMthr
Definition: EvtConExc.hh:142
DataInfoSvc * dataInfoSvc
Definition: EvtDecay.h:75
IDataInfoSvc * tmpInfoSvc
Definition: EvtDecay.h:74
Definition: EvtGen.hh:46
void readUDecay(const char *const udecay_name)
Definition: EvtGen.cc:126
static std::vector< std::string > SV
Definition: EvtGlobalSet.hh:19
static std::vector< std::vector< double > > dVV
Definition: EvtGlobalSet.hh:21
static std::vector< std::vector< int > > iVV
Definition: EvtGlobalSet.hh:22
void init()
Definition: EvtHis2F.cc:98
void setHTitle(const char *htitle)
Definition: EvtHis2F.cc:40
void setFile(const char *dtfile)
Definition: EvtHis2F.cc:35
virtual void setGenseed(long)=0
virtual CLHEP::HepRandomEngine * GetEngine(const std::string &StreamName)=0
Interface to the CLHEP engine.

Member Data Documentation

◆ dataInfoSvc

DataInfoSvc* EvtDecay::dataInfoSvc

Definition at line 75 of file EvtDecay.h.

Referenced by initialize().

◆ tmpInfoSvc

IDataInfoSvc* EvtDecay::tmpInfoSvc

Definition at line 74 of file EvtDecay.h.

Referenced by initialize().


The documentation for this class was generated from the following files: