/*
-- Contact: - henrik.tydesjo@cern.ch
-- Link: - http://tydes.home.cern.ch/tydes/doc/CalibrationOverview/CalibrationAlgorithms/
-- Run Type: - DAQ_MIN_TH_SCAN,DAQ_MEAN_TH_SCAN,DAQ_UNIFORMITY_SCAN,DAQ_NOISY_PIX_SCAN,DAQ_PIX_DELAY_SCAN,DAQ_FO_UNIF_SCAN
-- DA Type: - LDC
-- Number of events needed:
-- Input Files: - daq db config files: spd_standal_params,spd_perm_noisy , previous noisy lists: ./calibResults/ScanNoisy/* , raw data
-- Output Files: - Ref Data: ./calibResults/ScanReference/* , DCS update: ./calibResults/ScanDCSconfigToFXS/* , OCDB update: ./calibResults/ScanNoisyToFXS/* , persistent files: ./calibResults/ScanNoisy/*
-- Trigger types used:
+Contact: henrik.tydesjo@cern.ch
+Link: tydes.home.cern.ch/tydes/doc/CalibrationOverview/CalibrationAlgorithms/
+Run Type: DAQ_MIN_TH_SCAN,DAQ_MEAN_TH_SCAN,DAQ_UNIFORMITY_SCAN,DAQ_NOISY_PIX_SCAN,DAQ_PIX_DELAY_SCAN
+DA Type: LDC
+Number of events needed: Depending on scan type
+Input Files: spd_standal_params,spd_perm_noisy , ./calibResults/ScanNoisy/* , raw data
+Output Files: ./calibResults/ScanReference/* , ./calibResults/ScanDCSconfigToFXS/* , ./calibResults/ScanNoisyToFXS/* , ./calibResults/ScanNoisy/*
+Trigger types used: PHYSICS
*/
////////////////////////////////////////////////////////////////////////////////
#include <TROOT.h>
#include <TPluginManager.h>
#include <TObjArray.h>
+#include <TObjString.h>
#include <TString.h>
+#include <TFitter.h>
int main(int argc, char **argv) {
if (argc<2) {
TString paramsFileName = Form("%s/standal_params.txt",configFilesDir);
TString permNoisyFileName = Form("%s/perm_noisy.txt",configFilesDir);
+ TFitter *fitter = new TFitter(3);
+ TVirtualFitter::SetFitter(fitter);
+
// This line is needed in case of a stand-alone application w/o
// $ROOTSYS/etc/system.rootrc file
gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo",
"TStreamerInfo()");
// turn off annoying warning messages
- new AliLog;
- AliLog::Instance()->SetGlobalDebugLevel(-20);
+ // NB: Should not be handled here
+ AliLog* logger = AliLog::GetRootLogger();
+ logger->SetGlobalDebugLevel(-20);
// calib scan types
enum calib_types{MINTH,MEANTH,DAC,UNIMA,NOISE,DELAY};
status=daqDA_DB_getFile(idp.Data(),paramsFileName.Data());
if (status) {
printf("Failed to get config file %s: status=%d. Using default tuning parameters.\n",idp.Data(),status);
+ TString rmCmd = Form("rm -f %s",paramsFileName.Data());
+ system(rmCmd.Data());
}
#endif
if (status==0) {
paramsFile >> paramN;
if (paramsFile.eof()) break;
paramsFile >> paramV;
- TString* paramNS = new TString(paramN);
- TString* paramVS = new TString(paramV);
- paramNames.AddAtAndExpand((TObject*)paramNS,nrTuningParams);
- paramVals.AddAtAndExpand((TObject*)paramVS,nrTuningParams);
+ paramNames.AddAtAndExpand(new TObjString(paramN),nrTuningParams);
+ paramVals.AddAtAndExpand(new TObjString(paramV),nrTuningParams);
nrTuningParams++;
if (paramsFile.eof()) break;
}
}
}
// for (UInt_t i=0; i<nrTuningParams; i++) {
- // printf("Entry %d: N=%s , V=%s\n",i,((TString*)paramNames.At(i))->Data(),((TString*)paramVals.At(i))->Data());
+ // // printf("Entry %d: N=%s , V=%s\n",i,((TString*)paramNames.At(i))->Data(),((TString*)paramVals.At(i))->Data());
+ // printf("Entry %d: N=%s , V=%s\n",i,((TObjString*)paramNames.At(i))->GetString().Data(),((TObjString*)paramVals.At(i))->GetString().Data());
// }
// perm noisy list:
permstatus=daqDA_DB_getFile(idn.Data(),permNoisyFileName.Data());
if (permstatus) {
printf("Failed to get config file %s: status=%d. No permanently noisy pixels will be added.\n",idn.Data(),permstatus);
+ TString rmCmd = Form("rm -f %s",permNoisyFileName.Data());
+ system(rmCmd.Data());
}
#endif
int startSeg = 1;
#ifndef SPD_DA_OFF
+ if (getenv("DATE_RUN_NUMBER")==0) {
+ printf("DATE_RUN_NUMBER not properly set.\n");
+ return -1;
+ }
int runNr = atoi(getenv("DATE_RUN_NUMBER"));
#else
int runNr = atoi(argv[1]);
rowStart[eqId] = str->GetHrowStart();
rowEnd[eqId] = str->GetHrowEnd();
rowValue[eqId] = str->GetHrowValue();
- dacValue[eqId] = str->GetHdacValue();
+ dacValue[eqId] = str->GetHdacValue(); // this will change below for MEANTH scan
+
for (UInt_t hs=0; hs<6; hs++) {
halfStaveScanned[eqId][hs] = str->GetHhalfStaveScanned(hs);
dacHigh[eqId][hs] = str->GetHdacHigh(hs);
dacLow[eqId][hs] = str->GetHdacLow(hs);
TPAmp[eqId][hs] = str->GetHTPAmp(hs);
for (UInt_t chip=0; chip<10; chip++) {
- chipPresent[eqId][hs][chip] = str->GetHchipPresent(hs,chip);
+ chipPresent[eqId][hs][chip] = str->GetHchipPresent(hs,chip);
+ if (type[eqId]==MEANTH && chipPresent[eqId][hs][chip]) dacValue[eqId] = str->GetHdacLow(hs);
}
}
for (UInt_t chip=0; chip<10; chip++) {
}
scanObj[eqId]->SetType(type[eqId]);
scanObj[eqId]->SetDataFormat(dataFormat[eqId]);
- for (Int_t hs=0; hs<6; hs++) {
-
- // remove later when the chip present is set correctly !!!!!!!!!!!!!!!!!!!!!!!!!!!
- Bool_t halfStavePresent = str->GetHalfStavePresent(hs);
- // remove later when the chip present is set correctly !!!!!!!!!!!!!!!!!!!!!!!!!!!
-
+ for (Int_t hs=0; hs<6; hs++) {
for (UInt_t chip=0; chip<10; chip++) {
scanObj[eqId]->SetChipPresent(hs,chip,chipPresent[eqId][hs][chip]);
-
- // remove later when the chip present is set correctly !!!!!!!!!!!!!!!!!!!!!!!!!!!
- if (halfStavePresent) scanObj[eqId]->SetChipPresent(hs,chip,kTRUE);
- // remove later when the chip present is set correctly !!!!!!!!!!!!!!!!!!!!!!!!!!!
-
}
}
scanObj[eqId]->SetRowStart(rowStart[eqId]);
}
- // clean up scan objects (which also saves them)
+ // clean up scan objects (which also saves them) , check if something happened...
+ Bool_t somethingHappened = kFALSE;
for (UInt_t eqId=0; eqId<20; eqId++) {
- if (scanObj[eqId]!=NULL) delete scanObj[eqId];
+ if (scanObj[eqId]!=NULL) {
+ delete scanObj[eqId];
+ somethingHappened = kTRUE;
+ }
+ }
+ if (!somethingHappened) {
+ printf("WARNING: No data processed. Are the calibration headers missing?\n");
}
-
// configure analyzer with tuning parameters etc:
for (UInt_t i=0; i<nrTuningParams; i++) {
- analyzer->SetParam(((TString*)paramNames.At(i))->Data(),((TString*)paramVals.At(i))->Data());
+ analyzer->SetParam(((TObjString*)paramNames.At(i))->GetString().Data(),((TObjString*)paramVals.At(i))->GetString().Data());
}
UInt_t type = analyzer->GetType();
delete handlerPermNoisy;
}
-
+ printf("Opening id list file\n");
TString idsFXSFileName = Form("%s/FXSids_run_%d.txt",saveDirIdsToFXS,runNr);
ofstream idsFXSfile;
idsFXSfile.open(idsFXSFileName.Data());
// send noisy data to FXS
if (nrNoisyFilesProduced>0) {
+ printf("Preparing noisy files\n");
// send a tared file of all new noisy maps
TString command = Form("cd %s; tar -cf noisy_scan.tar *",saveDirNoisyToFXS);
// printf("\n\n%s\n\n",command.Data());
// send dcs config files to FXS
if (nrDCSconfigFilesProduced>0) {
+ printf("Preparing DCS config files\n");
// send a tared file of all the dcsConfig text files
TString command = Form("cd %s; tar -cf dcsConfig.tar *",saveDirDCSconfigToFXS);
// printf("\n\n%s\n\n",command.Data());
// send reference data to FXS
for (UInt_t eqId=0; eqId<20; eqId++) {
if (bScanInit[eqId]) {
+ printf("Preparing reference data for eq %d\n",eqId);
TString fileName = Form("%s/SPDcal_run_%d_eq_%d.root",saveDirRef,runNr,eqId);
TString id = Form("SPD_ref_scan_%d",eqId);
#ifndef SPD_DA_OFF
}
+ printf("Preparing id list file\n");
idsFXSfile.close();
+ TString id = "SPD_id_list";
+#ifndef SPD_DA_OFF
+ status = daqDA_FES_storeFile(idsFXSFileName.Data(),id.Data());
+ if (status!=0) {
+ printf("Failed to export file %s , status %d\n",idsFXSFileName.Data(),status);
+ return -1;
+ }
+#endif
+ printf("DA finished.\n");
return 0;
}