#include "AliTOFGeometry.h"
#include "AliTOFPreprocessor.h"
#include "AliTOFFEEReader.h"
+#include "AliTOFRawStream.h"
+#include "AliTOFCableLengthMap.h"
+#include "AliTOFcalibHisto.h"
+
// TOF preprocessor class.
// It takes data from DCS and passes them to the class AliTOFDataDCS, which
AliTOFPreprocessor::AliTOFPreprocessor(AliShuttleInterface* shuttle) :
AliPreprocessor("TOF", shuttle),
fData(0),
- fh2(0),
fCal(0),
fNChannels(0),
fStoreRefData(kTRUE),
fFDRFlag(kFALSE),
- fStatus(0)
+ fStatus(0),
+ fMatchingWindow(0)
{
// constructor
AddRunType("PHYSICS");
AliTOFPreprocessor::~AliTOFPreprocessor()
{
// destructor
- if (fData){
- delete fData;
- fData = 0;
- }
- if (fh2){
- delete fh2;
- fh2 = 0;
- }
- if (fCal){
- // fCal->Clear();
- delete fCal;
- fCal = 0;
- }
- if (fStatus){
- delete fStatus;
- fStatus = 0;
- }
}
//______________________________________________________________________________
AliPreprocessor::Initialize(run, startTime, endTime);
- AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
+ AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s \n\tStartTime DCS Query %s \n\tEndTime DCS Query %s", run,
TTimeStamp(startTime).AsString(),
- TTimeStamp(endTime).AsString()));
+ TTimeStamp(endTime).AsString(), ((TTimeStamp)GetStartTimeDCSQuery()).AsString(), ((TTimeStamp)GetEndTimeDCSQuery()).AsString()));
- fData = new AliTOFDataDCS(fRun, fStartTime, fEndTime);
- fData->SetFDRFlag(fFDRFlag);
- fh2 = 0x0;
+ fData = new AliTOFDataDCS(fRun, fStartTime, fEndTime, GetStartTimeDCSQuery(), GetEndTimeDCSQuery());
fNChannels = AliTOFGeometry::NSectors()*(2*(AliTOFGeometry::NStripC()+AliTOFGeometry::NStripB())+AliTOFGeometry::NStripA())*AliTOFGeometry::NpadZ()*AliTOFGeometry::NpadX();
}
//_____________________________________________________________________________
// processing DCS
+ fData->SetFDRFlag(fFDRFlag);
+
if (!dcsAliasMap){
Log("No DCS map found: TOF exiting from Shuttle");
+ if (fData){
+ delete fData;
+ fData = 0;
+ }
return 1;// return error Code for DCS input data not found
}
else {
+
// The processing of the DCS input data is forwarded to AliTOFDataDCS
resultDCSMap=fData->ProcessData(*dcsAliasMap);
if(!resultDCSMap){
Log("Some problems occurred while processing DCS data, TOF exiting from Shuttle");
+ if (fData){
+ delete fData;
+ fData = 0;
+ }
return 2;// return error Code for processed DCS data not stored
}
else{
resultDCSStore = StoreReferenceData("Calib","DCSData",fData, &metaDataDCS);
if (!resultDCSStore){
Log("Some problems occurred while storing DCS data results in Reference Data, TOF exiting from Shuttle");
+ if (fData){
+ delete fData;
+ fData = 0;
+ }
return 3;// return error Code for processed DCS data not stored
// in reference data
}
}
}
+ if (fData){
+ delete fData;
+ fData = 0;
+ }
+
return 0;
}
//_____________________________________________________________________________
{
// Processing data from DAQ for online calibration
+ Bool_t updateOCDB = kFALSE;
Log("Processing DAQ delays");
// reading configuration map
if (compDelays == "kTRUE") fFDRFlag = kFALSE;
else fFDRFlag = kTRUE;
+ delete cdbEntry;
+ cdbEntry = 0x0;
+
Log(Form("ComputingDelays = %s, StartingRun = %i",compDelays.Data(),startingRun));
- fCal = new AliTOFChannelOnlineArray(fNChannels);
+ /* init array with current calibration, if any */
+ fCal = new AliTOFChannelOnlineArray(fNChannels);
+ AliTOFChannelOnlineArray *curCal = NULL;
+
+ AliCDBEntry *cdbEntry2 = GetFromOCDB("Calib","ParOnlineDelay");
+ if (!cdbEntry2 || !cdbEntry2->GetObject()) {
+ /* no CDB entry found. set update flag */
+ Log(" ************ WARNING ************");
+ Log("No CDB ParOnlineDelay entry found, creating a new one!");
+ Log(" *********************************");
+ updateOCDB = kTRUE;
+ }
+ else {
+ Log("Found previous ParOnlineDelay entry. Using it to init calibration");
+ curCal = (AliTOFChannelOnlineArray *)cdbEntry2->GetObject();
+ for (Int_t i = 0; i < fNChannels; i++)
+ fCal->SetDelay(i, curCal->GetDelay(i));
+ }
+
TH1::AddDirectory(0);
Bool_t resultDAQRef=kFALSE;
Bool_t resultTOFPP=kFALSE;
+ TH2S *h2 = 0x0;
// processing DAQ
TFile * daqFile=0x0;
if (fileNameRun.Length()>0){
AliInfo(Form("Got the file %s, now we can store the Reference Data for the current Run.", fileNameRun.Data()));
daqFile = new TFile(fileNameRun.Data(),"READ");
- fh2 = (TH2S*) daqFile->Get("htof");
+ h2 = (TH2S*) daqFile->Get("htof");
AliCDBMetaData metaDataHisto;
metaDataHisto.SetBeamPeriod(0);
metaDataHisto.SetResponsible("Chiara Zampolli");
metaDataHisto.SetComment("This preprocessor stores the array of histos object as Reference Data.");
AliInfo("Storing Reference Data");
- resultDAQRef = StoreReferenceData("Calib","DAQData",fh2, &metaDataHisto);
+ resultDAQRef = StoreReferenceData("Calib","DAQData",h2, &metaDataHisto);
if (!resultDAQRef){
Log("some problems occurred::No Reference Data stored, TOF exiting from Shuttle");
+ delete h2;
+ delete list;
+ delete fCal;
+ fCal=0x0;
return 5;//return error code for failure in storing Ref Data
}
daqFile->Close();
else{
Log("The input data file from DAQ (run-level) was not found, TOF exiting from Shuttle ");
+ delete list;
+ delete fCal;
+ fCal=0x0;
return 4;//return error code for failure in retrieving Ref Data
}
}
}
else{
Log("The input data file list from DAQ (run-level) was not found, TOF exiting from Shuttle ");
+ delete fCal;
+ fCal=0x0;
return 4;//return error code for failure in retrieving Ref Data
}
}
AliInfo(Form("Got the file %s, now we can extract some values.", fileName.Data()));
daqFile = new TFile(fileName.Data(),"READ");
- if (fh2) delete fh2;
- fh2 = (TH2S*) daqFile->Get("htoftot");
- if (!fh2){
+ if (h2) delete h2;
+ h2 = (TH2S*) daqFile->Get("htoftot");
+ if (!h2){
Log("some problems occurred:: No histo retrieved, TOF exiting from Shuttle");
+ delete listTot;
delete daqFile;
+ delete fCal;
+ fCal=0x0;
return 7; //return error code for histograms not existing/junky
}
else {
- static const Int_t kSize=fh2->GetNbinsX();
- static const Int_t kNBins=fh2->GetNbinsY();
- static const Double_t kXBinmin=fh2->GetYaxis()->GetBinLowEdge(1);
+ static const Int_t kSize=h2->GetNbinsX();
+ static const Int_t kNBins=h2->GetNbinsY();
+ static const Double_t kXBinmin=h2->GetYaxis()->GetBinLowEdge(1);
if (kSize != fNChannels){
Log(" number of bins along x different from number of pads, found only a subset of the histograms, TOF exiting from Shuttle");
+ delete listTot;
+ delete h2;
delete daqFile;
+ delete fCal;
+ fCal=0x0;
return 7; //return error code for histograms not existing/junky
}
Int_t nNotStatistics = 0; // number of channel with not enough statistics
- if (fFDRFlag) Log(" Not computing delays according to flag set in Config entry in OCDB!");
+
+ /* FDR flag set. do not compute delays, use nominal cable delays */
+ if (fFDRFlag) {
+
+ Log(" Not computing delays according to flag set in Config entry in OCDB!");
+ FillWithCosmicCalibration(fCal);
+
+ /* check whether the new calibration is different from the previous one */
+ if (curCal) { /* well, check also whether we have a previous calibration */
+ for (Int_t i = 0; i < fNChannels; i++) {
+ if (fCal->GetDelay(i) != curCal->GetDelay(i)) {
+ updateOCDB = kTRUE;
+ break;
+ }
+ }
+ }
+ else /* otherwise update OCDB */
+ updateOCDB = kTRUE;
+
+ }
else { // computing delays if not in FDR runs
+
+ updateOCDB = kTRUE; /* always update OCDB when computing delays */
+
for (Int_t ich=0;ich<kSize;ich++){
/* check whether channel has been read out during current run.
* if the status is bad it means it has not been read out.
AliDebug(2,Form(" Channel %i found ok according to FEEmap, starting delay computing",ich));
TH1S *h1 = new TH1S("h1","h1",kNBins,kXBinmin-0.5,kNBins*1.+kXBinmin-0.5);
for (Int_t ibin=0;ibin<kNBins;ibin++){
- h1->SetBinContent(ibin+1,fh2->GetBinContent(ich+1,ibin+1));
+ h1->SetBinContent(ibin+1,h2->GetBinContent(ich+1,ibin+1));
}
if(h1->Integral()<integralThr) {
nNotStatistics++;
}
if (nNotStatistics!=0) Log(Form("Too little statistics for %d channels!",nNotStatistics));
}
+ delete h2;
daqFile->Close();
delete daqFile;
}
else{
Log("The Cumulative data file from DAQ does not exist, TOF exiting from Shuttle");
+ delete listTot;
+ delete fCal;
+ fCal=0x0;
return 6;//return error code for problems in retrieving DAQ data
}
}
}
else{
Log("Problem: no list for Cumulative data file from DAQ was found, TOF exiting from Shuttle");
+ delete fCal;
+ fCal=0x0;
return 6; //return error code for problems in retrieving DAQ data
}
+ /* check whether we don't need to update OCDB.
+ * in this case we can return without errors and
+ * the current FEE is stored in the fStatus object. */
+ if (!updateOCDB) {
+ AliInfo("update OCDB flag not set. Do not overwrite stored file.");
+ return 0; /* return ok */
+ }
+
daqFile=0;
AliCDBMetaData metaData;
metaData.SetBeamPeriod(0);
resultTOFPP = Store("Calib","ParOnlineDelay",fCal, &metaData,deltaStartingRun,kTRUE);
if(!resultTOFPP){
Log("Some problems occurred while storing online object resulting from DAQ data processing");
+ delete fCal;
+ fCal=0x0;
return 8;//return error code for problems in storing DAQ data
}
+ if (fCal){
+ delete fCal;
+ fCal = 0;
+ }
+
return 0;
}
//_____________________________________________________________________________
//retrieving Pulser data
TList* listPulser = GetFileSources(kDAQ, "PULSER");
if (listPulser !=0x0 && listPulser->GetEntries()!=0)
- {
- AliInfo("The following sources produced files with the id PULSER");
- listPulser->Print();
- Int_t nPulser = 0;
- for (Int_t jj=0;jj<listPulser->GetEntries();jj++){
- Int_t nPulserSource = 0;
- TObjString * str = dynamic_cast<TObjString*> (listPulser->At(jj));
- AliInfo(Form("found source %s", str->String().Data()));
- // file to be stored run per run
- TString fileNamePulser = GetFile(kDAQ, "PULSER", str->GetName());
- if (fileNamePulser.Length()>0){
- // storing refernce data
- AliInfo(Form("Got the file %s, now we can process pulser data.", fileNamePulser.Data()));
- daqFile = new TFile(fileNamePulser.Data(),"READ");
- h1 = (TH1S*) daqFile->Get("hTOFpulser");
- for (Int_t ibin=0;ibin<kSize;ibin++){
- if ((h1->GetBinContent(ibin+1))!=-1){
- if ((htofPulser->GetBinContent(ibin+1))==-1){
- htofPulser->SetBinContent(ibin+1,h1->GetBinContent(ibin+1));
- }
- else {
- Log(Form("Something strange occurred during Pulser run, channel %i already read by another LDC, please check!",ibin));
- }
- }
- }
-
- // elaborating infos
- Double_t mean =0;
- Int_t nread=0;
- Int_t nreadNotEmpty=0;
- for (Int_t ientry=1;ientry<=h1->GetNbinsX();ientry++){
-
- AliDebug(3,Form(" channel %i pulser status before pulser = %i, with global status = %i",ientry,(Int_t)fStatus->GetPulserStatus(ientry),(Int_t)fStatus->GetStatus(ientry)));
- /* check whether channel has been read out during current run.
- * if the status is bad it means it has not been read out.
- * in this case skip channel in order to not affect the mean */
- if (fStatus->GetHWStatus(ientry-1) == AliTOFChannelOnlineStatusArray::kTOFHWBad)
- continue;
- nPulser++;
- nPulserSource++;
- if (h1->GetBinContent(ientry)==-1) continue;
- else {
- if (h1->GetBinContent(ientry)>0) {
- nreadNotEmpty++;
- AliDebug(2,Form(" channel %i is ok with entry = %f; so far %i channels added ",ientry-1,h1->GetBinContent(ientry),nreadNotEmpty));
+ {
+ AliInfo("The following sources produced files with the id PULSER");
+ listPulser->Print();
+ Int_t nPulser = 0;
+ for (Int_t jj=0;jj<listPulser->GetEntries();jj++){
+ Int_t nPulserSource = 0;
+ TObjString * str = dynamic_cast<TObjString*> (listPulser->At(jj));
+ AliInfo(Form("found source %s", str->String().Data()));
+ // file to be stored run per run
+ TString fileNamePulser = GetFile(kDAQ, "PULSER", str->GetName());
+ if (fileNamePulser.Length()>0){
+ // storing refernce data
+ AliInfo(Form("Got the file %s, now we can process pulser data.", fileNamePulser.Data()));
+ daqFile = new TFile(fileNamePulser.Data(),"READ");
+ h1 = (TH1S*) daqFile->Get("hTOFpulser");
+ for (Int_t ibin=0;ibin<kSize;ibin++){
+ if ((h1->GetBinContent(ibin+1))!=-1){
+ if ((htofPulser->GetBinContent(ibin+1))==-1){
+ htofPulser->SetBinContent(ibin+1,h1->GetBinContent(ibin+1));
+ }
+ else {
+ Log(Form("Something strange occurred during Pulser run, channel %i already read by another LDC, please check!",ibin));
+ }
+ }
+ }
+
+ // elaborating infos
+ Double_t mean =0;
+ Int_t nread=0;
+ Int_t nreadNotEmpty=0;
+ for (Int_t ientry=1;ientry<=h1->GetNbinsX();ientry++){
+
+ AliDebug(3,Form(" channel %i pulser status before pulser = %i, with global status = %i",ientry,(Int_t)fStatus->GetPulserStatus(ientry),(Int_t)fStatus->GetStatus(ientry)));
+ /* check whether channel has been read out during current run.
+ * if the status is bad it means it has not been read out.
+ * in this case skip channel in order to not affect the mean */
+ if (fStatus->GetHWStatus(ientry-1) == AliTOFChannelOnlineStatusArray::kTOFHWBad)
+ continue;
+ nPulser++;
+ nPulserSource++;
+ if (h1->GetBinContent(ientry)==-1) continue;
+ else {
+ if (h1->GetBinContent(ientry)>0) {
+ nreadNotEmpty++;
+ AliDebug(2,Form(" channel %i is ok with entry = %f; so far %i channels added ",ientry-1,h1->GetBinContent(ientry),nreadNotEmpty));
+ }
+ mean+=h1->GetBinContent(ientry);
+ nread++;
+ }
+ }
+ if (nread!=0) {
+ mean/=nread;
+ AliDebug(2,Form(" nread = %i , nreadNotEmpty = %i, mean = %f",nread,nreadNotEmpty,mean));
+ for (Int_t ich =0;ich<fNChannels;ich++){
+ if (h1->GetBinContent(ich+1)==-1) continue;
+ AliDebug(3,Form(" channel %i pulser status before pulser = %i",ich,(Int_t)fStatus->GetPulserStatus(ich)));
+
+ /* check whether channel has been read out during current run.
+ * if the status is bad it means it has not been read out.
+ * in this case skip channel in order to leave its status
+ * unchanged */
+ if (fStatus->GetHWStatus(ich) == AliTOFChannelOnlineStatusArray::kTOFHWBad)
+ continue;
+
+ if (h1->GetBinContent(ich+1)<0.05*mean){
+ fStatus->SetPulserStatus(ich,AliTOFChannelOnlineStatusArray::kTOFPulserBad); // bad status for pulser
+ AliDebug(2,Form( " channel %i pulser status after pulser = %i (bad, content = %f), with global status = %i",ich,(Int_t)fStatus->GetPulserStatus(ich),h1->GetBinContent(ich+1),(Int_t)fStatus->GetStatus(ich)));
+ }
+ else {
+ fStatus->SetPulserStatus(ich,AliTOFChannelOnlineStatusArray::kTOFPulserOk); // good status for pulser
+ AliDebug(2,Form( " channel %i pulser status after pulser = %i (good), with global status = %i",ich,(Int_t)fStatus->GetPulserStatus(ich),(Int_t)fStatus->GetStatus(ich)));
+ }
+ }
+ }
+ else {
+ Log("No channels read!! No action taken, keeping old status");
+ }
+
+ daqFile->Close();
+ delete daqFile;
+ delete h1;
}
- mean+=h1->GetBinContent(ientry);
- nread++;
- }
- }
- if (nread!=0) {
- mean/=nread;
- AliDebug(2,Form(" nread = %i , nreadNotEmpty = %i, mean = %f",nread,nreadNotEmpty,mean));
- for (Int_t ich =0;ich<fNChannels;ich++){
- if (h1->GetBinContent(ich+1)==-1) continue;
- AliDebug(3,Form(" channel %i pulser status before pulser = %i",ich,(Int_t)fStatus->GetPulserStatus(ich)));
-
- /* check whether channel has been read out during current run.
- * if the status is bad it means it has not been read out.
- * in this case skip channel in order to leave its status
- * unchanged */
- if (fStatus->GetHWStatus(ich) == AliTOFChannelOnlineStatusArray::kTOFHWBad)
- continue;
- if (h1->GetBinContent(ich+1)<0.05*mean){
- fStatus->SetPulserStatus(ich,AliTOFChannelOnlineStatusArray::kTOFPulserBad); // bad status for pulser
- AliDebug(2,Form( " channel %i pulser status after pulser = %i (bad, content = %f), with global status = %i",ich,(Int_t)fStatus->GetPulserStatus(ich),h1->GetBinContent(ich+1),(Int_t)fStatus->GetStatus(ich)));
- }
- else {
- fStatus->SetPulserStatus(ich,AliTOFChannelOnlineStatusArray::kTOFPulserOk); // good status for pulser
- AliDebug(2,Form( " channel %i pulser status after pulser = %i (good), with global status = %i",ich,(Int_t)fStatus->GetPulserStatus(ich),(Int_t)fStatus->GetStatus(ich)));
+ else{
+ Log("The input data file from DAQ (pulser) was not found, TOF exiting from Shuttle ");
+ delete listPulser;
+ delete htofPulser;
+ htofPulser = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+ return 10;//return error code for failure in retrieving Ref Data
}
+ AliDebug(2,Form(" Number of channels processed during pulser run from source %i = %i",jj, nPulserSource));
}
+ AliDebug(2,Form(" Number of channels processed during pulser run = %i",nPulser));
+ delete listPulser;
}
- else {
- Log("No channels read!! No action taken, keeping old status");
- }
-
- daqFile->Close();
- delete daqFile;
- delete h1;
- }
-
- else{
- Log("The input data file from DAQ (pulser) was not found, TOF exiting from Shuttle ");
- return 10;//return error code for failure in retrieving Ref Data
- }
- AliDebug(2,Form(" Number of channels processed during pulser run from source %i = %i",jj, nPulserSource));
-
- }
- AliDebug(2,Form(" Number of channels processed during pulser run = %i",nPulser));
- delete listPulser;
- }
else{
Log("The input data file list from DAQ (pulser) was not found, TOF exiting from Shuttle ");
+ delete htofPulser;
+ htofPulser = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
return 10;//return error code for failure in retrieving Ref Data
}
resultPulser = Store("Calib","Status",fStatus, &metaData,0,kTRUE);
if(!resultPulser){
Log("Some problems occurred while storing online object resulting from Pulser data processing");
+ delete htofPulser;
+ htofPulser = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
return 11;//return error code for problems in storing Pulser data
}
resultPulserRef = StoreReferenceData("Calib","PulserData",htofPulser, &metaDataHisto);
if (!resultPulserRef){
Log("some problems occurred::No Reference Data for pulser stored, TOF exiting from Shuttle");
+ delete htofPulser;
+ htofPulser = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
return 9;//return error code for failure in storing Ref Data
}
}
daqFile=0;
+ delete htofPulser;
+ htofPulser = 0x0;
+
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+
return 0;
}
//_____________________________________________________________________________
return 20;
}
+ Float_t noiseThr = 1; // setting default threshold for noise to 1 Hz
+ // reading config map
+ AliCDBEntry *cdbEntry = GetFromOCDB("Calib","ConfigNoise");
+ if (!cdbEntry) {
+ Log(Form("No Configuration entry found in CDB, using default values: NoiseThr = %d",noiseThr));
+ }
+ else {
+ TMap *configMap = (TMap*)cdbEntry->GetObject();
+ if (!configMap){
+ Log(Form("No map found in Config entry in CDB, using default values: NoiseThr = %d", noiseThr));
+ }
+ else{
+ TObjString *strNoiseThr = (TObjString*)configMap->GetValue("NoiseThr");
+ if (strNoiseThr) {
+ TString tmpstr = strNoiseThr->GetString();
+ noiseThr = tmpstr.Atoi();
+ }
+ else {
+ Log(Form("No NoiseThr value found in Map from ConfigNoise entry in CDB, using default value: NoiseThr = %i",noiseThr));
+ }
+ }
+ }
+
+ delete cdbEntry;
+ cdbEntry = 0x0;
+
TH1::AddDirectory(0);
Bool_t resultNoiseRef=kFALSE;
TFile * daqFile=0x0;
TH1F * h1=0x0;
- //retrieving Noise data
+ // useful counters
+ Int_t nNoise = 0;
+ Int_t nNoisyChannels = 0;
+ Int_t nNotNoisyChannels = 0;
+ Int_t nChannelsFromDA = 0;
+ Int_t nMatchingWindowNullNonZero = 0;
+ Int_t nMatchingWindowNullEqualZero = 0;
+
+ // retrieving Noise data
TList* listNoise = GetFileSources(kDAQ, "NOISE");
if (listNoise !=0x0 && listNoise->GetEntries()!=0)
- {
- AliInfo("The following sources produced files with the id NOISE");
- listNoise->Print();
- Int_t nNoise = 0;
- for (Int_t jj=0;jj<listNoise->GetEntries();jj++){
- Int_t nNoiseSource = 0;
- TObjString * str = dynamic_cast<TObjString*> (listNoise->At(jj));
- AliInfo(Form("found source %s", str->String().Data()));
- // file to be stored run per run
- TString fileNameNoise = GetFile(kDAQ, "NOISE", str->GetName());
- if (fileNameNoise.Length()>0){
- // storing reference data
- AliInfo(Form("Got the file %s, now we can process noise data.", fileNameNoise.Data()));
- daqFile = new TFile(fileNameNoise.Data(),"READ");
- h1 = (TH1F*) daqFile->Get("hTOFnoise");
- for (Int_t ibin=0;ibin<kSize;ibin++){
- if ((h1->GetBinContent(ibin+1))!=-1){
- if ((htofNoise->GetBinContent(ibin+1))==-1){
- htofNoise->SetBinContent(ibin+1,h1->GetBinContent(ibin+1));
- }
- else {
- Log(Form("Something strange occurred during Noise run, channel %i already read by another LDC, please check!",ibin));
- }
- }
- }
- // elaborating infos
- for (Int_t ich =0;ich<fNChannels;ich++){
- if (h1->GetBinContent(ich+1)==-1) continue;
- AliDebug(3,Form(" channel %i noise status before noise = %i, with global status = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich),(Int_t)fStatus->GetStatus(ich)));
- //AliDebug(2,Form( " channel %i status before noise = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich)));
-
- /* check whether channel has been read out during current run.
- * if the status is bad it means it has not been read out.
- * in this case skip channel in order to leave its status
- * unchanged */
- if ((fStatus->GetHWStatus(ich)) == AliTOFChannelOnlineStatusArray::kTOFHWBad)
- continue;
+ {
+ AliInfo("The following sources produced files with the id NOISE");
+ listNoise->Print();
+ for (Int_t jj=0;jj<listNoise->GetEntries();jj++){
+ Int_t nNoiseSource = 0;
+ TObjString * str = dynamic_cast<TObjString*> (listNoise->At(jj));
+ AliInfo(Form("found source %s", str->String().Data()));
+ // file to be stored run per run
+ TString fileNameNoise = GetFile(kDAQ, "NOISE", str->GetName());
+ if (fileNameNoise.Length()>0){
+ // storing reference data
+ AliInfo(Form("Got the file %s, now we can process noise data.", fileNameNoise.Data()));
+ daqFile = new TFile(fileNameNoise.Data(),"READ");
+ h1 = (TH1F*) daqFile->Get("hTOFnoise");
+ for (Int_t ibin=0;ibin<kSize;ibin++){
+ if ((h1->GetBinContent(ibin+1))!=-1){
+ nNoiseSource++;
+ // checking the matching window for current channel
+ if (fMatchingWindow[ibin] == 0){
+ Log(Form("Matching window for channel %i null, but the channel was read by the LDC! skipping channel, BUT Please check!",ibin));
+ if ((h1->GetBinContent(ibin+1))!=0) nMatchingWindowNullNonZero++;
+ if ((h1->GetBinContent(ibin+1))==0) nMatchingWindowNullEqualZero++;
+ continue;
+ }
+ if ((htofNoise->GetBinContent(ibin+1))==-1){
+ htofNoise->SetBinContent(ibin+1,h1->GetBinContent(ibin+1)/(fMatchingWindow[ibin]*1.E-9));
+ if ((h1->GetBinContent(ibin+1))!= 0) AliDebug(2,Form("Channel = %i, Matching window = %i, Content = %f", ibin, fMatchingWindow[ibin], htofNoise->GetBinContent(ibin+1)));
+ }
+ else {
+ Log(Form("Something strange occurred during Noise run, channel %i already read by another LDC, please check!",ibin));
+ }
+ }
+ }
- nNoise++;
- nNoiseSource++;
- if (h1->GetBinContent(ich+1)>=1){ // setting limit for noise to 1 kHz
- fStatus->SetNoiseStatus(ich,AliTOFChannelOnlineStatusArray::kTOFNoiseBad); // bad status for noise
- AliDebug(2,Form( " channel %i noise status after noise = %i, with global status = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich),(Int_t)fStatus->GetStatus(ich)));
- }
- else {
- fStatus->SetNoiseStatus(ich,AliTOFChannelOnlineStatusArray::kTOFNoiseOk); // good status for noise
- AliDebug(2,Form(" channel %i noise status after noise = %i, with global status = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich),(Int_t)fStatus->GetStatus(ich)));
- }
- }
-
- daqFile->Close();
- delete daqFile;
- delete h1;
+ Log(Form(" Number of channels processed during noise run from source %i = %i",jj, nNoiseSource));
+ daqFile->Close();
+ delete daqFile;
+ delete h1;
+ daqFile = 0x0;
+ h1 = 0x0;
- }
-
- else{
- Log("The input data file from DAQ (noise) was not found, TOF exiting from Shuttle ");
- return 13;//return error code for failure in retrieving Ref Data
- }
-
- AliDebug(2,Form(" Number of channels processed during noise run from source %i = %i",jj, nNoiseSource));
- }
- AliDebug(2,Form(" Number of channels processed during noise run = %i",nNoise));
- delete listNoise;
- }
+ }
+ else{
+ Log("The input data file from DAQ (noise) was not found, TOF exiting from Shuttle ");
+ delete listNoise;
+ listNoise = 0x0;
+ delete htofNoise;
+ htofNoise = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+ if (fMatchingWindow){
+ delete [] fMatchingWindow;
+ fMatchingWindow = 0;
+ }
+ return 13;//return error code for failure in retrieving Ref Data
+ }
+ }
+ }
+
else{
- Log("The input data file list from DAQ (noise) was not found, TOF exiting from Shuttle ");
- return 13;//return error code for failure in retrieving Ref Data
+ Log("The input data file list from DAQ (noise) was not found, TOF exiting from Shuttle ");
+ delete htofNoise;
+ htofNoise = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+ if (fMatchingWindow){
+ delete [] fMatchingWindow;
+ fMatchingWindow = 0;
+ }
+ return 13;//return error code for failure in retrieving Ref Data
}
- daqFile=0;
+ // elaborating infos to set NOISE status
+ for (Int_t ich =0;ich<fNChannels;ich++){
+ if (htofNoise->GetBinContent(ich+1)== -1) continue;
- //storing in OCDB
+ nChannelsFromDA++;
+
+ AliDebug(3,Form(" channel %i noise status before noise = %i, with global status = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich),(Int_t)fStatus->GetStatus(ich)));
+ //AliDebug(2,Form( " channel %i status before noise = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich)));
+
+ /* check whether channel has been read out during current run.
+ * if the status is bad it means it has not been read out.
+ * in this case skip channel in order to leave its status
+ * unchanged */
+ if ((fStatus->GetHWStatus(ich)) == AliTOFChannelOnlineStatusArray::kTOFHWBad)
+ continue;
+
+ nNoise++;
+ if (htofNoise->GetBinContent(ich+1) >= noiseThr){
+ fStatus->SetNoiseStatus(ich,AliTOFChannelOnlineStatusArray::kTOFNoiseBad); // bad status for noise
+ AliDebug(3,Form( " channel %i noise status after noise = %i, with global status = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich),(Int_t)fStatus->GetStatus(ich)));
+ nNoisyChannels++;
+ }
+ else {
+ fStatus->SetNoiseStatus(ich,AliTOFChannelOnlineStatusArray::kTOFNoiseOk); // good status for noise
+ AliDebug(3,Form(" channel %i noise status after noise = %i, with global status = %i",ich,(Int_t)fStatus->GetNoiseStatus(ich),(Int_t)fStatus->GetStatus(ich)));
+ nNotNoisyChannels++;
+ }
+ }
+
+ Log(Form(" Number of channels processed by DA during noise run, independetly from TOFFEE = %i",nChannelsFromDA));
+ Log(Form(" Number of channels processed during noise run (that were ON according to TOFFEE) = %i",nNoise));
+ Log(Form(" Number of noisy channels found during noise run = %i",nNoisyChannels));
+ Log(Form(" Number of not noisy channels found during noise run = %i",nNotNoisyChannels));
+ Log(Form(" Number of channels with matching window NULL (so skipped), but Non Zero content = %i",nMatchingWindowNullNonZero));
+ Log(Form(" Number of channels with matching window NULL (so skipped), and Zero content = %i",nMatchingWindowNullEqualZero));
+
+ delete listNoise;
+
+ //daqFile=0;
+
+ //storing in OCDB
+
AliCDBMetaData metaData;
metaData.SetBeamPeriod(0);
metaData.SetResponsible("Chiara Zampolli");
resultNoise = Store("Calib","Status",fStatus, &metaData,0,kTRUE);
if(!resultNoise){
Log("Some problems occurred while storing online object resulting from Noise data processing");
+ delete htofNoise;
+ htofNoise = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+ if (fMatchingWindow){
+ delete [] fMatchingWindow;
+ fMatchingWindow = 0;
+ }
return 14;//return error code for problems in storing Noise data
}
resultNoiseRef = StoreReferenceData("Calib","NoiseData",htofNoise, &metaDataHisto);
if (!resultNoiseRef){
Log("some problems occurred::No Reference Data for noise stored");
+ delete htofNoise;
+ htofNoise = 0x0;
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+ if (fMatchingWindow){
+ delete [] fMatchingWindow;
+ fMatchingWindow = 0;
+ }
return 12;//return error code for failure in storing Ref Data
}
}
+ delete htofNoise;
+ htofNoise = 0x0;
+
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+
+ if (fMatchingWindow){
+ delete [] fMatchingWindow;
+ fMatchingWindow = 0;
+ }
+
return 0;
}
//_____________________________________________________________________________
/* load current TOF FEE config from DCS FXS, parse,
* fill current FEE histogram and set FEE status */
- const char * nameFile = GetFile(kDCS,"TofFeeMap","");
+ const char * nameFile = GetFile(kDCS,"TofFeeLightMap","");
AliInfo(Form("nameFile = %s",nameFile));
if (nameFile == NULL) {
return 15;
}
- feeReader.LoadFEEConfig(nameFile);
- Int_t parseFee = feeReader.ParseFEEConfig();
- AliDebug(2,Form("%i enabled channels found in FEE configuration",parseFee));
+ feeReader.LoadFEElightConfig(nameFile);
+ Int_t parseFee = feeReader.ParseFEElightConfig();
+ AliDebug(2,Form("%i enabled channels found in FEElight configuration",parseFee));
/* load stored TOF FEE from OCDB and compare it with current FEE.
* if stored FEE is different from current FEE set update flag.
* if there is no stored FEE in OCDB set update flag */
+ fMatchingWindow = new Int_t[fNChannels];
+
AliCDBEntry *cdbEntry = GetFromOCDB("Calib","Status");
if (!cdbEntry) {
/* no CDB entry found. set update flag */
updateOCDB = kTRUE;
}
else {
+ if (cdbEntry) cdbEntry->SetOwner(kFALSE);
/* CDB entry OK. loop over channels */
fStatus = (AliTOFChannelOnlineStatusArray*) cdbEntry->GetObject();
+ delete cdbEntry;
+ cdbEntry = 0x0;
}
for (Int_t iChannel = 0; iChannel < fNChannels; iChannel++){
//AliDebug(2,Form("********** channel %i",iChannel));
/* compare current FEE channel status with stored one
* if different set update flag and break loop */
//AliDebug(2,Form( " channel %i status before FEE = %i",iChannel,(Int_t)fStatus->GetHWStatus(iChannel)));
+ fMatchingWindow[iChannel] = feeReader.GetMatchingWindow(iChannel);
if (feeReader.IsChannelEnabled(iChannel)) {
hCurrentFEE.SetBinContent(iChannel + 1, 1);
if (fStatus->GetHWStatus(iChannel)!=AliTOFChannelOnlineStatusArray::kTOFHWOk){
updateOCDB = kTRUE;
fStatus->SetHWStatus(iChannel,AliTOFChannelOnlineStatusArray::kTOFHWOk);
- AliDebug(2,Form( " changed into enabled: channel %i status after FEE = %i",iChannel,(Int_t)fStatus->GetHWStatus(iChannel)));
+ AliDebug(3,Form( " changed into enabled: channel %i status after FEE = %i",iChannel,(Int_t)fStatus->GetHWStatus(iChannel)));
}
}
else {
if (fStatus->GetHWStatus(iChannel)!=AliTOFChannelOnlineStatusArray::kTOFHWBad){
updateOCDB = kTRUE;
fStatus->SetHWStatus(iChannel,AliTOFChannelOnlineStatusArray::kTOFHWBad);
- AliDebug(2,Form( " changed into disabled: channel %i status after FEE = %i",iChannel,(Int_t)fStatus->GetHWStatus(iChannel)));
+ AliDebug(3,Form( " changed into disabled: channel %i status after FEE = %i",iChannel,(Int_t)fStatus->GetHWStatus(iChannel)));
}
}
}
if (!StoreReferenceData("Calib", "FEEData", &hCurrentFEE, &metaDataHisto)) {
/* failed */
Log("problems while storing FEE reference data");
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
return 18; /* error return code for problems while storing FEE reference data */
}
}
if (!Store("Calib", "Status", fStatus, &metaData, 0, kTRUE)) {
/* failed */
Log("problems while storing FEE data object");
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
return 17; /* return error code for problems while storing FEE data */
}
/* everything fine. return */
+ if (fStatus){
+ delete fStatus;
+ fStatus = 0;
+ }
+
return 0;
}
}
if (runType == "PHYSICS") {
- Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
- if (iresultDCS != 0) {
- return iresultDCS;
- }
- else {
- Int_t iresultDAQ = ProcessOnlineDelays();
+ Int_t iresultDAQ = ProcessOnlineDelays();
+ if (iresultDAQ != 0) {
return iresultDAQ;
}
+ else {
+ Int_t iresultDCS = ProcessDCSDataPoints(dcsAliasMap);
+ return iresultDCS;
+ }
}
// storing
}
+//_____________________________________________________________________________
+
+void
+AliTOFPreprocessor::FillWithCosmicCalibration(AliTOFChannelOnlineArray *cal)
+{
+ /*
+ * fill with cosmic calibration
+ */
+
+ Log(" Using cosmic-ray calibration.");
+
+ AliTOFcalibHisto calibHisto;
+ Log(Form(" loading calibration histograms from %s", calibHisto.GetCalibHistoFileName()));
+ Log(Form(" loading calibration parameters from %s", calibHisto.GetCalibParFileName()));
+ calibHisto.LoadCalibPar();
+
+ /* loop over channel index */
+ for (Int_t iIndex = 0; iIndex < fNChannels; iIndex++) {
+ cal->SetDelay(iIndex, calibHisto.GetNominalCorrection(iIndex));
+ }
+
+}
+
+
+//_____________________________________________________________________________
+
+void
+AliTOFPreprocessor::FillWithCableLengthMap(AliTOFChannelOnlineArray *cal)
+{
+ /*
+ * fill with cosmic calibration
+ */
+
+ Log(" Using cable-length map.");
+ AliTOFRawStream tofrs;
+ Int_t det[5], dummy, index;
+ Float_t cableTimeShift;
+
+ /* temporarly disable warnings */
+ AliLog::EType_t logLevel = (AliLog::EType_t)AliLog::GetGlobalLogLevel();
+ AliLog::SetGlobalLogLevel(AliLog::kError);
+
+ /* loop over EO indeces */
+ for (Int_t iddl = 0; iddl < 72; iddl++)
+ for (Int_t islot = 3; islot <= 12; islot++)
+ for (Int_t ichain = 0; ichain < 2; ichain++)
+ for (Int_t itdc = 0; itdc < 15; itdc++)
+ for (Int_t ichannel = 0; ichannel < 8; ichannel++) {
+
+ /* get DO index */
+ tofrs.EquipmentId2VolumeId(iddl, islot, ichain, itdc, ichannel, det);
+
+ /* swap det[3] and det[4] indeces (needed to obtain correct channel index) */
+ dummy = det[3];
+ det[3] = det[4];
+ det[4] = dummy;
+
+ /* check DO index */
+ if (det[0] < 0 || det[0] > 17 ||
+ det[1] < 0 || det[1] > 4 ||
+ det[2] < 0 || det[2] > 18 ||
+ det[3] < 0 || det[3] > 1 ||
+ det[4] < 0 || det[4] > 47)
+ continue;
+
+ /* get channel index */
+ index = AliTOFGeometry::GetIndex(det);
+
+ /* get cable time shift */
+ cableTimeShift = AliTOFCableLengthMap::GetCableTimeShift(iddl, islot, ichain, itdc);
+
+ /* set delay */
+ if (index<fNChannels) {
+ cal->SetDelay(index,cableTimeShift); // delay in ns
+ AliDebug(2,Form("Setting delay %f (ns) for channel %i",cableTimeShift,index));
+ }
+
+ } /* loop over EO indeces */
+
+ /* re-enable warnings */
+ AliLog::SetGlobalLogLevel(logLevel);
+
+}
+
+