#include "TString.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "TDirectory.h"
#include "TFile.h"
#include "TSystem.h"
int ifebsn[8]={21,23,22,25, 27,28,29,30};
int getsn(const char *fname="test.xml"){
const char *f= gDirectory->GetFile()->GetName();
const char *t= gDirectory->Get("hxy0_sum_0")->GetTitle();
const char *d= gDirectory->Get("h2d_0")->GetTitle();
char h0[0xFF];
sscanf(t,"HAPD=%s",h0);
TDatime c = gDirectory->GetFile()->GetCreationDate();
const char *date= c.AsString();
FILE *fp=fopen(fname,"a");
TString sdna(d);
TObjArray *tdna = sdna.Tokenize(" ");
TString x(h0);
TObjArray *tx = x.Tokenize(",");
char run[0xf];
strncpy(run,gSystem->BaseName(f),4);
run[4]=0;
fprintf(fp,"<run id='%s' date='%s'>\n",run, date);
for (Int_t i = 0; i < tx->GetEntries(); i++) {
const char *sn = ((TObjString *)(tx->At(i)))->GetString();
const char *dna =(tdna->GetEntries()>=4)? ((TObjString *)(tdna->At(i)))->GetString() : " ";
char *mdna = (char *)&dna[5];
char sfeb[20];
if (strstr(sn,"/")!=NULL){
TString ssn(sn);
TObjArray *tsn = ssn.Tokenize("/");
const char *hapdsn = ((TObjString *)(tsn->At(0)))->GetString();
const char *febsnc = "000";
const char *febsn = ((TObjString *)(tsn->At(1)))->GetString();
sprintf(sfeb,"%s",febsn);
fprintf(fp, "<pos id='%d'><hapd>%s</hapd><feb>%s</feb><dna>%s</dna></pos>\n", i, hapdsn, sfeb,mdna );
} else {
sprintf(sfeb,"%03d", ifebsn[(4*(atoi(run)-1)+i)%8]);
fprintf(fp, "<pos id='%d'><hapd>%s</hapd><feb>%s</feb><dna>%s</dna></pos>\n", i, sn, sfeb,mdna );
}
}
//fprintf(fp,"</run>\n");
fprintf(stdout,"%s %s\n",gSystem->BaseName(f),t);
fclose(fp);
return 0;
}