00001 #include <iostream.h>
00002
00003 class St_geant_Maker;
00004 class EEmcMCData;
00005
00006
00007 #define WRITE_FILE
00008
00009 TBrowser *b = 0;
00010 St_geant_Maker *geant= 0;
00011
00012
00013
00014 void fzd2bin(const Int_t Nevents=5, const Char_t *fzfile ="muon.fzd",int socketID=9093) {
00015 Int_t i=0;
00016
00017 gSystem->Load("EEmc.so");
00018 gROOT->LoadMacro("bfc.C");
00019 bfc(0,"fzin sim_T gen_T",fzfile);
00020
00021 #ifdef WRITE_SOCKET
00022 cout<<"opening socket="<<socketID<<"\n";
00023 TServerSocket *ss = new TServerSocket(socketID, kTRUE);
00024 cout<<"waits for client1...\n";
00025
00026 TSocket *s0 = ss->Accept();
00027 cout<<"waits 2...\n";
00028 #endif
00029
00030 for (i=1; i<=Nevents; i++ ) {
00031 chain->Clear();
00032 if (chain->Make(i)>=kStEOF) break;
00033 printf("%2d ====================================\n",i);
00034 St_g2t_ctf_hit *emc_hit = (St_g2t_ctf_hit *) chain->FindObject("g2t_eem_hit");
00035 if (emc_hit==0) continue;
00036
00037 #ifdef WRITE_SOCKET// ...... use socket to transport data
00038 cout<<"sending this event via socket ...\n";
00039
00040 EEmcMCData data;
00041 const int mx=1<<14;
00042 char hitBuf[mx];
00043 int nh = data.decode(emc_hit);
00044 cerr << "actual hits " << nh << endl;
00045 int nbw = ev->write(hitBuf,mx);
00046 int ret=s0->SendRaw(hitBuf,nbw);
00047 cout<<ret<<" char sent\n";
00048 if(ret!=nbw) {
00049 cerr<<"socekt Error1 "<<ret<<" "<<nbw<<endl;
00050 }
00051 #endif
00052
00053 #ifdef WRITE_FILE // ...... write events to bin file
00054 static FILE *fd=0;
00055 if(fd==0) {fd=fopen("data.bin","w"); assert(fd);}
00056 EEmcMCData data;
00057 const int mx=1<<14;
00058 char hitBuf[mx];
00059 int nh = data.decode(emc_hit);
00060 cerr << "actual hits " << nh << endl;
00061 int nbw = data->write(hitBuf,mx);
00062 char *cnbw=&nbw;
00063 int j;
00064 for(j=0;j<sizeof(int);j++) fputc(cnbw[j],fd);
00065 for(j=0;j<nbw;j++) fputc(hitBuf[j],fd);
00066 #endif
00067
00068
00069 EEuse1 jan(emc_hit);
00070 jan.work();
00071
00072
00073 }
00074 }
00075
00076
00077
00078 #if 0
00079
00080 EEmcMCData *ev = new EEmcMCData;
00081 EEmcMCData *evcopy = new EEmcMCData;
00082
00083 char *hitBuf = new char[16384];
00084
00085
00086
00087 int nh = ev->decode(emc_hit);
00088 cerr << "actual hits " << nh << endl;
00089 ev->print();
00090 int nbw = ev->write(hitBuf,4096);
00091 cerr << "actual writ " << nbw << " bytes " << endl;
00092 int nbr = evcopy->read(hitBuf,nbw);
00093 cerr << "actual read " << nbr << " bytes " << endl;
00094 evcopy->print();
00095 #endif