#include <fstream>
#include <stdio.h>
#include <iostream>
#include <TChain.h>
#include <TTree.h>
#include <TFile.h>
#include <TEventList.h>
#include <TNamed.h>
#include <time.h>
#include <sys/stat.h>
#ifndef __PACKETID_H
#define __PACKETID_H
#include "packetID.h"
#endif
#include "TTarget.h"
#include "TExperiment.h"
ClassImp(TExperiment);
ClassImp(TBufferHeader);
TExperiment::TExperiment(const char *name) {
fName = name;
TBufferHeader::Class()->IgnoreTObjectStreamer();
#ifdef EXPERIMENT_03045
TNamed::Class()->IgnoreTObjectStreamer();
#endif
#ifdef MCPCLASS_FLAG
TMcp::Class()->IgnoreTObjectStreamer();
TMcpDet::Class()->IgnoreTObjectStreamer();
mcp = new TMcp();
#endif
#ifdef HIRACLASS_FLAG
THiRA::Class()->IgnoreTObjectStreamer();
TTele::Class()->IgnoreTObjectStreamer();
THiRASiDet::Class()->IgnoreTObjectStreamer();
TDelta::Class()->IgnoreTObjectStreamer();
TFront::Class()->IgnoreTObjectStreamer();
TBack::Class()->IgnoreTObjectStreamer();
TCsI::Class()->IgnoreTObjectStreamer();
THiRAPixel::Class()->IgnoreTObjectStreamer();
hira = new THiRA();
#endif
#ifdef S800CLASS_FLAG
TS800::Class()->IgnoreTObjectStreamer();
TS800Scintillator::Class()->IgnoreTObjectStreamer();
TS800Crdc::Class()->IgnoreTObjectStreamer();
TS800CrdcPads::Class()->IgnoreTObjectStreamer();
TS800CrdcCalc::Class()->IgnoreTObjectStreamer();
TS800FpTrack::Class()->IgnoreTObjectStreamer();
TS800ImTrack::Class()->IgnoreTObjectStreamer();
TS800Map::Class()->IgnoreTObjectStreamer();
TS800IonChamber::Class()->IgnoreTObjectStreamer();
TS800Tppac::Class()->IgnoreTObjectStreamer();
TS800Trigger::Class()->IgnoreTObjectStreamer();
TS800TimeOfFlight::Class()->IgnoreTObjectStreamer();
s800 = new TS800();
#endif
#ifdef FOURPICLASS_FLAG
TFourPi::Class()->IgnoreTObjectStreamer();
fourpi = new TFourPi();
#endif
#ifdef EPICSCLASS_FLAG
TEpics::Class()->IgnoreTObjectStreamer();
epics = new TEpics();
#endif
#ifdef SCALERCLASS_FLAG
TScaler::Class()->IgnoreTObjectStreamer();
TScalerCh::Class()->IgnoreTObjectStreamer();
scalers = new TScaler();
#endif
analysisState = new TNamed("Analysis State","-1");
expNumber = new TNamed("Experiment Number","unknown");
runTitle = new TNamed("Run Title","");
runNumber = new TNamed("Run Number","");
elapsedTime = new TNamed("Elapsed Run Time","");
dateCreated = new TNamed("Run Creation Date","");
dateEnded = new TNamed("Run End Date","");
timeCreated = new TNamed("Run Creation Time","");
timeEnded = new TNamed("Run End Time","");
nPauses = new TNamed("Pauses","");
nResumes = new TNamed("Resumes","");
nBuffers = new TNamed("Number of buffers read","");
nTotalEntities = new TNamed("Total Entity Count","");
nTotalType1Entities = new TNamed("Total Type1 (Data) Entity Count","");
nTotalWords = new TNamed("Total Word Count","");
nTotalType1Words = new TNamed("Total Type1 (Data) Word Count","");
avgEventRate = new TNamed("Average Event Rate","");
avgType1EventRate = new TNamed("Average Type1 (Data) Event Rate","");
avgWordRate = new TNamed("Average Word Rate","");
avgType1WordRate = new TNamed("Average Type1 (Data) Word Rate","");
evtSize = new TNamed("Event File Size","");
rootSize = new TNamed("ROOT File Size","");
evtFilePath = "./";
rootFilePath = "./";
header = new TBufferHeader();
fTargets = new TObjArray(10);
kHiraFill = kFALSE;
kHiraCsIFill = kFALSE;
kMcpFill = kFALSE;
kS800Fill = kFALSE;
kFourPiFill = kFALSE;
kEpicsFill = kFALSE;
kScalerFill = kFALSE;
kElogFill = kFALSE;
fGManager = new TGeoManager("expManager","NSCL Experiment Geometry Manager");
}
TExperiment::~TExperiment()
{
delete header;
delete fTargets;
#ifdef MCPCLASS_FLAG
delete mcp;
#endif
#ifdef HIRACLASS_FLAG
delete hira;
#endif
#ifdef S800CLASS_FLAG
delete s800;
#endif
#ifdef FOURPICLASS_FLAG
delete fourpi;
#endif
#ifdef EPICSCLASS_FLAG
delete epics;
#endif
#ifdef SCALERCLASS_FLAG
delete scalers;
#endif
}
void TExperiment::AddTarget(const char *name, const char *title,
Int_t ladder, Int_t ladderPos, Double_t thickness,
Int_t Z, Int_t A)
{
TTarget *tmpTarget = new TTarget(name,title,fGManager,ladder,ladderPos,thickness,Z,A);
fTargets->Add(tmpTarget);
printf("* Added Target %s to ladder %i at position %i.\n",tmpTarget->GetName(),
tmpTarget->GetLadder(),tmpTarget->GetLadderPos());
}
void TExperiment::Calculate()
{
#ifdef MCP_CLASS_FLAG
if(kMcpFill) mcp->Calculate();
#endif
#ifdef HIRACLASS_FLAG
if(kHiraFill) hira->Calculate();
#endif
#ifdef S800CLASS_FLAG
if(kS800Fill) s800->Calculate();
#endif
#ifdef FOURPICLASS_FLAG
if(kFourPiFill) fourpi->Calculate();
#endif
#ifdef EPICSCLASS_FLAG
if(kEpicsFill) epics->Calculate();
#endif
#ifdef SCALERCLASS_FLAG
#endif
}
void TExperiment::Calibrate()
{
#ifdef MCP_CLASS_FLAG
if(kMcpFill) mcp->Calibrate();
#endif
#ifdef HIRACLASS_FLAG
if(kHiraFill) hira->Calibrate();
#endif
#ifdef S800CLASS_FLAG
if(kS800Fill) s800->Calibrate();
#endif
#ifdef FOURPICLASS_FLAG
if(kFourPiFill) fourpi->Calibrate();
#endif
#ifdef EPICSCLASS_FLAG
if(kEpicsFill) epics->Calibrate();
#endif
#ifdef SCALERCLASS_FLAG
#endif
}
void TExperiment::Clear(Option_t *)
{
header->Clear();
#ifdef MCPCLASS_FLAG
if(kMcpFill) mcp->Clear();
#endif
#ifdef HIRACLASS_FLAG
if(kHiraFill) hira->Clear();
#endif
#ifdef S800CLASS_FLAG
if(kS800Fill) s800->Clear();
#endif
#ifdef FOURPICLASS_FLAG
if(kFourPiFill) fourpi->Clear();
#endif
#ifdef EPICSCLASS_FLAG
if(kEpicsFill) epics->Clear();
#endif
#ifdef SCALERCLASS_FLAG
if(kScalerFill) scalers->Clear();
#endif
}
void TExperiment::CreateFolders()
{
f_constants.SetNameTitle("Constants","CONSTANTS");
f_constants.Write();
#ifdef MCPCLASS_FLAG
#endif
#ifdef HIRACLASS_FLAG
hira->CreateFolders();
#endif
}
void TExperiment::DumpClassInfo()
{
printf("**********************DUMPING CLASS MEMBERS INFO*****************************\n");
Bool_t kBuilt=kFALSE;
#ifdef HIRACLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* THiRA Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kHiraFill);
kBuilt=kFALSE;
#ifdef HIRACSICLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* THiRACsI Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kHiraCsIFill);
kBuilt=kFALSE;
#ifdef MCPCLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* TMcp Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kMcpFill);
kBuilt=kFALSE;
#ifdef S800CLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* TS800 Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kS800Fill);
kBuilt=kFALSE;
#ifdef FOURPICLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* TFourPi Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kFourPiFill);
kBuilt=kFALSE;
#ifdef EPICSCLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* TEpics Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kEpicsFill);
kBuilt=kFALSE;
#ifdef SCALERCLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* TScaler Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kScalerFill);
kBuilt=kFALSE;
#ifdef ELOGCLASS_FLAG
kBuilt=kTRUE;
#endif
printf("* TElog Class Built . . . [%u] \t Filled . . . [%u]\n",kBuilt,kElogFill);
kBuilt=kFALSE;
}
void TExperiment::DumpInfo()
{
ofstream dumpFile("RUNDUMP.dat",ios::out);
Char_t outC[2000];
printf("***************************DUMPING RUN INFO**********************************\n");
fChain->GetUserInfo()->Print();
TNamed *namedTmp = (TNamed*)fChain->GetUserInfo()->FindObject("Elapsed Run Time");
Double_t eTime = atof(namedTmp->GetTitle());
TNamed *dumpN;
TIter next(fChain->GetUserInfo());
while((dumpN = (TNamed *)next())){
sprintf(outC,"%-35.35s \t%s\n",dumpN->GetName(),dumpN->GetTitle());
dumpFile << outC;
}
dumpFile.close();
#ifdef SCALERCLASS_FLAG
if(kScalerFill) scalers->DumpScalers("RUNDUMP.dat","UPDATE");
#endif
#ifdef HIRACLASS_FLAG
#endif
}
void TExperiment::InitClass()
{
#ifdef MCPCLASS_FLAG
mcp->InitClass();
#endif
#ifdef HIRACLASS_FLAG
hira->InitClass();
#endif
#ifdef S800CLASS_FLAG
s800->InitClass();
#endif
#ifdef FOURPICLASS_FLAG
fourpi->InitClass();
#endif
#ifdef EPICSCLASS_FLAG
epics->InitClass();
#endif
#ifdef SCALERCLASS_FLAG
scalers->InitClass();
#endif
}
void TExperiment::InitTree(TTree *itree)
{
fChain = itree;
#ifdef MCPCLASS_FLAG
if(kMcpFill) mcp->InitTree(fChain);
#endif
#ifdef HIRACLASS_FLAG
if(kHiraFill) hira->InitTree(fChain);
#endif
#ifdef S800CLASS_FLAG
if(kS800Fill) s800->InitTree(fChain);
#endif
#ifdef FOURPICLASS_FLAG
if(kFourPiFill) {fChain->SetBranchAddress("fourpi",&fourpi); fourpi->InitTree(fChain);
#endif
#ifdef EPICSCLASS_FLAG
if(kEpicsFill){
if(strcmp(fChain->ClassName(),"TChain")!=0){
epics->InitTree((TTree*)fChain->GetDirectory()->FindObjectAny("stateVarT"));
}
}
#endif
#ifdef SCALERCLASS_FLAG
if(kScalerFill){
if(strcmp(fChain->ClassName(),"TChain")!=0){
scalers->InitTree((TTree*)fChain->GetDirectory()->FindObjectAny("scalerT"));
}
scalers->fEChain = fChain;
}
#endif
}
Bool_t TExperiment::ConvertEvtFile(Char_t *evtFile, Char_t *rootFile,Option_t *nBufs)
{
UShort_t *p;
UShort_t buffer[4096],
packetTag;
Long64_t fileSize;
Long64_t nBuf2Read;
Int_t counter = 0 ;
Float_t cent;
time_t start;
time_t now;
Char_t tempChar[500],
pathE[500],
pathR[500];
Int_t fPauses = 0,
fResumes = 0;
Bool_t fRunEnd = kFALSE;
Char_t cBuf[200];
nBuf2Read = (Long64_t)atoi(nBufs);
memset(tempChar,'\0',500);
memset(pathE,'\0',500);
strcat(pathE,evtFilePath);
strcat(pathE,evtFile);
memset(pathR,'\0',500);
strcat(pathR,rootFilePath);
strcat(pathR,rootFile);
time(&start);
ifstream file(pathE,ios::in | ios::binary);
if(!file.is_open()){ printf("File could not be opened!\n"); return kFALSE;}
file.seekg(0,ios::end);
fileSize = file.tellg();
cout << "Evt File size: " << fileSize << " bytes" << endl;
file.seekg(0,ios::beg);
cout << "At beginning of file: " << pathE << endl;
TFile *f = new TFile(pathR,"RECREATE");
if (f->IsZombie()) {
cout << "Error opening file " << pathR << endl;
exit(-1);
}
sprintf(tempChar,"E%s",expNumber->GetTitle());
TTree *type0Tree = new TTree("headerT", "Buffer Header Tree",2);
TTree *type1Tree = new TTree(tempChar, "Event Data Type: TExperiment Tree",2);
TTree *type2Tree = new TTree("scalerT", "Scaler Type Tree",2);
TTree *type3Tree = new TTree("snapshotT","Snapshot Type Tree",2);
TTree *type4Tree = new TTree("stateVarT","Documentation: State Variables Tree",2);
TTree *type5Tree = new TTree("runVarT", "Documentation: Run Variables Tree",2);
TTree *type6Tree = new TTree("packetT", "Documentation: Packet Types Tree",2);
type0Tree->Branch("Header","TBufferHeader",&header,32000);
#ifdef MCPCLASS_FLAG
if(kMcpFill) type1Tree->Branch("mcp","TMcp",&mcp); mcp->InitBranch(type1Tree,"Raw");
#endif
#ifdef HIRACLASS_FLAG
if(kHiraFill) hira->InitBranch(type1Tree,"Raw");
#endif
#ifdef S800CLASS_FLAG
if(kS800Fill) type1Tree->Branch("s800","TS800",&s800);
#if TS800_OP_TPPAC==0
type1Tree->SetBranchStatus("tppac*",0);
#endif
#if TS800_OP_TCRDC==0
type1Tree->SetBranchStatus("tcrdc*",0);
#endif
#if (TS800_OP_TPPAC==0 && TS800_OP_TCRDC==0)
type1Tree->SetBranchStatus("imTrack*",0);
#endif
#endif
#ifdef FOURPICLASS_FLAG
if(kFourPiFill) fourpi->InitBranch(type1Tree,TFOURPI_OP_CDISABLE);
#endif
#ifdef EPICSCLASS_FLAG
if(kEpicsFill) type4Tree->Branch("epics","TEpics",&epics);
#endif
#ifdef SCALERCLASS_FLAG
if(kScalerFill) type2Tree->Branch("scalers","TScaler",&scalers);
#endif
type1Tree->SetAutoSave(50000000);
CreateFolders();
UShort_t nWords,
type,
checksum,
runNum,
sequence[2],
nEntities,
format,
entitySize,
subEvtSize;
UShort_t nReadWords,
subEvtLength;
ULong64_t fBuffers,
nTotEntities,
nTotType1Entities,
nTotWords,
nTotType1Words;
analysisState->SetTitle("0");
fBuffers = 0;
nTotEntities = 0;
nTotType1Entities = 0;
nTotWords = 0;
nTotType1Words = 0;
nBuffers->SetTitle("0");
nTotalEntities->SetTitle("0");
nTotalType1Entities->SetTitle("0");
nTotalWords->SetTitle("0");
nTotalType1Words->SetTitle("0");
while (!file.eof()) {
file.read((Char_t*)buffer,sizeof(buffer));
nWords = buffer[0]; header->nwds = nWords;
type = buffer[1]; header->type = type;
checksum = buffer[2];
runNum = buffer[3];
sequence[0] = buffer[4];
sequence[1] = buffer[5]; header->sequence = (Long64_t)(sequence[1]<<16|sequence[0]);
nEntities = buffer[6]; header->nEntities = nEntities;
format = buffer[10];
nReadWords = 1;
nTotEntities += nEntities;
nTotWords += nWords;
if(type==1){
nTotType1Entities += nEntities;
nTotType1Words += nWords;
}
#ifdef DEBUG
cout << "Found nWords: " << nWords
<< " \t type: " << type << " " << header->type
<< " \t checksum: " << checksum
<< " \t runNum: " << runNum
<< " \t sequence[0]: " << sequence[0]
<< " \t sequence[1]: " << sequence[1]
<< " \t nEntities: " << nEntities << endl;
#endif
#ifndef DEBUG
if(counter == 50){
time(&now);
cent = 100 * ((Long64_t)(fBuffers * 8192))/(fileSize);
sprintf(tempChar,"%02.2f",cent);
cout << "Processing Buffer: " << fBuffers << " " << tempChar << "%"
<< " " << difftime(now, start) << " s" << "\r";
cout.flush();
counter=0;
}
counter++;
#endif
type0Tree->Fill();
if (type == 1){
p = &buffer[16];
for (Long64_t jj=0; jj<nEntities; jj++){
entitySize = *p++;
entitySize--;
nReadWords++;
Bool_t foundEvents = kFALSE;
while (entitySize>0) {
subEvtSize = *p++;
subEvtLength = subEvtSize;
nReadWords++;
packetTag = *p++;
switch(packetTag){
case VMEADC_PACKET:
nReadWords++;
foundEvents = kTRUE;
break;
case FOURPI_PACKET:
nReadWords++;
foundEvents = kTRUE;
#ifdef FOURPICLASS_FLAG
if(kFourPiFill) fourpi->Unpack(p);
#endif
break;
case HIRA_PACKET:
nReadWords++;
foundEvents = kTRUE;
#ifdef HIRACLASS_FLAG
if(kHiraFill) hira->Unpack(p);
#endif
break;
case CSI_PACK:
nReadWords++;
foundEvents = kTRUE;
#ifdef HIRACSICLASS_FLAG
if(kHiraCsIFill) hira->UnpackCsI(p);
#endif
break;
case MCP_PACK:
nReadWords++;
foundEvents = kTRUE;
#ifdef MCPCLASS_FLAG
if(kMcpFill) mcp->Unpack(p);
#endif
break;
case S800_PACKET:
nReadWords++;
foundEvents = kTRUE;
#ifdef S800CLASS_FLAG
if(kS800Fill) s800->Unpack(p);
#endif
break;
default:
cout << "Uknown Packet: " << *p <<endl;
break;
}
entitySize -= subEvtLength;
p += subEvtLength - 2;
if (foundEvents == kFALSE) return kTRUE;
}
type1Tree->Fill();
Clear();
}
}
else if (type == 2){
p = &buffer[6];
#ifdef SCALERCLASS_FLAG
if(kScalerFill) {scalers->Unpack(p); type2Tree->Fill();}
#endif
Clear();
}else if (type == 3){
type3Tree->Fill();
Clear();
}else if (type == 4){
type4Tree->Fill();
Clear();
}
else if (type == 5){
p = &buffer[6];
#ifdef EPICSCLASS_FLAG
if(kEpicsFill) {epics->Unpack(p); type5Tree->Fill();}
#endif
Clear();
}else if (type == 6){
type6Tree->Fill();
Clear();
}else if (type == 10){
Clear();
}
else if (type == 11){ cout << "BEGIN RUN" << endl;
sprintf(cBuf,"%u",buffer[3]);
runNumber->SetTitle(cBuf);
Char_t runTitleA[200];
Char_t *runT;
memset(runTitleA,'\0',200);
for(Int_t i=16,j=0; i<56; i++){
runTitleA[j] = (Char_t)(buffer[i]&0x00ff);
runTitleA[j+1] = (Char_t)(buffer[i]>>8);
if(runTitleA[j+1] == '\0') break;
j = j + 2;
}
runT = runTitleA;
printf("Run Title: %s\n",runT);
sprintf(cBuf,"%s",runTitleA);
runTitle->SetTitle(cBuf);
sprintf(cBuf,"%02u/%02u/%u",buffer[58],buffer[59],buffer[60]);
dateCreated->SetTitle(cBuf);
sprintf(cBuf,"%02u:%02u:%02u",buffer[61],buffer[62],buffer[63]);
timeCreated->SetTitle(cBuf);
type1Tree->GetUserInfo()->Add(runNumber);
type1Tree->GetUserInfo()->Add(runTitle);
type1Tree->GetUserInfo()->Add(expNumber);
type1Tree->GetUserInfo()->Add(analysisState);
type1Tree->GetUserInfo()->Add(dateCreated);
type1Tree->GetUserInfo()->Add(timeCreated);
Clear();
}
else if (type == 12){ cout << endl << "END RUN" << endl;
if(!fRunEnd){
ULong64_t upper,lower,eTime;
Double_t eVal;
lower = (ULong64_t)buffer[56];
upper = (ULong64_t)buffer[57];
eTime = (ULong64_t)(upper<<16|lower);
eVal = (Double_t) eTime/10.00;
sprintf(cBuf,"%.2lf",eVal);
elapsedTime->SetTitle(cBuf);
sprintf(cBuf,"%02u/%02u/%u",buffer[58],buffer[59],buffer[60]);
dateEnded->SetTitle(cBuf);
sprintf(cBuf,"%02u:%02u:%02u",buffer[61],buffer[62],buffer[63]);
timeEnded->SetTitle(cBuf);
sprintf(cBuf,"%u",fPauses);
nPauses->SetTitle(cBuf);
sprintf(cBuf,"%u",fResumes);
nResumes->SetTitle(cBuf);
type1Tree->GetUserInfo()->Add(elapsedTime);
type1Tree->GetUserInfo()->Add(dateEnded);
type1Tree->GetUserInfo()->Add(timeEnded);
type1Tree->GetUserInfo()->Add(nPauses);
type1Tree->GetUserInfo()->Add(nResumes);
}
Clear();
if(fRunEnd) break;
fRunEnd = kTRUE;
}else if (type == 13){ cout << "PAUSE RUN" << endl;
fPauses++;
Clear();
}else if (type == 14){ cout << "RESUME RUN" << endl;
fResumes++;
Clear();
}else{
cout << "Buffer corrupted. No valid data type." <<endl;
break;
}
fBuffers++;
if(nBuf2Read==(Long64_t)fBuffers) break;
}
if(!fRunEnd){
printf("WARNING!!! END RUN BUFFER NOT FOUND. Run may be corrupt.\n");
type1Tree->GetUserInfo()->Add(elapsedTime);
type1Tree->GetUserInfo()->Add(dateEnded);
type1Tree->GetUserInfo()->Add(timeEnded);
type1Tree->GetUserInfo()->Add(nPauses);
type1Tree->GetUserInfo()->Add(nResumes);
}
cout << "Read " << fBuffers << " buffers." << endl;
sprintf(cBuf,"%llu",fBuffers);
nBuffers->SetTitle(cBuf);
type1Tree->GetUserInfo()->Add(nBuffers);
Double_t timeTmp = atof(type1Tree->GetUserInfo()->FindObject("Elapsed Run Time")->GetTitle());
sprintf(cBuf,"%llu",nTotEntities);
nTotalEntities->SetTitle(cBuf);
sprintf(cBuf,"%llu",nTotType1Entities);
nTotalType1Entities->SetTitle(cBuf);
sprintf(cBuf,"%llu",nTotWords);
nTotalWords->SetTitle(cBuf);
sprintf(cBuf,"%llu",nTotType1Words);
nTotalType1Words->SetTitle(cBuf);
sprintf(cBuf,"%.2f",(Double_t)nTotEntities/timeTmp);
avgEventRate->SetTitle(cBuf);
sprintf(cBuf,"%.2f",(Double_t)nTotType1Entities/timeTmp);
avgType1EventRate->SetTitle(cBuf);
sprintf(cBuf,"%.2f",(Double_t)nTotWords/timeTmp);
avgWordRate->SetTitle(cBuf);
sprintf(cBuf,"%.2f",(Double_t)nTotType1Words/timeTmp);
avgType1WordRate->SetTitle(cBuf);
sprintf(cBuf,"%lli",(Long64_t)fileSize);
evtSize->SetTitle(cBuf);
sprintf(cBuf,"%lli",(Long64_t)f->GetSize());
rootSize->SetTitle(cBuf);
type1Tree->GetUserInfo()->Add(nTotalEntities);
type1Tree->GetUserInfo()->Add(nTotalWords);
type1Tree->GetUserInfo()->Add(avgEventRate);
type1Tree->GetUserInfo()->Add(avgWordRate);
type1Tree->GetUserInfo()->Add(nTotalType1Entities);
type1Tree->GetUserInfo()->Add(nTotalType1Words);
type1Tree->GetUserInfo()->Add(avgType1EventRate);
type1Tree->GetUserInfo()->Add(avgType1WordRate);
type1Tree->GetUserInfo()->Add(evtSize);
type1Tree->GetUserInfo()->Add(rootSize);
type1Tree->SetBranchStatus("*",1);
type0Tree->AutoSave();
type1Tree->AutoSave();
type2Tree->AutoSave();
type3Tree->AutoSave();
type4Tree->AutoSave();
type5Tree->AutoSave();
type6Tree->AutoSave();
file.close();
type0Tree->GetUserInfo()->Clear();
type1Tree->GetUserInfo()->Clear();
type2Tree->GetUserInfo()->Clear();
type3Tree->GetUserInfo()->Clear();
type4Tree->GetUserInfo()->Clear();
type5Tree->GetUserInfo()->Clear();
type6Tree->GetUserInfo()->Clear();
type0Tree->Delete();
type1Tree->Delete();
type2Tree->Delete();
type3Tree->Delete();
type4Tree->Delete();
type5Tree->Delete();
type6Tree->Delete();
f->Close();
delete f;
return kTRUE;
}
Bool_t TExperiment::ConvertEvtFile(Char_t *evtFileList)
{
Char_t evtFile[200];
Char_t rootFile[200];
ifstream listFile(evtFileList,ios::in);
cout << "#################################################################" << endl;
while(!listFile.eof()){
memset(evtFile,'\0',200);
memset(rootFile,'\0',200);
listFile.getline(evtFile,200);
for(Int_t i=0; i<200; i++){
if(evtFile[i]=='.') break;
rootFile[i] = evtFile[i];
}
strcat(rootFile,".root");
cout << evtFile << " " << rootFile << endl;
if(ConvertEvtFile(evtFile,rootFile)){
cout << "SUCCESS!!!" << endl;
cout << "#################################################################" << endl;
}else{
cout << "FAILED!!!" << endl;
cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl;
}
}
listFile.close();
return kTRUE;
}
Long64_t TExperiment::LoadTree(Long64_t entry)
{
if (!fChain) return -5;
Long64_t centry = fChain->LoadTree(entry);
if (centry < 0) return centry;
if (!fChain->InheritsFrom(TChain::Class())) return centry;
TChain *chain = (TChain*)fChain;
if (chain->GetTreeNumber() != fCurrent) {
fCurrent = chain->GetTreeNumber();
}
return centry;
}
void TExperiment::SetTarget(const char *targetName)
{
fTarget = (TTarget*)fTargets->FindObject(targetName);
printf ("Looking for %s\n",targetName);
#ifdef HIRACLASS_FLAG
hira->SetTarget(fTarget);
#endif
}
Bool_t TExperiment::SetEventFilePath(Char_t *path)
{
evtFilePath = path;
return kTRUE;
}
Bool_t TExperiment::SetExperimentNumber(Char_t *number)
{
expNumber->SetTitle(number);
return kTRUE;
}
Bool_t TExperiment::SetRootFilePath(Char_t *path)
{
rootFilePath = path;
return kTRUE;
}
Last change: Tue Dec 16 22:01:05 2008
Last generated: 2008-12-16 22:01
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.