BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPhokhara_4pi Class Reference

#include <EvtPhokhara_4pi.hh>

+ Inheritance diagram for EvtPhokhara_4pi:

Public Member Functions

 EvtPhokhara_4pi ()
 
virtual ~EvtPhokhara_4pi ()
 
void getName (std::string &name)
 
EvtDecayBaseclone ()
 
void decay (EvtParticle *p)
 
std::string commandName ()
 
void command (std::string cmd)
 
void init ()
 
void init_mode (EvtParticle *p)
 
void init_evt (EvtParticle *p)
 
void initProbMax ()
 
int getTotalEvt ()
 
void PhokharaInit (int dummy)
 
void ExclusiveDecay (EvtParticle *p)
 
void init_pars ()
 
- Public Member Functions inherited from EvtDecayIncoherent
void makeDecay (EvtParticle *p)
 
virtual ~EvtDecayIncoherent ()
 
void setDaughterSpinDensity (int daughter)
 
int isDaughterSpinDensitySet (int daughter)
 
- Public Member Functions inherited from EvtDecayBase
double getProbMax (double prob)
 
double resetProbMax (double prob)
 
 EvtDecayBase ()
 
virtual ~EvtDecayBase ()
 
virtual bool matchingDecay (const EvtDecayBase &other) const
 
EvtId getParentId ()
 
double getBranchingFraction ()
 
void disableCheckQ ()
 
void checkQ ()
 
int getNDaug ()
 
EvtIdgetDaugs ()
 
EvtId getDaug (int i)
 
int getNArg ()
 
int getPHOTOS ()
 
void setPHOTOS ()
 
void setVerbose ()
 
void setSummary ()
 
double * getArgs ()
 
std::string * getArgsStr ()
 
double getArg (int j)
 
std::string getArgStr (int j)
 
std::string getModelName ()
 
int getDSum ()
 
int summary ()
 
int verbose ()
 
