X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFPreprocessor.cxx;h=2ad2a7d3920ddc45d9945a032c054d8aeb20b2cd;hb=391fa967074988124f3a1eaa56fd680ffce4c00d;hp=780d08e206d746dfc0c8662e25bcecbe0ebc841c;hpb=013ac2ddfab871527fb369de8e3d65a4d4522315;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFPreprocessor.cxx b/TOF/AliTOFPreprocessor.cxx index 780d08e206d..2ad2a7d3920 100644 --- a/TOF/AliTOFPreprocessor.cxx +++ b/TOF/AliTOFPreprocessor.cxx @@ -15,6 +15,7 @@ /* $Id$ */ + //#include //#include //#include @@ -37,6 +38,7 @@ #include "AliTOFFEEReader.h" #include "AliTOFRawStream.h" #include "AliTOFCableLengthMap.h" +#include "AliTOFcalibHisto.h" // TOF preprocessor class. @@ -199,6 +201,7 @@ UInt_t AliTOFPreprocessor::ProcessOnlineDelays() { // Processing data from DAQ for online calibration + Bool_t updateOCDB = kFALSE; Log("Processing DAQ delays"); // reading configuration map @@ -269,7 +272,25 @@ UInt_t AliTOFPreprocessor::ProcessOnlineDelays() 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); @@ -375,63 +396,30 @@ UInt_t AliTOFPreprocessor::ProcessOnlineDelays() } Int_t nNotStatistics = 0; // number of channel with not enough statistics - /* FDR flag set. do not compute delays, use nominal cable delays */ + /* 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!"); - Log(" Using nominal cable delays."); - - 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 (indexSetDelay(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); - + 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;ichGetBinContent(ibin+1))!=0) nMatchingWindowNullNonZero++; if ((h1->GetBinContent(ibin+1))==0) nMatchingWindowNullEqualZero++; continue; @@ -995,14 +991,14 @@ UInt_t AliTOFPreprocessor::ProcessFEEData() /* 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 */ @@ -1158,3 +1154,88 @@ UInt_t AliTOFPreprocessor::Process(TMap* dcsAliasMap) } +//_____________________________________________________________________________ + +void +AliTOFPreprocessor::FillWithCosmicCalibration(AliTOFChannelOnlineArray *cal) +{ + /* + * fill with cosmic calibration + */ + + Log(" Using cosmic-ray calibration."); + + AliTOFcalibHisto calibHisto; + calibHisto.SetFullCorrectionFlag(AliTOFcalibHisto::kTimeSlewingCorr, kFALSE); + 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.GetFullCorrection(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 (indexSetDelay(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); + +} + +