/************************************************************************** * 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. * **************************************************************************/ #include "AliADDataDCS.h" #include "AliDCSValue.h" #include "AliLog.h" #include #include #include #include #include #include #include #include class TH2; class AliCDBMetaData; class TDatime; // AliADDataDCS class // main aim to introduce the aliases for the AD DCS // data points to be then // stored in the OCDB, and to process them. // ProcessData() method called by ADPreprocessor ClassImp(AliADDataDCS) //_____________________________________________________________________________ AliADDataDCS::AliADDataDCS(): TObject(), fRun(0), fStartTime(0), fEndTime(0), fDaqStartTime(0), fDaqEndTime(0), fCtpStartTime(0), fCtpEndTime(0), fGraphs("TGraph",kNGraphs), fFEEParameters(NULL), fIsProcessed(kFALSE) { // Default constructor for(int i=0;iSetOwnerValue(); Init(); } //_____________________________________________________________________________ AliADDataDCS::~AliADDataDCS() { // destructor fGraphs.Clear("C"); delete fFEEParameters; } //_____________________________________________________________________________ Bool_t AliADDataDCS::ProcessData(TMap& aliasMap){ // method to process the data Bool_t success = kTRUE; if(!(fAliasNames[0])) Init(); TObjArray *aliasArr; AliDCSValue* aValue; // starting loop on aliases for(int iAlias=0; iAliasGetEntries()<2){ AliWarning(Form("Alias %s has just %d entries!", fAliasNames[iAlias].Data(),aliasArr->GetEntries())); } TIter iterarray(aliasArr); if(iAliasGetEntries(); Double_t *times = new Double_t[nentries]; Double_t *values = new Double_t[nentries]; UInt_t iValue=0; Float_t variation = 0.0; while((aValue = (AliDCSValue*) iterarray.Next())) { UInt_t currentTime = aValue->GetTimeStamp(); //if(currentTime>fCtpEndTime) break; //What is this for? values[iValue] = aValue->GetFloat(); times[iValue] = (Double_t) (currentTime); if(iValue>0) { if(values[iValue-1]>0.) variation = TMath::Abs(values[iValue]-values[iValue-1])/values[iValue-1]; if(variation > 0.01) fDeadChannel[GetOfflineChannel(iAlias)] = kTRUE; } fHv[iAlias]->Fill(values[iValue]); printf("%s : %s : %f Dead=%d\n",fAliasNames[iAlias].Data(),TTimeStamp(currentTime).AsString(),values[iValue],fDeadChannel[GetOfflineChannel(iAlias)]); iValue++; } CreateGraph(iAlias, aliasArr->GetEntries(), times, values); // fill graphs // calculate mean and rms of the first two histos // and convert index to aliroot channel Int_t iChannel = GetOfflineChannel(iAlias); fMeanHV[iChannel] = fHv[iAlias]->GetMean(); fWidthHV[iChannel] = fHv[iAlias]->GetRMS(); delete[] values; delete[] times; } else { // Treating FEE Parameters AliDCSValue * lastVal = NULL; while((aValue = (AliDCSValue*) iterarray.Next())) lastVal = aValue; // Take only the last value fFEEParameters->Add(new TObjString(fAliasNames[iAlias].Data()),lastVal); } } fIsProcessed=kTRUE; return success; } //_____________________________________________________________________________ void AliADDataDCS::Init(){ // initialization of aliases and DCS data TString sindex; int iAlias = 0; for(int iPM = 0; iPM<16 ; iPM++){ fAliasNames[iAlias] = Form("AD0/HV/PM%d",iPM); fHv[iAlias] = new TH1F(fAliasNames[iAlias].Data(),fAliasNames[iAlias].Data(), 3000, kHvMin, kHvMax); fHv[iAlias]->GetXaxis()->SetTitle("Hv"); iAlias++; } // Time Resolution Parameters for(int iCIU = 0; iCIU<2 ; iCIU++){ fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/TimeResolution",iCIU); fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/WidthResolution",iCIU); } // HPTDC parameters for(int iCIU = 0; iCIU<2 ; iCIU++){ fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/MatchWindow",iCIU); fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/SearchWindow",iCIU); fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/TriggerCountOffset",iCIU); fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/RollOver",iCIU); } for(int iCIU = 0; iCIU<2 ; iCIU++){ for(int iCh=1;iCh<=8;iCh++){ fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DelayHit%d",iCIU,iCh); } } for(int iCIU = 0; iCIU<2 ; iCIU++){ for(int iCh=1;iCh<=8;iCh++){ fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DiscriThr%d",iCIU,iCh); } } if(iAlias!=kNAliases) AliError(Form("Number of DCS Aliases defined not correct")); } //_____________________________________________________________________________ void AliADDataDCS::Introduce(UInt_t numAlias, const TObjArray* aliasArr)const { // method to introduce new aliases int entries=aliasArr->GetEntries(); AliInfo(Form("************ Alias: %s **********",fAliasNames[numAlias].Data())); AliInfo(Form(" %d DP values collected",entries)); } //_____________________________________________________________________________ void AliADDataDCS::CreateGraph(int i, int dim, const Double_t *x, const Double_t *y) { // Create graphics TGraph *gr = new(fGraphs[fGraphs.GetEntriesFast()]) TGraph(dim, x, y); gr->GetXaxis()->SetTimeDisplay(1); gr->SetTitle(fAliasNames[i].Data()); AliInfo(Form("Array entries: %d",fGraphs.GetEntriesFast())); } //_____________________________________________________________________________ void AliADDataDCS::Draw(const Option_t* /*option*/) { // Draw all histos and graphs if(!fIsProcessed) return; if(fGraphs.GetEntries()==0) return; TCanvas *cHV = new TCanvas("AD0_HV","AD0_HV"); cHV->Divide(4,4); for(int iPM = 0; iPM<16 ; iPM++){ cHV->cd(iPM+1); ((TGraph*) fGraphs.UncheckedAt(iPM))->SetMarkerStyle(20); ((TGraph*) fGraphs.UncheckedAt(iPM))->Draw("ALP"); } }