void saveDecayInfo (EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
 
void printSummary ()
 
void setProbMax (double prbmx)
 
void noProbMax ()
 
void checkNArg (int a1, int a2=-1, int a3=-1, int a4=-1)
 
void checkNDaug (int d1, int d2=-1)
 
void checkSpinParent (EvtSpinType::spintype sp)
 
void checkSpinDaughter (int d1, EvtSpinType::spintype sp)
 
virtual int nRealDaughters ()
 

Additional Inherited Members

- Static Public Member Functions inherited from EvtDecayBase
static void findMasses (EvtParticle *p, int ndaugs, EvtId daugs[10], double masses[10])
 
static void findMass (EvtParticle *p)
 
static double findMaxMass (EvtParticle *p)
 
- Protected Member Functions inherited from EvtDecayBase
bool daugsDecayedByParentModel ()
 
- Protected Attributes inherited from EvtDecayBase
bool _daugsDecayedByParentModel
 

Detailed Description

Definition at line 33 of file EvtPhokhara_4pi.hh.

Constructor & Destructor Documentation

◆ EvtPhokhara_4pi()

EvtPhokhara_4pi::EvtPhokhara_4pi ( )

Definition at line 67 of file EvtPhokhara_4pi.cc.

67{}

Referenced by clone().

◆ ~EvtPhokhara_4pi()

EvtPhokhara_4pi::~EvtPhokhara_4pi ( )
virtual

Definition at line 68 of file EvtPhokhara_4pi.cc.

68 {
69 int i;
70 //the deletion of commands is really uggly!
71
72 if (nphokharadecays==0) {
73 delete [] commands;
74 commands=0;
75 return;
76 }
77
78 for(i=0;i<nphokharadecays;i++){
79 if (phokharadecays[i]==this){
80 phokharadecays[i]=phokharadecays[nphokharadecays-1];
81 nphokharadecays--;
82 if (nphokharadecays==0) {
83 delete [] commands;
84 commands=0;
85 }
86 return;
87 }
88 }
89
90 report(ERROR,"EvtGen") << "Error in destroying Phokhara model!"<<endl;
91
92}
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:36
@ ERROR
Definition EvtReport.hh:49

Member Function Documentation

◆ clone()

EvtDecayBase * EvtPhokhara_4pi::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 101 of file EvtPhokhara_4pi.cc.

101 {
102
103 return new EvtPhokhara_4pi;
104
105}

◆ command()

void EvtPhokhara_4pi::command ( std::string cmd)
virtual

Reimplemented from EvtDecayBase.

Definition at line 159 of file EvtPhokhara_4pi.cc.

159 {
160
161 if (ncommand==lcommand){
162
163 lcommand=10+2*lcommand;
164
165 std::string* newcommands=new std::string[lcommand];
166
167 int i;
168
169 for(i=0;i<ncommand;i++){
170 newcommands[i]=commands[i];
171 }
172
173 delete [] commands;
174
175 commands=newcommands;
176
177 }
178
179 commands[ncommand]=cmd;
180
181 ncommand++;
182
183}

◆ commandName()

std::string EvtPhokhara_4pi::commandName ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 153 of file EvtPhokhara_4pi.cc.

153 {
154
155 return std::string("PhokharaPar");
156
157}

◆ decay()

void EvtPhokhara_4pi::decay ( EvtParticle * p)
virtual

Implements EvtDecayBase.

Definition at line 187 of file EvtPhokhara_4pi.cc.

187 {
188 EvtId myvpho=EvtPDL::getId("vpho");
189 if(p->getId()!=myvpho) {std::cout<<"Parent particle is required to be vpho for Phokhara model"<<std::endl;abort();}
190 if(nevtgen==0) {init_mode(p);}
191 else{init_evt(p);}
192 std::cout<<"PHOKHARA : 2(pi+pi-) mode "<<std::endl;
193
194
195 int istdheppar=EvtPDL::getStdHep(p->getId());
196 int ntrials = 0;
197 int tr_old[3];
198 tr_old[0] = (int)maxima_.tr[0];
199 tr_old[1] = (int)maxima_.tr[1];
200 tr_old[2] = (int)maxima_.tr[2];
201
202 while( ntrials < 1000000)
203 {
204 ievent++;
205 RANLXDF(Ar_r,1);
206 Ar[1] = Ar_r[0];
207
208 if (Ar[1] <= (maxima_.Mmax[0]/(maxima_.Mmax[0]+maxima_.Mmax[1]+maxima_.Mmax[2]))) {
209 maxima_.count[0] = maxima_.count[0]+1.0;
210 GEN_0PH(2,qqmin,ctes_.Sp,cos3min,cos3max);
211 }else
212 if (Ar[1] <= ( (maxima_.Mmax[0]+maxima_.Mmax[1])/(maxima_.Mmax[0]+maxima_.Mmax[1]+maxima_.Mmax[2]))) {
213 maxima_.count[1] = maxima_.count[1]+1.0;
214 GEN_1PH(2,qqmin,qqmax,cos1min,cos1max,cos3min,cos3max);
215 }
216 else {
217 maxima_.count[2] = maxima_.count[2]+1.0;
218 GEN_2PH(2,qqmin,cos1min,cos1max,cos2min,cos2max,cos3min,cos3max);
219 }
220
221 if( ((int)maxima_.tr[0]+(int)maxima_.tr[1]+(int)maxima_.tr[2]) > (tr_old[0]+tr_old[1]+tr_old[2]) ) // event accepted after cuts
222 {
223 goto storedEvents;
224 }
225 ntrials ++;
226 }
227 std::cout <<"FATAL: Could not satisfy cuts after " << ntrials << "trials. Terminate." <<std::endl;
228 //----
229 storedEvents:
230 int more=0;
231 int numstable=0;
232 int numparton=0;
233 EvtId evtnumstable[100];//
234 EvtVector4R p4[20];
235
236 // except ISR photos, products depending on channel
237 if (flags_.pion == 0) { // mu+ mu-
238 // mu+
239 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-13);
240 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
241 numstable++;
242 // mu -
243 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(13);
244 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
245 numstable++;
246 }
247 if (flags_.pion == 1) { // pi+ pi-
248 // pi+
249 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
250 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
251 numstable++;
252 // pi -
253 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
254 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
255 numstable++;
256 }
257 if (flags_.pion == 2) { // pi+ pi-2pi0
258 // pi0
259 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
260 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
261 numstable++;
262 // pi0
263 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
264 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
265 numstable++;
266 // pi-
267 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
268 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
269 numstable++;
270 // pi +
271 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
272 p4[numstable].set(ctes_.momenta[0][8],ctes_.momenta[1][8], ctes_.momenta[2][8], ctes_.momenta[3][8]);
273 numstable++;
274 }
275 if (flags_.pion == 3) { // 2(pi+ pi-)
276 // pi+
277 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
278 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
279 numstable++;
280 // pi-
281 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
282 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
283 numstable++;
284 // pi+
285 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
286 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
287 numstable++;
288 // pi -
289 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
290 p4[numstable].set(ctes_.momenta[0][8],ctes_.momenta[1][8], ctes_.momenta[2][8], ctes_.momenta[3][8]);
291 numstable++;
292 }
293 if (flags_.pion == 4) { // ppbar
294 // pbar
295 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-2212);
296 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
297 numstable++;
298 // p
299 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(2212);
300 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
301 numstable++;
302 }
303 if (flags_.pion == 5) { // nnbar
304 // pbar
305 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-2112);
306 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
307 numstable++;
308 // p
309 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(2112);
310 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
311 numstable++;
312 }
313 if (flags_.pion == 6) { // K+ K-
314 // K+
315 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(321);
316 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
317 numstable++;
318 // K -
319 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-321);
320 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
321 numstable++;
322 }
323 if (flags_.pion == 7) { // K0K0bar
324 // Kbar
325 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(311);
326 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
327 numstable++;
328 // K0
329 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-311);
330 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
331 numstable++;
332 }
333 if (flags_.pion == 8) { // pi+ pi-pi0
334 // pi+
335 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
336 p4[numstable].set(ctes_.momenta[0][5],ctes_.momenta[1][5], ctes_.momenta[2][5], ctes_.momenta[3][5]);
337 numstable++;
338 // pi-
339 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
340 p4[numstable].set(ctes_.momenta[0][6],ctes_.momenta[1][6], ctes_.momenta[2][6], ctes_.momenta[3][6]);
341 numstable++;
342 // pi0
343 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(111);
344 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
345 numstable++;
346 }
347 if (flags_.pion == 9) { //Lambda Lambdabar-> pi+ pi- ppbar
348 // pi+
349 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(211);
350 p4[numstable].set(ctes_.momenta[0][7],ctes_.momenta[1][7], ctes_.momenta[2][7], ctes_.momenta[3][7]);
351 numstable++;
352 // pbar
353 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-2212);
354 p4[numstable].set(ctes_.momenta[0][8],ctes_.momenta[1][8], ctes_.momenta[2][8], ctes_.momenta[3][8]);
355 numstable++;
356 // pi-
357 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(-211);
358 p4[numstable].set(ctes_.momenta[0][9],ctes_.momenta[1][9], ctes_.momenta[2][9], ctes_.momenta[3][9]);
359 numstable++;
360 // p
361 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(2212);
362 p4[numstable].set(ctes_.momenta[0][10],ctes_.momenta[1][10], ctes_.momenta[2][10], ctes_.momenta[3][10]);
363 numstable++;
364 }
365
366 // ISR gamma
367 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
368 p4[numstable].set(ctes_.momenta[0][2],ctes_.momenta[1][2], ctes_.momenta[2][2], ctes_.momenta[3][2]);
369 numstable++;
370 if( ctes_.momenta[0][3] != 0 ) // second photon exists
371 {
372 evtnumstable[numstable]=EvtPDL::evtIdFromStdHep(22);
373 p4[numstable].set(ctes_.momenta[0][3],ctes_.momenta[1][3], ctes_.momenta[2][3], ctes_.momenta[3][3]);
374 numstable++;
375 }
376
377 int channel=EvtDecayTable::inChannelList(p->getId(),numstable,evtnumstable);
378 more=(channel!=-1);
379 if(more) {std::cout<<"Existence of mode "<<channel<<" in exclusive decay list has the same final state as this one"<<std::endl;abort(); }
380
381 p->makeDaughters(numstable,evtnumstable);
382 //double weight = p->initializePhaseSpace(getNDaug(),getDaugs());
383
384 int ndaugFound=0;
385 EvtVector4R SUMP4(0,0,0,0);
386 for(int i=0;i<numstable;i++){
387 p->getDaug(i)->init(evtnumstable[i],p4[i]);
388 ndaugFound++;
389 }
390 if ( ndaugFound == 0 ) {
391 report(ERROR,"EvtGen") << "Phokhara has failed to do a decay ";
392 report(ERROR,"EvtGen") << EvtPDL::name(p->getId()).c_str() << " " << p->mass()<<endl;
393 assert(0);
394 }
395
396 nevtgen++;
397 return ;
398
399}
#define GEN_1PH(I, QQMIN, QQMAX, COS1MIN, COS1MAX, COS3MIN, COS3MAX)
#define RANLXDF(AR, VAL)
#define GEN_0PH(I, QQMIN, SP, COS3MIN, COS3MAX)
struct @15 ctes_
struct @21 maxima_
struct @22 flags_
#define GEN_2PH(I, QQMIN, COS1MIN, COS1MAX, COS2MIN, COS2MAX, COS3MIN, COS3MAX)
static int inChannelList(EvtId parent, int ndaug, EvtId *daugs)
Definition EvtId.hh:27
static int getStdHep(EvtId id)
Definition EvtPDL.hh:56
static EvtId evtIdFromStdHep(int stdhep)
Definition EvtPDL.cc:244
static std::string name(EvtId i)
Definition EvtPDL.hh:64
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:287
void makeDaughters(int ndaug, EvtId *id)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtId getId() const
EvtParticle * getDaug(int i)
double mass() const
void init_evt(EvtParticle *p)
void init_mode(EvtParticle *p)
double double double * p4
Definition qcdloop1.h:77

