#include "AliZDCEnCalib.h"
#include "AliZDCTowerCalib.h"
#include "AliZDCMBCalib.h"
+#include "AliZDCTDCCalib.h"
/////////////////////////////////////////////////////////////////////
// //
// return 17: error storing laser histos in RefData
// return 18: error in ZDCMBCalib.root file retrieved from DAQ FXS
// return 19: error storing MB calibration obj. in OCDB
+// return 20: error in ZDCTDCCalib.root file retrieved from DAQ FXS
+// return 21: error in storing TDC calibration obj. in OCDB
+// return 22: error in ZDCTDCHisto.root file retrieved from DAQ FXS
+// Return 23: error storing TDC reference histos in RefData
// ******************************************************************
ClassImp(AliZDCPreprocessor)
}
delete daqSource; daqSource=0;
+ // Reading the file for mapping from FXS
+ TList* daqSourcetdc = GetFileSources(kDAQ, "TDCDATA");
+ if(!daqSourcetdc){
+ AliError(Form("No sources for file ZDCChMappingTDCCalib.dat in run %d ", fRun));
+ return 20;
+ }
+ if(daqSourcetdc->GetEntries()==0) return 20;
+ Log("\t List of DAQ sources for TDCDATA id: "); daqSourcetdc->Print();
+ //
+ Bool_t resTDCcal = kTRUE;
+ TIter itertdc(daqSourcetdc);
+ TObjString* sourcetdc = 0;
+ Int_t isoutdc = 0;
+ //
+ while((sourcetdc = dynamic_cast<TObjString*> (itertdc.Next()))){
+ TString fileNametdc = GetFile(kDAQ, "TDCDATA", sourcetdc->GetName());
+ Log(Form("\t Getting file #%d: ZDCTDCdata.dat from %s\n",++isoutdc, sourcetdc->GetName()));
+
+ if(fileNametdc.Length() <= 0){
+ Log(Form("No file from source %s!", sourcetdc->GetName()));
+ return 20;
+ }
+ // --- Initializing TDC calibration object
+ AliZDCTDCCalib *tdcCalib = new AliZDCTDCCalib("ZDC");
+ // --- Reading file with calibration data
+ //const char* fname = fileName.Data();
+ if(fileNametdc){
+ FILE *filetdc;
+ if((filetdc = fopen(fileNametdc,"r")) == NULL){
+ printf("Cannot open file %s \n",fileNametdc.Data());
+ return 20;
+ }
+ Log(Form("File %s connected to process TDC data", fileNametdc.Data()));
+ //
+ Float_t tdcMean[6][2];
+ for(Int_t it=0; it<6; it++){
+ for(Int_t iu=0; iu<2; iu++) tdcMean[it][iu]=0.;
+ }
+ for(Int_t k=0; k<6; k++){
+ for(Int_t j=0; j<2; j++){
+ int leggi = fscanf(filetdc,"%f",&tdcMean[k][j]);
+ if(leggi==0) AliDebug(3," Failing reading data from tdc file");
+ tdcCalib->SetMeanTDC(k, tdcMean[k][0]);
+ tdcCalib->SetWidthTDC(k, tdcMean[k][1]);
+ }
+ }
+ fclose(filetdc);
+ }
+ else{
+ Log(Form("File %s not found", fileNametdc.Data()));
+ return 20;
+ }
+ //
+ AliCDBMetaData metaData;
+ metaData.SetBeamPeriod(0);
+ metaData.SetResponsible("Chiara Oppedisano");
+ metaData.SetComment("Filling AliZDCTDCCalib object");
+ //
+ resTDCcal = Store("Calib","TDCCalib",tdcCalib, &metaData, 0, kTRUE);
+ if(resTDCcal==kFALSE) return 21;
+ }
+ delete daqSourcetdc; daqSourcetdc = 0;
+
+ Bool_t restdcHist = kTRUE;
+ TList* daqSourceH = GetFileSources(kDAQ, "TDCHISTOS");
+ if(!daqSourceH){
+ Log(Form("No source for TDCHISTOS id run %d !", fRun));
+ return 22;
+ }
+ Log("\t List of DAQ sources for TDCHISTOS id: "); daqSourceH->Print();
+ //
+ TIter iterH(daqSourceH);
+ TObjString* sourceH = 0;
+ Int_t iH=0;
+ while((sourceH = dynamic_cast<TObjString*> (iterH.Next()))){
+ TString stringTDCFileName = GetFile(kDAQ, "TDCHISTOS", sourceH->GetName());
+ if(stringTDCFileName.Length() <= 0){
+ Log(Form("No TDCHISTOS file from source %s!", sourceH->GetName()));
+ return 22;
+ }
+ const char* tdcFileName = stringTDCFileName.Data();
+ Log(Form("\t Getting file #%d: %s from %s\n",++iH, tdcFileName, sourceH->GetName()));
+ restdcHist = StoreReferenceFile(tdcFileName, "tdcReference.root");
+ if(restdcHist==kFALSE) return 23;
+ }
+ delete daqSourceH; daqSourceH=0;
+
if(resChMapStore==kFALSE) return 5;
else return 0;
if((fBuffer&0xff000001) == 0xff000001){ // ************** Mapping
// DARC 1st datum @ fDataOffset+1 \ ZRC 1st valid datum @ fDataOffset=0
if((fPosition==fDataOffset+1) || (fPosition==fDataOffset)){
- printf("\n\n ------ AliZDCRawStream -> Reading mapping from StartOfData event ------\n");
+ //printf("\n\n ------ AliZDCRawStream -> Reading mapping from StartOfData event ------\n");
fCurrentCh=0; fCurrScCh=0; fCurrTDCCh=0;
}
else{
- printf(" ------ AliZDCRawStream -> End of ZDC StartOfData event ------\n\n");
+ //printf(" ------ AliZDCRawStream -> End of ZDC StartOfData event ------\n\n");
fSODReading = kFALSE;
return kFALSE;
}
//printf(" AliZDCRawStream -> VME SCALER HEADER: geo %d Nwords %d TrigSource %d TrigNo. %d\n",
// fScGeo,fScNWords,fScTriggerSource,fScTriggerNumber);
}
- else if(!(fBuffer & 0x04000000)){
- fIsScEventGood = kFALSE;
- }
+ // Commented by C.O. & M.G. (23/09/2011)
+ //else if(!(fBuffer & 0x04000000) && fIsScHeaderRead==kFALSE){
+ // fIsScEventGood = kFALSE;
+ //}
}
// *********************************** PATTERN UNIT ***********************************
else if(fADCModule == kPUGeo){
// ********************************** VME SCALER DATA **********************************
// Reading VME scaler data
if(fIsScHeaderRead && fPosition>=fScStartCounter+1){ // *** Scaler word
- fADCModule=kScalerGeo; fIsADCDataWord=kFALSE; fIsScalerWord=kTRUE;
+ fADCModule=kScalerGeo;
+ fIsADCDataWord=kFALSE;
+ fIsScalerWord=kTRUE;
fScEvCounter = fBuffer;
Int_t nWords = (Int_t) (fScNWords);
if(fPosition == fScStartCounter+nWords) fIsScHeaderRead = kFALSE;
//Ch. debug
- //printf(" AliZDCRawStream -> scaler datum %d", fScEvCounter);
+ //printf(" AliZDCRawStream -> scaler datum %x \n", fScEvCounter);
}
// ********************************** ZDC TDC DATA **********************************
// ZDC TDC data
}
}
// Ch. debug
- //printf(" AliZDCRawStream -> Trigger history word %d\n", fPosition-fTrigHistStart);
+ //printf(" AliZDCRawStream -> Trigger history word[%d] %x\n", fPosition, fBuffer);
}
}
#include "AliZDCEnCalib.h"
#include "AliZDCTowerCalib.h"
#include "AliZDCMBCalib.h"
+#include "AliZDCTDCCalib.h"
#include "AliZDCRecoParam.h"
#include "AliZDCRecoParampp.h"
#include "AliZDCRecoParamPbPb.h"
fPedData(GetPedestalData()),
fEnCalibData(GetEnergyCalibData()),
fTowCalibData(GetTowerCalibData()),
+ fTDCCalibData(GetTDCCalibData()),
fRecoMode(0),
fBeamEnergy(0.),
fNRun(0),
}// ADC DATA
// ***************************** Reading Scaler
else if(rawData.GetADCModule()==kScalerGeo){
- if(rawData.IsScalerWord()==kTRUE && rawData.IsScEventGood()==kTRUE){
+ if(rawData.IsScalerWord()==kTRUE){
isScalerOn = kTRUE;
scalerData[jsc] = rawData.GetTriggerCount();
// Ch. debug
iprevtdc=itdc;
tdcData[itdc][ihittdc] = rawData.GetZDCTDCDatum();
// Ch. debug
- //printf(" Reconstructed TDC[%d, %d] %d ",itdc, ihittdc, tdcData[itdc][ihittdc]);
+ //if(ihittdc==0) printf(" TDC%d %d ",itdc, tdcData[itdc][ihittdc]);
}// ZDC TDC DATA
// ***************************** Reading PU
else if(rawData.GetADCModule()==kPUGeo){
{
// fill energies and number of participants to the ESD
+ // Retrieving TDC calibration data
+ // Parameters for TDC centering around zero
+ int const knTDC = 6;
+ Float_t tdcOffset[knTDC];
+ for(Int_t jj=0; jj<knTDC; jj++) tdcOffset[jj] = fTDCCalibData->GetMeanTDC(jj);
+ //fTDCCalibData->Print("");
+
AliZDCReco reco;
AliZDCReco* preco = &reco;
clustersTree->SetBranchAddress("ZDC", &preco);
fESDZDC->SetZDCScaler(counts);
}
- // Writing TDC data into ZDC ESDs
Int_t tdcValues[32][4];
Float_t tdcCorrected[32][4];
for(Int_t jk=0; jk<32; jk++){
for(Int_t lk=0; lk<4; lk++){
tdcValues[jk][lk] = reco.GetZDCTDCData(jk, lk);
+ //Ch debug
+ //if((jk>=8 && jk<=13 && lk==0) || jk==15) printf(" *** ZDC: tdc%d = %d = %f ns \n",jk,tdcValues[jk][lk],0.025*tdcValues[jk][lk]);
}
}
+
+ // Writing TDC data into ZDC ESDs
// 4/2/2011 -> Subtracting L0 (tdcValues[15]) instead of ADC gate
// we try to keep the TDC oscillations as low as possible!
for(Int_t jk=0; jk<32; jk++){
for(Int_t lk=0; lk<4; lk++){
- if(tdcValues[jk][lk]!=0.) tdcCorrected[jk][lk] = 0.025*(tdcValues[jk][lk]-tdcValues[15][0])+fMeanPhase;
+ if(TMath::Abs(tdcValues[jk][lk])>1e-10){
+ tdcCorrected[jk][lk] = 0.025*(tdcValues[jk][lk]-tdcValues[15][0])+fMeanPhase;
+ // Sep 2011: TDC ch. from 8 to 13 centered around 0 using OCDB
+ if(jk>=8 && jk<=13) tdcCorrected[jk][lk] = tdcCorrected[jk][lk] - tdcOffset[jk-8];
+ //Ch. debug
+ //if((jk>=8 && jk<=13) || jk==15) printf(" *** tdcOffset%d %f tdcCorr%d %f ",jk,tdcOffset[jk-8],tdcCorrected[jk][lk]);
+
+ }
}
}
+
fESDZDC->SetZDCTDCData(tdcValues);
fESDZDC->SetZDCTDCCorrected(tdcCorrected);
fESDZDC->AliESDZDC::SetBit(AliESDZDC::kCorrectedTDCFilled, reco.GetEnergyFlag());
return calibdata;
}
+
+//_____________________________________________________________________________
+AliZDCTDCCalib* AliZDCReconstructor::GetTDCCalibData() const
+{
+
+ // Getting TDC object for ZDC
+
+ AliCDBEntry *entry = AliCDBManager::Instance()->Get("ZDC/Calib/TDCCalib");
+ if(!entry) AliFatal("No calibration data loaded!");
+ entry->SetOwner(kFALSE);
+
+ AliZDCTDCCalib *calibdata = dynamic_cast<AliZDCTDCCalib*> (entry->GetObject());
+ if(!calibdata) AliFatal("Wrong calibration object in calibration file!");
+
+ return calibdata;
+}
class AliZDCEnCalib;
class AliZDCTowerCalib;
class AliZDCMBCalib;
+class AliZDCTDCCalib;
class AliZDCRecoParampp;
class AliZDCRecoParamPbPb;
class AliLog;
AliZDCEnCalib *GetEnergyCalibData() const;
AliZDCTowerCalib *GetTowerCalibData() const;
AliZDCMBCalib *GetMBCalibData() const;
+ AliZDCTDCCalib *GetTDCCalibData() const;
private:
AliZDCReconstructor(const AliZDCReconstructor&); //Not implemented
AliZDCPedestals *fPedData; //! pedestal calibration data
AliZDCEnCalib *fEnCalibData; //! energy calibration data
AliZDCTowerCalib *fTowCalibData; //! equalization calibration data
+ AliZDCTDCCalib *fTDCCalibData; //! TDC offset data
Int_t fRecoMode; // =1->p-p, =2->A-A
Float_t fBeamEnergy; // beam energy
AliESDZDC* fESDZDC; // ESD output object
- ClassDef(AliZDCReconstructor, 12) // class for the ZDC reconstruction
+ ClassDef(AliZDCReconstructor, 13) // class for the ZDC reconstruction
};
#endif
--- /dev/null
+/**************************************************************************
+ * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * *
+ * Author: The ALICE Off-line Project. *
+ * Contributors are mentioned in the code where appropriate. *
+ * *
+ * Permission to use, copy, modify and distribute this software and its *
+ * documentation strictly for non-commercial purposes is hereby granted *
+ * without fee, provided that the above copyright notice appears in all *
+ * copies and that both the copyright notice and this permission notice *
+ * appear in the supporting documentation. The authors make no claims *
+ * about the suitability of this software for any purpose. It is *
+ * provided "as is" without express or implied warranty. *
+ **************************************************************************/
+
+/* $Id: AliZDCTDCCalib.cxx 46092 2010-12-16 13:18:21Z coppedis $ */
+
+///////////////////////////////////////////////////////////////////////////////
+// //
+// class for ZDC calibration -> values for TDC offset calibration //
+// //
+///////////////////////////////////////////////////////////////////////////////
+
+#include "AliZDCTDCCalib.h"
+
+ClassImp(AliZDCTDCCalib)
+
+//________________________________________________________________
+AliZDCTDCCalib::AliZDCTDCCalib():
+TNamed()
+{
+ Reset();
+}
+
+//________________________________________________________________
+AliZDCTDCCalib::AliZDCTDCCalib(const char* name):
+TNamed()
+{
+ // Constructor
+ TString namst = "Calib_";
+ namst += name;
+ SetName(namst.Data());
+ SetTitle(namst.Data());
+ Reset();
+ for(Int_t i=0; i<6; i++){
+ fMeanTDC[i] = 0.;
+ fWidthTDC[i] = 0.;
+ }
+
+
+}
+
+//________________________________________________________________
+AliZDCTDCCalib::AliZDCTDCCalib(const AliZDCTDCCalib& calibda) :
+ TNamed(calibda)
+{
+ // Copy constructor
+ SetName(calibda.GetName());
+ SetTitle(calibda.GetName());
+ Reset();
+ for(int t=0; t<6; t++){
+ fMeanTDC[t] = calibda.GetMeanTDC(t);
+ fWidthTDC[t] = calibda.GetWidthTDC(t);
+ }
+}
+
+//________________________________________________________________
+AliZDCTDCCalib &AliZDCTDCCalib::operator =(const AliZDCTDCCalib& calibda)
+{
+// assignment operator
+ SetName(calibda.GetName());
+ SetTitle(calibda.GetName());
+ Reset();
+ for(int t=0; t<6; t++){
+ fMeanTDC[t] = calibda.GetMeanTDC(t);
+ fWidthTDC[t] = calibda.GetWidthTDC(t);
+ }
+
+ return *this;
+}
+
+//________________________________________________________________
+AliZDCTDCCalib::~AliZDCTDCCalib()
+{
+}
+
+//________________________________________________________________
+void AliZDCTDCCalib::Reset()
+{
+ // Reset
+ memset(fMeanTDC,0,6*sizeof(Float_t));
+ memset(fWidthTDC,0,6*sizeof(Float_t));
+}
+
+
+//________________________________________________________________
+void AliZDCTDCCalib::Print(Option_t *) const
+{
+ // Printing of calibration object
+ printf("\n ####### TDC calibration values ####### \n");
+ for(int t=0; t<6; t++)
+ printf("\t ch.%d (%f, %f)\n",t,fMeanTDC[t],fWidthTDC[t]);
+
+}
+
+//________________________________________________________________
+void AliZDCTDCCalib::SetMeanTDC(Float_t* mean)
+{
+ if(mean) for(int t=0; t<6; t++) fMeanTDC[t] = mean[t];
+ else for(int t=0; t<6; t++) fMeanTDC[t] = 0.;
+}
+//________________________________________________________________
+void AliZDCTDCCalib::SetWidthTDC(Float_t* width)
+{
+ if(width) for(int t=0; t<6; t++) fWidthTDC[t] = width[t];
+ else for(int t=0; t<6; t++) fWidthTDC[t] = 0.;
+}
--- /dev/null
+#ifndef ALIZDCTDCCALIB_H
+#define ALIZDCTDCCALIB_H
+
+/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice */
+
+////////////////////////////////////////////////////
+// class for ZDC calibration -> TDC mean values //
+////////////////////////////////////////////////////
+
+#include "TNamed.h"
+#include "AliCDBEntry.h"
+
+class AliZDC;
+
+class AliZDCTDCCalib: public TNamed {
+
+ public:
+ AliZDCTDCCalib();
+ AliZDCTDCCalib(const char* name);
+ AliZDCTDCCalib(const AliZDCTDCCalib &calibda);
+ AliZDCTDCCalib& operator= (const AliZDCTDCCalib &calibda);
+ virtual ~AliZDCTDCCalib();
+ void Reset();
+ virtual void Print(Option_t *) const;
+
+ Float_t GetMeanTDC(Int_t ch) const
+ {if(ch<6) return fMeanTDC[ch];
+ else printf(" ERROR! ZDC TDC calib data only for ch<6\n\n");}
+ Float_t GetWidthTDC(Int_t ch) const
+ {if(ch<6) return fWidthTDC[ch];
+ else printf(" ERROR! ZDC TDC calib data only for ch<6\n\n");}
+
+ void SetMeanTDC(Int_t ch, Float_t val) {fMeanTDC[ch]=val;}
+ void SetWidthTDC(Int_t ch, Float_t val) {fWidthTDC[ch]=val;}
+ void SetMeanTDC(Float_t* mean);
+ void SetWidthTDC(Float_t* width);
+
+ protected:
+ // --- Pedestals
+ Float_t fMeanTDC[6]; // Mean TDC values
+ Float_t fWidthTDC[6]; // TDC widths
+ //
+ ClassDef(AliZDCTDCCalib,1) // ZDC TDC calibration data
+};
+
+#endif
AliZDCTowerCalib.cxx
AliZDCMBCalib.cxx
AliZDCChMap.cxx
+ AliZDCTDCCalib.cxx
AliZDCMisAligner.cxx
AliZDCDataDCS.cxx
AliZDCPreprocessor.cxx
--- /dev/null
+ -68.922867 0.199467
+ -68.248161 0.827527
+ -33.459202 0.639460
+ -31.035864 0.238498
+ -31.331154 0.595405
+ -35.603035 0.690892
shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "MBCALIB", "LDC", "ZDCMBCalib.root");
//
shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "MAPPING", "MON", "ZDCChMapping.dat");
+ shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "TDCDATA", "MON", "ZDCTDCCalib.dat");
+ shuttle->AddInputFile(AliTestShuttle::kDAQ, "ZDC", "TDCHISTOS", "MON", "ZDCTDCHisto.root");
- // TODO(3)
+ // Todo(3)
//
// The shuttle can read run type stored in the DAQ logbook.
// To test it, we must provide the run type manually. They will be retrieved in the preprocessor
->Get("ZDC/Calib/LaserCalib", 0);
else if((str.CompareTo("CALIBRATION_EMD")) == 0) chkEntry1 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
->Get("ZDC/Calib/EnergyCalib", 0);
+ else if((str.CompareTo("PHYSICS")) == 0) chkEntry1 = AliCDBManager::Instance()->GetStorage(AliShuttleInterface::GetMainCDB())
+ ->Get("ZDC/Calib/TDCCalib", 0);
if(!chkEntry0){
if((str.CompareTo("STANDALONE_PEDESTAL")) == 0) printf("No file in ZDC/Calib/Pedestal\n");
else if((str.CompareTo("STANDALONE_LASER")) == 0) printf("No file in ZDC/Calib/LaserCalib\n");
else if((str.CompareTo("CALIBRATION_EMD")) == 0) printf("No file in ZDC/Calib/EnergyCalib\n");
+ else if((str.CompareTo("PHYSICS")) == 0) printf("No file in ZDC/Calib/TDCCalib\n");
return;
}
#pragma link C++ class AliZDCMBCalib+;
#pragma link C++ class AliZDCMisAligner+;
#pragma link C++ class AliZDCChMap+;
+#pragma link C++ class AliZDCTDCCalib+;
#pragma link C++ class AliZDCDataDCS+;
#pragma link C++ class AliZDCPreprocessor+;
#pragma link C++ class AliZDCQAChecker+;