#include "AliITSOnlineSPDHitArray.h"
#include "AliITSOnlineSPDHitEvent.h"
-ClassImp(AliITSOnlineSPDscan)
-
-AliITSOnlineSPDscan::AliITSOnlineSPDscan(Char_t *fileName) :
+AliITSOnlineSPDscan::AliITSOnlineSPDscan(const Char_t *fileName, Bool_t readFromGridFile) :
fFile(NULL),
fWrite(kFALSE),
fCurrentStep(-1),
fModified(kFALSE),
fInfoModified(kFALSE),
- fScanInfo(NULL)
+ fScanInfo(NULL),
+ fFileName(fileName)
{
// constructor, open file for reading or writing
- sprintf(fFileName,"%s",fileName);
// look for a previously saved info object
// (if file not found create a new one and return, else read)
- FILE* fp0 = fopen(fFileName, "r");
- if (fp0 == NULL) {
+
+ for(Int_t ihs=0; ihs<6; ihs++){
+ fCurrentHitArray[ihs]=0x0;
+ fCurrentHitEvent[ihs]=0x0;
+ }
+
+ Bool_t bRead = readFromGridFile;
+
+ if (!bRead) {
+ FILE* fp0 = fopen(fFileName.Data(), "r");
+ if (fp0 != NULL) {
+ bRead=kTRUE;
+ fclose(fp0);
+ }
+ }
+
+ if (bRead) { // open file for reading
+ fFile = TFile::Open(fFileName.Data(), "READ");
+ if (fFile==NULL) { // grid file not found, create new local default file
+ printf("ERROR: AliITSOnlineSPDscan: File %s not found! Creating 'test999.root' file instead\n",fFileName.Data());
+ // create default empty file:
+ fFileName = "test999.root";
+ fScanInfo = new AliITSOnlineSPDscanInfo();
+ fInfoModified=kTRUE;
+ fFile = new TFile(fFileName.Data(), "RECREATE");
+ fWrite=kTRUE;
+ }
+ else { // read from file (grid or local)
+ fWrite=kFALSE;
+ fFile->GetObject("AliITSOnlineSPDscanInfo", fScanInfo);
+ }
+ }
+ else { // create new local file
fScanInfo = new AliITSOnlineSPDscanInfo();
- fFile = new TFile(fFileName, "RECREATE");
+ fInfoModified=kTRUE;
+ fFile = new TFile(fFileName.Data(), "RECREATE");
fWrite=kTRUE;
}
- else {
- fclose(fp0);
- fFile = new TFile(fFileName, "READ");
- fWrite=kFALSE;
- fFile->GetObject("AliITSOnlineSPDscanInfo", fScanInfo);
- }
+
Init();
}
fCurrentStep(-1),
fModified(kFALSE),
fInfoModified(kFALSE),
- fScanInfo(NULL)
+ fScanInfo(NULL),
+ fFileName(".")
{
+
+ for(Int_t ihs=0; ihs<6; ihs++){
+ fCurrentHitArray[ihs]=0x0;
+ fCurrentHitEvent[ihs]=0x0;
+ }
+
printf("This object should not be copied!");
}
if (!fWrite) {
fFile->Close();
delete fFile;
- fFile = new TFile(fFileName, "UPDATE");
+ fFile = new TFile(fFileName.Data(), "UPDATE");
fWrite=kTRUE;
}
fFile->Delete("AliITSOnlineSPDscanInfo;*");
fFile->WriteTObject(fScanInfo, "AliITSOnlineSPDscanInfo");
- fFile->Close();
+ }
+ if (fFile!=NULL) {
delete fFile;
}
}
return *this;
}
-
-//TObjArray* AliITSOnlineSPDscan::GetAsTObjArray() {
-// TObjArray *arr = new TObjArray();
-// arr->Add(fScanInfo);
-// for (UInt_t step=0; step<GetNSteps(); step++) {
-// SwitchToStep(step);
-// for (UInt_t hs=0; hs<6; hs++) {
-// arr->Add(fCurrentHitArray[hs]->CloneThis());
-// arr->Add(fCurrentHitEvent[hs]->CloneThis());
-// }
-// }
-// return arr;
-//}
-//
-//void AliITSOnlineSPDscan::ReadFromTObjArray(TObjArray *arr) {
-// ClearThis();
-// Int_t nrEntries = arr->GetEntriesFast();
-// if (nrEntries>0 && nrEntries%2==1) {
-// fScanInfo = (AliITSOnlineSPDscanInfo*) arr->At(0);
-// fInfoModified=kTRUE;
-// FillFromTObjArray(arr,nrEntries);
-// }
-//}
-//
-//void AliITSOnlineSPDscan::FillFromTObjArray(TObjArray *arr, UInt_t nrEntries) {
-// UInt_t index=1;
-// UInt_t hs=0;
-// while (index<nrEntries) {
-// UInt_t step=(index-1)/12;
-// SwitchToStep(step);
-// if (index%2==1) {
-// fCurrentHitArray[hs] = (AliITSOnlineSPDHitArray*) arr->At(index);
-// }
-// else {
-// fCurrentHitEvent[hs] = (AliITSOnlineSPDHitEvent*) arr->At(index);
-// hs++;
-// if (hs>5) hs=0;
-// }
-// fModified=kTRUE;
-// index++;
-// }
-//}
-
void AliITSOnlineSPDscan::ClearThis() {
// clear this scan, close file and open new
for (UInt_t hs=0; hs<6; hs++) {
fScanInfo->ClearThis();
fFile->Close();
delete fFile;
- fFile = new TFile(fFileName, "RECREATE");
+ fFile = new TFile(fFileName.Data(), "RECREATE");
fWrite=kTRUE;
fFile->WriteTObject(fScanInfo, "AliITSOnlineSPDscanInfo");
fInfoModified=kTRUE;
void AliITSOnlineSPDscan::ReadCurrentStep() {
// read current step index into memory
for (UInt_t hs=0; hs<6; hs++) {
- Char_t stepName[40];
- sprintf(stepName,"HitArray_HS%d_Step%d",hs,fCurrentStep);
- fFile->GetObject(stepName, fCurrentHitArray[hs]);
- Char_t stepName2[40];
- sprintf(stepName2,"HitEvent_HS%d_Step%d",hs,fCurrentStep);
+ TString stepName = Form("HitArray_HS%d_Step%d",hs,fCurrentStep);
+ fFile->GetObject(stepName.Data(), fCurrentHitArray[hs]);
+ TString stepName2 = Form("HitEvent_HS%d_Step%d",hs,fCurrentStep);
fFile->GetObject(stepName2, fCurrentHitEvent[hs]);
}
}
if (!fWrite) {
fFile->Close();
delete fFile;
- fFile = new TFile(fFileName, "UPDATE");
+ fFile = new TFile(fFileName.Data(), "UPDATE");
fWrite=kTRUE;
}
for (UInt_t hs=0; hs<6; hs++) {
- Char_t stepName[40];
- sprintf(stepName,"HitArray_HS%d_Step%d",hs,fCurrentStep);
- Char_t stepDelete[40];
- sprintf(stepDelete,"%s;*",stepName);
- fFile->Delete(stepDelete);
- fFile->WriteTObject(fCurrentHitArray[hs], stepName);
- Char_t stepName2[40];
- sprintf(stepName2,"HitEvent_HS%d_Step%d",hs,fCurrentStep);
- Char_t stepDelete2[40];
- sprintf(stepDelete2,"%s;*",stepName2);
- fFile->Delete(stepDelete2);
- fFile->WriteTObject(fCurrentHitEvent[hs], stepName2);
+ TString stepName = Form("HitArray_HS%d_Step%d",hs,fCurrentStep);
+ TString stepDelete = Form("%s;*",stepName.Data());
+ fFile->Delete(stepDelete.Data());
+ fFile->WriteTObject(fCurrentHitArray[hs], stepName.Data());
+ TString stepName2 = Form("HitEvent_HS%d_Step%d",hs,fCurrentStep);
+ TString stepDelete2 = Form("%s;*",stepName2.Data());
+ fFile->Delete(stepDelete2.Data());
+ fFile->WriteTObject(fCurrentHitEvent[hs], stepName2.Data());
}
fModified=kFALSE;
}
fScanInfo->SetRouterNr(val);
fInfoModified=kTRUE;
}
+void AliITSOnlineSPDscan::SetHalfStaveScanned(UInt_t val, Bool_t b) {
+ // set half stave scanned
+ fScanInfo->SetHalfStaveScanned(val,b);
+ fInfoModified=kTRUE;
+}
+void AliITSOnlineSPDscan::SetDataFormat(UInt_t val) {
+ // set data format (0=normal 1=histogram)
+ fScanInfo->SetDataFormat(val);
+ fInfoModified=kTRUE;
+}
void AliITSOnlineSPDscan::SetTriggers(UInt_t nsi, UInt_t val) {
// set nr of triggers
+ SwitchToStep(nsi);
fScanInfo->SetTriggers(nsi,val);
fInfoModified=kTRUE;
}
fScanInfo->SetDacStep(val);
fInfoModified=kTRUE;
}
+void AliITSOnlineSPDscan::SetDCSVersion(UInt_t val){
+ // set dcs db version
+ fScanInfo->SetDCSVersion(val);
+ fInfoModified=kTRUE;
+}
void AliITSOnlineSPDscan::IncrementTriggers(UInt_t nsi) {
// increment nr of triggers
+ SwitchToStep(nsi);
fScanInfo->IncrementTriggers(nsi);
fInfoModified=kTRUE;
}
UInt_t AliITSOnlineSPDscan::GetRouterNr() const {
return fScanInfo->GetRouterNr();
}
+Bool_t AliITSOnlineSPDscan::GetHalfStaveScanned(UInt_t val) const {
+ return fScanInfo->GetHalfStaveScanned(val);
+}
+UInt_t AliITSOnlineSPDscan::GetDataFormat() const {
+ return fScanInfo->GetDataFormat();
+}
UInt_t AliITSOnlineSPDscan::GetTriggers(UInt_t nsi) const {
return fScanInfo->GetTriggers(nsi);
}
UInt_t AliITSOnlineSPDscan::GetDacStep() const {
return fScanInfo->GetDacStep();
}
+UInt_t AliITSOnlineSPDscan::GetDCSVersion() const {
+ return fScanInfo->GetDCSVersion();
+}