◆ ExclusiveDecay()

void EvtPhokhara_4pi::ExclusiveDecay ( EvtParticle * p)

◆ getName()

void EvtPhokhara_4pi::getName ( std::string & name)
virtual

Implements EvtDecayBase.

Definition at line 95 of file EvtPhokhara_4pi.cc.

95 {
96
97 model_name="PHOKHARA_4pi";
98
99}

◆ getTotalEvt()

int EvtPhokhara_4pi::getTotalEvt ( )
inline

Definition at line 52 of file EvtPhokhara_4pi.hh.

52{return nevt;}

◆ init()

void EvtPhokhara_4pi::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 126 of file EvtPhokhara_4pi.cc.

126 {
127 checkNArg(0);
128
129 std::string locvp=getenv("BESEVTGENROOT");
130 system("cat $BESEVTGENROOT/share/phokhara_10.0.param>phokhara_10.0.param");
131 system("cat $BESEVTGENROOT/share/phokhara_10.0.fferr>phokhara_10.0.fferr");
132 system("cat $BESEVTGENROOT/share/phokhara_10.0.ffwarn>phokhara_10.0.ffwarn");
133
134
135 if (getParentId().isAlias()){
136
137 report(ERROR,"EvtGen") << "EvtPhokhara finds that you are decaying the"<<endl
138 << " aliased particle "
139 << EvtPDL::name(getParentId()).c_str()
140 << " with the Phokhara model"<<endl
141 << " this does not work, please modify decay table."
142 << endl;
143 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
144 ::abort();
145
146 }
147
148 store(this);
149
150}
EvtId getParentId()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)

