From 27d1ff1fa8e3f988945e232de4de71cb6b6e4d3a Mon Sep 17 00:00:00 2001 From: coppedis Date: Mon, 3 Oct 2011 08:20:08 +0000 Subject: [PATCH] Changes to center ZDC TDC values around 0 --- .../Calib/TDCCalib/Run0_999999999_v0_s0.root | Bin 0 -> 2518 bytes ZDC/AliZDCPreprocessor.cxx | 92 ++++++++++++++ ZDC/AliZDCRawStream.cxx | 19 +-- ZDC/AliZDCReconstructor.cxx | 44 ++++++- ZDC/AliZDCReconstructor.h | 5 +- ZDC/AliZDCTDCCalib.cxx | 117 ++++++++++++++++++ ZDC/AliZDCTDCCalib.h | 47 +++++++ ZDC/CMakelibZDCbase.pkg | 1 + ZDC/ShuttleInput/ZDCTDCCalib.dat | 6 + ZDC/ShuttleInput/ZDCTDCHisto.root | Bin 0 -> 11338 bytes ZDC/TestZDCPreprocessor.C | 7 +- ZDC/ZDCbaseLinkDef.h | 1 + 12 files changed, 325 insertions(+), 14 deletions(-) create mode 100644 OCDB/ZDC/Calib/TDCCalib/Run0_999999999_v0_s0.root create mode 100644 ZDC/AliZDCTDCCalib.cxx create mode 100644 ZDC/AliZDCTDCCalib.h create mode 100644 ZDC/ShuttleInput/ZDCTDCCalib.dat create mode 100644 ZDC/ShuttleInput/ZDCTDCHisto.root diff --git a/OCDB/ZDC/Calib/TDCCalib/Run0_999999999_v0_s0.root b/OCDB/ZDC/Calib/TDCCalib/Run0_999999999_v0_s0.root new file mode 100644 index 0000000000000000000000000000000000000000..5dc522f10317efffb35c402d1b701706905dd20d GIT binary patch literal 2518 zcmcImc`%#%8vcS1TPw77;i8sk#gbV2b|fw0e}utegPJnI{?6%{*xgP-etu9QD9oHhiHQAo40zbUz5)OV0#G55etwJqKQ1#lKaKz%?)1rhlj&lb z#N3SZ%*=9GF|CA4_z>QYE1yrJi(%4L=GRNTW5%`Qu#i)Mk=bBnxYfENSiiZ)t-jNu zVd6?`qkp<8zuBQXz*HmqkX!@K_xi|JGCoY-Iy}S>C@yi}DVAGHOR88(`7)f*lrEw2 zcRtaXBwo!+UMiQW4=);WFS#r4rvwZ64d711`1##WzA!M})vH^tIDD*55q=MS)Ll)s zY5{svTTA4M@KF{&pQDr36_K^?rt_MwnhEnC1Lx^#cdA@o+4ou7szXXuU$qP99EBB| zoJ@iMGJ|ew?8gN<1*fu|GC6SS;K>1jP-h!rBt^i95<&0}Cq!70&XR?(QZe%(U}fl{PJBwbs$1uD`B& zfIT(Bct61SvHM}omSP}2qDP0>&O*W+mA?!a{px{Urw`{RjMp1>z8h41C}NZ|7lM(* zlg8?<&^z^Y*L8b$l`l$hIl5iIz>90AiZ|l%G+o~c%8MM+q3+nB%LbfoP=#x(sI(Dr zF`~dME*{Hq5$#ZzvnuB@A^3C2?OI;@_>NrYx;N9!zv03mwRQz4XFL2YbTAt8Nt*{f zqT%B#EsdCN&l>10KdX=jU6dNq@Vc1#4P`3gc zHBshw-1^-UA`|2X7X+MKwp`~?B;ZHajqCbna(tWc)DD*8-93dusK=_QkT7q|{%U83R?; zlHL4$W*IxeLL6Nl8l7*yolHOOGtMd+&S)^oBT{JyeSl_fkYt%Z=uvppQ**L{u_NQU z#p0R}h=j!lGi5v0PcA(+Df)F#L-|9VT_e_bwXB0Hg^f7rt7UfUwl z*gmm}71xiOUf_K=N{dM()OU`KDn+-Cj=pQSxT7d)7-*kZi<`Y-Fl;~+CnLRY*?!jg zzWzcLqevYTTmG(YCwIR3NTPu|@|>N%dw4&$arQmaq*jrqLP$}suFg;^QKcIFCZ(HB z7Bc9|Fdvf56@+VT=0kdb&l}OK(b3U;u|1nqV_G}vC>C~ktvpyS+6X0-U>oDi@~mU6 zAh&f3SPL=N_SduX_bI}@=|(jR=ANZmFhS)cSE+_wp!9yvaNL>mj!tC)SZ!IsBDtz2 za*oBRN$HKiq!vQ<_jEINM-|RF>>(9g1OBAI)Z{aSaW-G7o^|}lnY$%B4r%k+@i*ml zo)N5f7K{3F?{#X|r+UK%->^1UKW@dp`iefH#u+ zxt>2_ij-$@O@rJ$973xQK^K^x%`Y_&Dk?WuK{jUEY*U?S2tjO$@q<-5{E$RDC16OD zNDV~}718cotjQ9XxFz*I$^!9~bH`IQ55a23*EX(<3ObzH?lP$>e#+OFd)#trli?+k zo1GFgy^NWv&nk9XE`-}1zikC-@a`?L@6#pxt=`2Dm5t+7kJ>&H_EzMVOhPxc_pzjq z8vbaD3qN!(p$Wc|9*iYJaw=MLNX`}wR-@k%&N7M zZ;uV}Y_zZ6#Q}rpY1Q?+;nmR{!I7K0ccchy&z!4`hBM4JZ``lLm#+U<3DPx%XrmWlMl#-Hmfg;6QJQE*dd$h|#PaB=K7FDvy?>t*` zj49xnd<|a^l^`LQwgGetEntries()==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 (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 (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; diff --git a/ZDC/AliZDCRawStream.cxx b/ZDC/AliZDCRawStream.cxx index 87243c2348f..520b9e04857 100644 --- a/ZDC/AliZDCRawStream.cxx +++ b/ZDC/AliZDCRawStream.cxx @@ -436,11 +436,11 @@ Bool_t AliZDCRawStream::Next() 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; } @@ -825,9 +825,10 @@ Bool_t AliZDCRawStream::Next() //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){ @@ -861,12 +862,14 @@ Bool_t AliZDCRawStream::Next() // ********************************** 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 @@ -965,7 +968,7 @@ Bool_t AliZDCRawStream::Next() } } // Ch. debug - //printf(" AliZDCRawStream -> Trigger history word %d\n", fPosition-fTrigHistStart); + //printf(" AliZDCRawStream -> Trigger history word[%d] %x\n", fPosition, fBuffer); } } diff --git a/ZDC/AliZDCReconstructor.cxx b/ZDC/AliZDCReconstructor.cxx index 9a5120de5eb..a62c925417d 100644 --- a/ZDC/AliZDCReconstructor.cxx +++ b/ZDC/AliZDCReconstructor.cxx @@ -43,6 +43,7 @@ #include "AliZDCEnCalib.h" #include "AliZDCTowerCalib.h" #include "AliZDCMBCalib.h" +#include "AliZDCTDCCalib.h" #include "AliZDCRecoParam.h" #include "AliZDCRecoParampp.h" #include "AliZDCRecoParamPbPb.h" @@ -59,6 +60,7 @@ AliZDCReconstructor:: AliZDCReconstructor() : fPedData(GetPedestalData()), fEnCalibData(GetEnergyCalibData()), fTowCalibData(GetTowerCalibData()), + fTDCCalibData(GetTDCCalibData()), fRecoMode(0), fBeamEnergy(0.), fNRun(0), @@ -557,7 +559,7 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr }// 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 @@ -574,7 +576,7 @@ void AliZDCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTr 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){ @@ -1293,6 +1295,13 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) { // 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; jjGetMeanTDC(jj); + //fTDCCalibData->Print(""); + AliZDCReco reco; AliZDCReco* preco = &reco; clustersTree->SetBranchAddress("ZDC", &preco); @@ -1343,21 +1352,32 @@ void AliZDCReconstructor::FillZDCintoESD(TTree *clustersTree, AliESDEvent* esd) 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()); @@ -1455,3 +1475,19 @@ AliZDCMBCalib* AliZDCReconstructor::GetMBCalibData() const 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 (entry->GetObject()); + if(!calibdata) AliFatal("Wrong calibration object in calibration file!"); + + return calibdata; +} diff --git a/ZDC/AliZDCReconstructor.h b/ZDC/AliZDCReconstructor.h index d892d5d5f51..1957f26ede7 100644 --- a/ZDC/AliZDCReconstructor.h +++ b/ZDC/AliZDCReconstructor.h @@ -21,6 +21,7 @@ class AliZDCPedestals; class AliZDCEnCalib; class AliZDCTowerCalib; class AliZDCMBCalib; +class AliZDCTDCCalib; class AliZDCRecoParampp; class AliZDCRecoParamPbPb; class AliLog; @@ -71,6 +72,7 @@ public: AliZDCEnCalib *GetEnergyCalibData() const; AliZDCTowerCalib *GetTowerCalibData() const; AliZDCMBCalib *GetMBCalibData() const; + AliZDCTDCCalib *GetTDCCalibData() const; private: AliZDCReconstructor(const AliZDCReconstructor&); //Not implemented @@ -97,6 +99,7 @@ private: 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 @@ -108,7 +111,7 @@ private: AliESDZDC* fESDZDC; // ESD output object - ClassDef(AliZDCReconstructor, 12) // class for the ZDC reconstruction + ClassDef(AliZDCReconstructor, 13) // class for the ZDC reconstruction }; #endif diff --git a/ZDC/AliZDCTDCCalib.cxx b/ZDC/AliZDCTDCCalib.cxx new file mode 100644 index 00000000000..98521bcd0a4 --- /dev/null +++ b/ZDC/AliZDCTDCCalib.cxx @@ -0,0 +1,117 @@ +/************************************************************************** + * 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.; +} diff --git a/ZDC/AliZDCTDCCalib.h b/ZDC/AliZDCTDCCalib.h new file mode 100644 index 00000000000..adeb80e3cb0 --- /dev/null +++ b/ZDC/AliZDCTDCCalib.h @@ -0,0 +1,47 @@ +#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 diff --git a/ZDC/CMakelibZDCbase.pkg b/ZDC/CMakelibZDCbase.pkg index 8d309cfc9f1..430ad478932 100644 --- a/ZDC/CMakelibZDCbase.pkg +++ b/ZDC/CMakelibZDCbase.pkg @@ -37,6 +37,7 @@ set ( SRCS AliZDCTowerCalib.cxx AliZDCMBCalib.cxx AliZDCChMap.cxx + AliZDCTDCCalib.cxx AliZDCMisAligner.cxx AliZDCDataDCS.cxx AliZDCPreprocessor.cxx diff --git a/ZDC/ShuttleInput/ZDCTDCCalib.dat b/ZDC/ShuttleInput/ZDCTDCCalib.dat new file mode 100644 index 00000000000..9b0469eb1cf --- /dev/null +++ b/ZDC/ShuttleInput/ZDCTDCCalib.dat @@ -0,0 +1,6 @@ + -68.922867 0.199467 + -68.248161 0.827527 + -33.459202 0.639460 + -31.035864 0.238498 + -31.331154 0.595405 + -35.603035 0.690892 diff --git a/ZDC/ShuttleInput/ZDCTDCHisto.root b/ZDC/ShuttleInput/ZDCTDCHisto.root new file mode 100644 index 0000000000000000000000000000000000000000..eae87793924bfcf63dff952c71f73d83936adea6 GIT binary patch literal 11338 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 literal 0 HcmV?d00001 diff --git a/ZDC/TestZDCPreprocessor.C b/ZDC/TestZDCPreprocessor.C index 7c3b554225a..aa42892e4c9 100644 --- a/ZDC/TestZDCPreprocessor.C +++ b/ZDC/TestZDCPreprocessor.C @@ -76,8 +76,10 @@ void TestZDCPreprocessor(const char* runType="PHYSICS") 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 @@ -145,6 +147,8 @@ void TestZDCPreprocessor(const char* runType="PHYSICS") ->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){ @@ -155,6 +159,7 @@ void TestZDCPreprocessor(const char* runType="PHYSICS") 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; } diff --git a/ZDC/ZDCbaseLinkDef.h b/ZDC/ZDCbaseLinkDef.h index 5266a7ca5ee..efbc5523459 100644 --- a/ZDC/ZDCbaseLinkDef.h +++ b/ZDC/ZDCbaseLinkDef.h @@ -18,6 +18,7 @@ #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+; -- 2.39.3