00001
00002
00003
00004
00005
00006 #include "BDSParser.h"
00007 #include "BDSPad.h"
00008 #include "BDSCanvas.h"
00009
00010 using namespace std;
00011
00012 BDSParser::BDSParser()
00013 {
00014
00015
00016 }
00017
00018 void BDSParser::LoadFile(BDSPad* _pad, char* _path)
00019 {
00020 gmad_parser(_path);
00021 list<struct Element>::iterator it;
00022 Double_t s_current=0.;
00023 Int_t nelement=1;
00024 TString temp;
00025 ((BDSCanvas*)gPad->GetCanvas())->EndPositionElement[nelement]=0.;
00026 _pad->Begin();
00027 for(it = beamline_list.begin();it!=beamline_list.end();it++)
00028 {
00029 if((*it).l> 1e-9)
00030 {
00031 s_current += (*it).l;
00032
00033 if((*it).type==_RCOL || (*it).type==_ECOL)
00034 {
00035 ((BDSCanvas*)gPad->GetCanvas())->ElementXAper[nelement]=(*it).xsize;
00036 ((BDSCanvas*)gPad->GetCanvas())->ElementYAper[nelement]=(*it).ysize;
00037
00038 }
00039 else
00040 {
00041 if((*it).aper!=0)
00042 {
00043 ((BDSCanvas*)gPad->GetCanvas())->ElementXAper[nelement]=(*it).aper;
00044 ((BDSCanvas*)gPad->GetCanvas())->ElementYAper[nelement]=(*it).aper;
00045 }
00046
00047 else
00048 {
00049 ((BDSCanvas*)gPad->GetCanvas())->ElementXAper[nelement]=options.beampipeRadius;
00050 ((BDSCanvas*)gPad->GetCanvas())->ElementYAper[nelement]=options.beampipeRadius;
00051 }
00052 }
00053 ((BDSCanvas*)gPad->GetCanvas())->EndPositionElement[nelement]=s_current;
00054 temp=Form((*it).name);
00055 ((BDSCanvas*)gPad->GetCanvas())->NameElement[nelement]=temp;
00056 temp=Form(typestr((*it).type));
00057 ((BDSCanvas*)gPad->GetCanvas())->TypeElement[nelement]=temp;
00058 _pad->AddBDSBox(*it,s_current);
00059 cout << (*it).name <<
00060 "\t\t"<<s_current-(*it).l<<"\t\t"<<s_current<<"\t\t"<<(*it).l<<endl;
00061 nelement++;
00062 }
00063 }
00064 ((BDSCanvas*)gPad->GetCanvas())->NumberElement=nelement-1;
00065 cout << "total length " << s_current<< endl;
00066 _pad->End();
00067 }
00068