◆ init_evt()

void EvtPhokhara_4pi::init_evt ( EvtParticle * p)

======== list parameters to be initialized

Definition at line 437 of file EvtPhokhara_4pi.cc.

437 {
438 m_pion=3;
439 // mu+mu-(0),pi+pi-(1),2pi0pi+pi-(2),
440 // 2pi+2pi-(3),ppbar(4),nnbar(5),
441 // K+K-(6),K0K0bar(7),pi+pi-pi0(8),
442 // Lamb Lambbar->pi-pi+ppbar(9)
443#include "Phokhara_init_evt.txt"
444}

Referenced by decay().

◆ init_mode()

void EvtPhokhara_4pi::init_mode ( EvtParticle * p)

======== list parameters to be initialized

Definition at line 115 of file EvtPhokhara_4pi.cc.

115 {
116 m_pion=3;
117 // mu+mu-(0),pi+pi-(1),2pi0pi+pi-(2),
118 // 2pi+2pi-(3),ppbar(4),nnbar(5),
119 // K+K-(6),K0K0bar(7),pi+pi-pi0(8),
120 // Lamb Lambbar->pi-pi+ppbar(9)
121#include "Phokhara_init_mode.txt"
122}

Referenced by decay().

◆ init_pars()

void EvtPhokhara_4pi::init_pars ( )

