/************************************************************************** * 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$ Revision 1.5 2007/02/20 15:57:00 decaro Raw data update: to read the TOF raw data defined in UNPACKED mode Revision 1.4 2007/02/19 15:41:55 decaro Coding convention: few corrections Revision 1.3 2007/01/24 11:19:58 arcelli Modify ProcessData to return a logical (CZ) Revision 1.2 2006/12/18 18:17:38 arcelli Updated Aliases for DCS TOF datapoints (C.Zampolli) Revision 1.1 2006/10/26 09:10:52 arcelli Class for handling the TOF DCS data in the Shuttle (C.Zampolli) */ #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); } for(int i=0;ifHVvp[i]=data.GetHVvp(i); this->fHVvn[i]=data.GetHVvn(i); this->fHVip[i]=data.GetHVip(i); this->fHVin[i]=data.GetHVin(i); } for(int i=0;ifLVv[i]=data.GetLVv(i); this->fLVi[i]=data.GetLVi(i); } for(int i=0;ifLVv33[i]=data.GetLVv33(i); this->fLVi33[i]=data.GetLVi33(i); } for(int i=0;ifLVv50[i]=data.GetLVv50(i); this->fLVi50[i]=data.GetLVi50(i); } for(int i=0;ifLVv48[i]=data.GetLVv48(i); this->fLVi48[i]=data.GetLVi48(i); } for(int i=0;ifFEEthr[i]=data.GetFEEthr(i); } for(int i=0;ifFEEtfeac[i]=data.GetFEEtfeac(i); } for(int i=0;ifFEEttrm[i]=data.GetFEEttrm(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; } //--------------------------------------------------------------- Bool_t AliTOFDataDCS::ProcessData(TMap& aliasMap){ // method to process the data if(!(fAliasNames[0])) Init(); Float_t timeMin = (Float_t)fStartTime; Float_t timeMax = (Float_t)fEndTime; 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(); 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+kNLV33*2+kNLV50*2+kNLV48*2+kNFEEthr+kNFEEtfeac+kNFEEttrm){ 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); fHVvp[j]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fHVvn[j-kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fHVip[j-2*kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fHVin[j-3*kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVv[j-4*kNHV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVi[j-4*kNHV-kNLV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVv33[j-4*kNHV-2*kNLV]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVi33[j-4*kNHV-2*kNLV-kNLV33]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVv50[j-4*kNHV-2*kNLV-2*kNLV33]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVi50[j-4*kNHV-2*kNLV-2*kNLV33-kNLV50]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVv48[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fLVi48[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-kNLV48]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fFEEthr[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48]->SetTimeStampFloat(k,time); } else if (jSetFloat(k,val); fFEEtfeac[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48-kNFEEthr]->SetTimeStampFloat(k,time); } else { fFEEttrm[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48-kNFEEthr-kNFEEtfeac]->SetFloat(k,val); fFEEttrm[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48-kNFEEthr-kNFEEtfeac]->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+kNLV33*2+kNLV50*2+kNLV48*2+kNFEEthr+kNFEEtfeac+kNFEEttrm+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+kNLV33*2+kNLV50*2+kNLV48*2+kNFEEthr+kNFEEtfeac){ if (jSetDelta(kk,delta[kk]); fHVvp[j]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fHVvn[j-kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fHVip[j-2*kNHV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fHVin[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]); fLVi[j-4*kNHV-kNLV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVv33[j-4*kNHV-2*kNLV]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVi33[j-4*kNHV-2*kNLV-kNLV33]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVv50[j-4*kNHV-2*kNLV-2*kNLV33]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVi50[j-4*kNHV-2*kNLV-2*kNLV33-kNLV50]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVv48[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fLVi48[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-kNLV48]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fFEEthr[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fFEEtfeac[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48-kNFEEthr]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } else if (jSetDelta(kk,delta[kk]); fFEEttrm[j-4*kNHV-2*kNLV-2*kNLV33-2*kNLV50-2*kNLV48-kNFEEthr-kNFEEtfeac]->SetTimeStampDelta(kk,(Float_t)timedelta[kk]); } } //filling for temperature and pressure else if (j==kNHV*4+kNLV*2+kNLV33*2+kNLV50*2+kNLV48*2+kNFEEthr+kNFEEtfeac+kNFEEttrm){ fT[2]=delta[1]; } else if (j==kNHV*4+kNLV*2+kNLV33*2+kNLV50*2+kNLV48*2+kNFEEthr+kNFEEtfeac+kNFEEttrm+1){ fP[2]=delta[1]; } } } fIsProcessed=kTRUE; return kTRUE; } //--------------------------------------------------------------- void AliTOFDataDCS::Init(){ // initialization of aliases and DCS data TString sindex; for(int i=0;iGetEntries(); int nal=0; nal=numAlias; AliDebug(2,Form("************ Alias: %s **********",fAliasNames[numAlias].Data())); AliDebug(2,Form(" %d DP values collected",entries)); } //--------------------------------------------------------------- void AliTOFDataDCS::Draw(const Option_t* /*option*/) /*const*/ { // 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 }