/************************************************************************** * 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. * **************************************************************************/ /* $Log$ */ #include "AliTOFDataDCS.h" #include "AliDCSValue.h" #include "AliLog.h" #include "TString.h" #include "AliTOFFormatDCS.h" #include "TF1.h" #include "TCanvas.h" #include "TH1F.h" #include "TTimeStamp.h" #include "TMap.h" class TH2; class AliCDBMetaData; class TDatime; // AliTOFDataDCS class // main aim to introduce the aliases for the TOF DCS // data points to be then // stored in the OCDB, and to process them. // Process() method called by TOFPrepr ClassImp(AliTOFDataDCS) //--------------------------------------------------------------- AliTOFDataDCS::AliTOFDataDCS(): TObject(), fRun(0), fStartTime(0), fEndTime(0), fIsProcessed(kFALSE) { // main constructor for(int i=0;ifRun=data.GetRun(); this->fStartTime=data.GetStartTime(); this->fEndTime=data.GetEndTime(); for(int i=0;ifAliasNames[i]=data.GetAliasName(i); } for(int i=0;i<3;i++) { this->fT[i]=data.GetT(i); this->fP[i]=data.GetP(i); } //this->fCal=data.GetCal(); for(int i=0;ifHVvpos[i]=data.GetHVvpos(i); this->fHVvneg[i]=data.GetHVvneg(i); this->fHVcpos[i]=data.GetHVcpos(i); this->fHVcneg[i]=data.GetHVcneg(i); } for(int i=0;ifLVv[i]=data.GetLVv(i); this->fLVc[i]=data.GetLVc(i); } for(int i=0;ifFEEthr[i]=data.GetFEEthr(i); } for(int i=0;ifFEEt[i]=data.GetFEEt(i); } this->fIsProcessed=data.fIsProcessed; return *this; } //--------------------------------------------------------------- AliTOFDataDCS::~AliTOFDataDCS() { // destructor for(int i=0;ifT[i]; } return t; } //----------------------------------------------------------------------------- Float_t* AliTOFDataDCS::GetP() const{ // method to retrieve environment pressure info Float_t* p=0; for (Int_t i=0;i<3;i++){ p[i]=this->fP[i]; } return p; } //--------------------------------------------------------------- void AliTOFDataDCS::ProcessData(TMap& aliasMap){ if(!(fAliasNames[0])) Init(); Float_t timeMin = (Float_t)fStartTime; Float_t timeMax = (Float_t)fEndTime; Int_t nminutes = (Int_t)((timeMax-timeMin)/60); Float_t val=0; Float_t val1=0; Float_t time=0; Float_t delta[2]; Float_t timedelta[2]; TObjArray *aliasArr; AliDCSValue* aValue; AliDCSValue* aValue1; TH1F * histoT=0x0; TH1F * histoP=0x0; // starting loop on aliases for(int j=0; jGetEntries()<3){ AliError(Form("Alias %s has just %d entries!", fAliasNames[j].Data(),aliasArr->GetEntries())); continue; } TIter iterarray(aliasArr); Int_t nentries = aliasArr->GetEntries(); //AliInfo(Form("entries = %i",nentries)); Int_t deltaTimeStamp = (Int_t) nentries/3; Int_t deltaTimeStamp1 = (Int_t) nentries/2; AliDCSValue *lastDCSvalue = (AliDCSValue*) aliasArr->At(nentries-1); Float_t maxTimeStamp = (Float_t) (lastDCSvalue->GetTimeStamp()); Float_t minTimeStamp = 0; // filling aliases with 10 floats+1 Usign if (j < kNHV*4+kNLV*2+kNFEEthr+kNFEEt){ Int_t index = 0; for (Int_t k=0;k<3;k++){ index = deltaTimeStamp*k; if (k==0) { index=0; } else if (k==1) { index=deltaTimeStamp1; } else if (k==2) { index=nentries-1; } aValue = (AliDCSValue*) aliasArr->At(index); val = aValue->GetFloat(); time = (Float_t) (aValue->GetTimeStamp()); if (jSetFloat(k,val); fHVvpos[j]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fHVvneg[j-kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fHVcpos[j-2*kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fHVcneg[j-3*kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVv[j-4*kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVc[j-4*kNHV-kNLV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fFEEthr[j-4*kNHV-2*kNLV]->SetTimeStampFloat(k,time); } else { fFEEt[j-4*kNHV-2*kNLV-kNFEEthr]->SetFloat(k,val); fFEEt[j-4*kNHV-2*kNLV-kNFEEthr]->SetTimeStampFloat(k,time); } } } //filling Temperature and Pressure aliases else { Int_t entriesT=0; Int_t entriesP=0; if (jGetFloat(); time = (Float_t) (aValue->GetTimeStamp()); if (jFill(time,val); entriesT = (Int_t)(histoT->GetEntries()); } else if (jFill(time,val); entriesP = (Int_t)(histoP->GetEntries()); } } if (j==kNHV*4+kNLV*2+kNFEEthr+kNFEEt+1){ entriesT = (Int_t)(histoT->GetEntries()); histoT->Fit("pol1","Q",""); histoP->Fit("pol1","Q",""); TF1 *tempFunc = histoT->GetFunction("pol1"); TF1 *pressFunc = histoP->GetFunction("pol1"); SetInterceptT((Float_t)tempFunc->GetParameter(0)); SetSlopeT((Float_t)tempFunc->GetParameter(1)); SetMaxT((Float_t)histoT->GetMaximum()); SetInterceptP((Float_t)pressFunc->GetParameter(0)); SetSlopeP((Float_t)pressFunc->GetParameter(1)); SetMaxP((Float_t)histoP->GetMaximum()); TCanvas *chT; TString canvasHistoNameT="HistosT"; chT=new TCanvas(canvasHistoNameT,canvasHistoNameT,20,20,600,600); chT->cd(); histoT->Draw(); TCanvas *chP; TString canvasHistoNameP="HistosP"; chP=new TCanvas(canvasHistoNameP,canvasHistoNameP,20,20,600,600); chP->cd(); histoP->Draw(); } } //computing the most significant variations Int_t deltamin = (Int_t)(60/(timeMax-timeMin)*nentries); Int_t klast = nentries-deltamin; for (Int_t k=0;kAt(k); aValue1 = (AliDCSValue*) aliasArr->At(k+deltamin); val = aValue->GetFloat(); val1 = aValue1->GetFloat(); if (delta[0]<=TMath::Abs(val1-val)) { delta[0]=TMath::Abs(val1-val); timedelta[0] = (Float_t)k; } if (delta[1]<=delta[0]) { Float_t temp = delta[1]; Float_t timetemp = timedelta[1]; delta[1]=delta[0]; delta[0]=temp; timedelta[1]=timedelta[0]; timedelta[0]=timetemp; } } for (Int_t kk=0;kk<2;kk++){ if (j < kNHV*4+kNLV*2+kNFEEthr){ if (jSetDelta(kk,delta[kk]); fHVvpos[j]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fHVvneg[j-kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fHVcpos[j-2*kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fHVcneg[j-3*kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVv[j-4*kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVc[j-4*kNHV-kNLV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fFEEthr[j-4*kNHV-2*kNLV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fFEEt[j-4*kNHV-2*kNLV+kNFEEthr]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } } //filling for temperature and pressure else if (j==kNHV*4+kNLV*2+kNFEEthr+kNFEEt){ fT[2]=delta[1]; } else if (j==kNHV*4+kNLV*2+kNFEEthr+kNFEEt+1){ fP[2]=delta[1]; } } } fIsProcessed=kTRUE; } //--------------------------------------------------------------- void AliTOFDataDCS::Init(){ // initialization of aliases and DCS data for(int i=0;iGetEntries(); int nal=0; nal=numAlias; //AliInfo(Form("************ Alias: %s **********",fAliasNames[numAlias].Data())); //AliInfo(Form(" %d DP values collected",entries)); } //--------------------------------------------------------------- void AliTOFDataDCS::Draw(const Option_t* /*option*/) { // Draw all histos and graphs if(!fIsProcessed) return; TCanvas *ch; TString canvasHistoName="Histos"; ch=new TCanvas(canvasHistoName,canvasHistoName,20,20,600,600); ch->cd(); // to be implemented }