Definition at line 447 of file EvtPhokhara_4pi.cc.

447 {
448 m_tagged = 0;
449 m_nm = 50000 ; // # of events to determine the maximum
450 m_nlo = 1; // Born(0), NLO(1)
451 m_w = 0.00001; // soft photon cutoff
452 m_fsr = 0; // ISR only(0), ISR+FSR(1), ISR+INT+FSR(2)
453 m_fsrnlo = 0 ; // yes(1), no(0)
454 m_NarrowRes = 0 ;// none(0) jpsi(1) psip(2)
455 m_FF_Kaon = 1 ; // constrained (0), unconstrained (1), Kuhn-Khodjamirian-Bruch (2)
456 m_ivac = 0; // yes(1), no(0)
457 m_FF_Pion = 0 ; // KS Pionformfactor(0), GS Pionformfactor old(1) and new(2)
458 m_f0_model = 0 ; // f0+f0(600): KK model(0), no structure(1), no f0+f0(600)(2), f0 KLOE(3)
459 m_q2min = (4*0.135)*(4*0.135); // minimal hadrons(muons)-gamma-inv mass squared (GeV^2)
460 m_q2_min_c = m_q2min ; // minimal inv. mass squared of the hadrons(muons)(GeV^2)
461 m_q2_max_c = m_E*m_E; // maximal inv. mass squared of the hadrons(muons)(GeV^2)
462 m_gmin = 0.001; // minimal photon energy/missing energy (GeV) //total Ecm will reduce m_gmin
463 m_phot1cut = 0.0; // maximal photon angle/missing momentum angle (grad)
464 m_phot2cut = 180.0; // maximal photon angle/missing momentum angle (grad)
465 m_pi1cut = 0.0 ; // minimal hadrons(muons) angle (grad)
466 m_pi2cut = 180.0; // maximal hadrons(muons) angle (grad)
467 if(!(m_pion==0 || m_pion==1 || m_pion==6)){m_fsr = 0; m_fsrnlo = 0 ;}
468 if( m_pion==9 ){m_nlo = 0 ;}
469}

◆ initProbMax()

void EvtPhokhara_4pi::initProbMax ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 108 of file EvtPhokhara_4pi.cc.

108 {
109
110 noProbMax();
111
112}

◆ PhokharaInit()

void EvtPhokhara_4pi::PhokharaInit ( int dummy)

Definition at line 424 of file EvtPhokhara_4pi.cc.

424 {
425 static int first=1;
426 if (first){
427
428 first=0;
429 //for(int i=0;i<ncommand;i++)
430 // lugive0_(commands[i].c_str(),strlen(commands[i].c_str()));
431 }
432
433}
Index first(Pair i)

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