ROOT logo
/**************************************************************************
 * 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 "AliVZERODataDCS.h"

#include "AliDCSValue.h"
#include "AliLog.h"

#include <TGraph.h>
#include <TAxis.h>
#include <TCanvas.h>
#include <TTimeStamp.h>
#include <TMap.h>
#include <TString.h>
#include <TObjString.h>
#include <TH1F.h>

class TH2;
class AliCDBMetaData;
class TDatime;

// AliVZERODataDCS class
// main aim to introduce the aliases for the VZERO DCS
// data points to be then
// stored in the OCDB, and to process them. 
// ProcessData() method called by VZEROPreprocessor

ClassImp(AliVZERODataDCS)

//_____________________________________________________________________________
AliVZERODataDCS::AliVZERODataDCS():
	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;i<kNHvChannel;i++) {
		fDeadChannel[i] = kFALSE;
		fMeanHV[i]      = 100.0;
		fWidthHV[i]     = 0.0; 
		fHv[i]          = NULL;
	}
}

//_____________________________________________________________________________
AliVZERODataDCS::AliVZERODataDCS(Int_t nRun, UInt_t startTime, UInt_t endTime, UInt_t daqStartTime, UInt_t daqEndTime, UInt_t ctpStartTime, UInt_t ctpEndTime):
	TObject(),
	fRun(nRun),
	fStartTime(startTime),
	fEndTime(endTime),
	fDaqStartTime(daqStartTime),
	fDaqEndTime(daqEndTime),
	fCtpStartTime(ctpStartTime),
	fCtpEndTime(ctpEndTime),
	fGraphs("TGraph",kNGraphs),
	fFEEParameters(new TMap()),
	fIsProcessed(kFALSE)

{

  // constructor with arguments
  	for(int i=0;i<kNHvChannel;i++) {
	 fDeadChannel[i] = kFALSE;        
	 fMeanHV[i]      = 100.0;
     fWidthHV[i]     = 0.0; 
	}
	AliInfo(Form("\n\tRun %d \n\tTime Created %s \n\tTime Completed %s \n\tDAQ start %s \n\tDAQ end %s \n\tCTP start %s \n\tCTP end %s   ", nRun,
		TTimeStamp(startTime).AsString(),
		TTimeStamp(endTime).AsString(),
		TTimeStamp(daqStartTime).AsString(),
		TTimeStamp(daqEndTime).AsString(),
		TTimeStamp(ctpStartTime).AsString(),
		TTimeStamp(ctpEndTime).AsString()
		));
	
	fFEEParameters->SetOwnerValue();
	Init();

}

//_____________________________________________________________________________
AliVZERODataDCS::~AliVZERODataDCS() {

  // destructor
  fGraphs.Clear("C");
  delete fFEEParameters;

}

//_____________________________________________________________________________
Bool_t AliVZERODataDCS::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; iAlias<kNAliases; iAlias++){

    aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNames[iAlias].Data());
    if(!aliasArr){
      AliError(Form("Alias %s not found!", fAliasNames[iAlias].Data()));
      success = kFALSE;
      continue;
    }

    //Introduce(iAlias, aliasArr);
    
    if(aliasArr->GetEntries()<2){
      AliWarning(Form("Alias %s has just %d entries!",
		    fAliasNames[iAlias].Data(),aliasArr->GetEntries()));
    }
    
    TIter iterarray(aliasArr);
	
    if(iAlias<kNHvChannel){ // Treating HV values
    	Int_t nentries = aliasArr->GetEntries();

    	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;

   			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 AliVZERODataDCS::Init(){

  // initialization of aliases and DCS data

  TString sindex;
  int iAlias = 0;
  
  for(int iSide = 0; iSide<2 ; iSide++){
  	for(int iRing = 0; iRing<4 ; iRing++){
  		for(int iSector = 0; iSector<8 ; iSector++){
  			if(iSide == 0) fAliasNames[iAlias] = "V00/HV/V0A/SECTOR";
  			else fAliasNames[iAlias] = "V00/HV/V0C/SECTOR";
			sindex.Form("%d/RING%d",iSector,iRing);
			fAliasNames[iAlias] += sindex;
			
			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<8 ; iCIU++){
		fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/TimeResolution",iCIU);
		fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/WidthResolution",iCIU);
	}

	// HPTDC parameters
	for(int iCIU = 0; iCIU<8 ; iCIU++){
	  fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/MatchWindow",iCIU);
	  fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/SearchWindow",iCIU);
	  fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/TriggerCountOffset",iCIU);
	  fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/RollOver",iCIU);
	}

	for(int iCIU = 0; iCIU<8 ; iCIU++){
	  for(int iCh=1;iCh<=8;iCh++){
	    fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/DelayHit%d",iCIU,iCh);
	  }
	}

	for(int iCIU = 0; iCIU<8 ; iCIU++){
	  for(int iCh=1;iCh<=8;iCh++){
	    fAliasNames[iAlias++] = Form("V00/FEE/CIU%d/DiscriThr%d",iCIU,iCh);
	  }
	}

  if(iAlias!=kNAliases) 
  	      AliError(Form("Number of DCS Aliases defined not correct"));

}

//_____________________________________________________________________________
void AliVZERODataDCS::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 AliVZERODataDCS::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 AliVZERODataDCS::Draw(const Option_t* /*option*/)
{
// Draw all histos and graphs

  if(!fIsProcessed) return;

  if(fGraphs.GetEntries()==0)  return;
  
  TString canvasName;
  TCanvas *cHV[8];
  
  for(int iSide = 0 ;iSide<2;iSide++){
  	for(int iRing=0;iRing<4;iRing++){
  		if(iSide == 0)  canvasName = "V0A_Ring";
  		else  canvasName = "V0C_Ring";
  		canvasName += iRing;
  		int iCanvas = iSide*4 + iRing;
  		cHV[iCanvas] = new TCanvas(canvasName,canvasName);
  		cHV[iCanvas]->Divide(3,3);
  		for(int iSector=0;iSector<8;iSector++){
  			cHV[iCanvas]->cd(iSector+1);
  			int iChannel = iSide*32 + iRing*8 + iSector; 
  			((TGraph*) fGraphs.UncheckedAt(iChannel))->SetMarkerStyle(20);
  			((TGraph*) fGraphs.UncheckedAt(iChannel))->Draw("ALP");

  		}
  		  		
  	}
  }

}

 AliVZERODataDCS.cxx:1
 AliVZERODataDCS.cxx:2
 AliVZERODataDCS.cxx:3
 AliVZERODataDCS.cxx:4
 AliVZERODataDCS.cxx:5
 AliVZERODataDCS.cxx:6
 AliVZERODataDCS.cxx:7
 AliVZERODataDCS.cxx:8
 AliVZERODataDCS.cxx:9
 AliVZERODataDCS.cxx:10
 AliVZERODataDCS.cxx:11
 AliVZERODataDCS.cxx:12
 AliVZERODataDCS.cxx:13
 AliVZERODataDCS.cxx:14
 AliVZERODataDCS.cxx:15
 AliVZERODataDCS.cxx:16
 AliVZERODataDCS.cxx:17
 AliVZERODataDCS.cxx:18
 AliVZERODataDCS.cxx:19
 AliVZERODataDCS.cxx:20
 AliVZERODataDCS.cxx:21
 AliVZERODataDCS.cxx:22
 AliVZERODataDCS.cxx:23
 AliVZERODataDCS.cxx:24
 AliVZERODataDCS.cxx:25
 AliVZERODataDCS.cxx:26
 AliVZERODataDCS.cxx:27
 AliVZERODataDCS.cxx:28
 AliVZERODataDCS.cxx:29
 AliVZERODataDCS.cxx:30
 AliVZERODataDCS.cxx:31
 AliVZERODataDCS.cxx:32
 AliVZERODataDCS.cxx:33
 AliVZERODataDCS.cxx:34
 AliVZERODataDCS.cxx:35
 AliVZERODataDCS.cxx:36
 AliVZERODataDCS.cxx:37
 AliVZERODataDCS.cxx:38
 AliVZERODataDCS.cxx:39
 AliVZERODataDCS.cxx:40
 AliVZERODataDCS.cxx:41
 AliVZERODataDCS.cxx:42
 AliVZERODataDCS.cxx:43
 AliVZERODataDCS.cxx:44
 AliVZERODataDCS.cxx:45
 AliVZERODataDCS.cxx:46
 AliVZERODataDCS.cxx:47
 AliVZERODataDCS.cxx:48
 AliVZERODataDCS.cxx:49
 AliVZERODataDCS.cxx:50
 AliVZERODataDCS.cxx:51
 AliVZERODataDCS.cxx:52
 AliVZERODataDCS.cxx:53
 AliVZERODataDCS.cxx:54
 AliVZERODataDCS.cxx:55
 AliVZERODataDCS.cxx:56
 AliVZERODataDCS.cxx:57
 AliVZERODataDCS.cxx:58
 AliVZERODataDCS.cxx:59
 AliVZERODataDCS.cxx:60
 AliVZERODataDCS.cxx:61
 AliVZERODataDCS.cxx:62
 AliVZERODataDCS.cxx:63
 AliVZERODataDCS.cxx:64
 AliVZERODataDCS.cxx:65
 AliVZERODataDCS.cxx:66
 AliVZERODataDCS.cxx:67
 AliVZERODataDCS.cxx:68
 AliVZERODataDCS.cxx:69
 AliVZERODataDCS.cxx:70
 AliVZERODataDCS.cxx:71
 AliVZERODataDCS.cxx:72
 AliVZERODataDCS.cxx:73
 AliVZERODataDCS.cxx:74
 AliVZERODataDCS.cxx:75
 AliVZERODataDCS.cxx:76
 AliVZERODataDCS.cxx:77
 AliVZERODataDCS.cxx:78
 AliVZERODataDCS.cxx:79
 AliVZERODataDCS.cxx:80
 AliVZERODataDCS.cxx:81
 AliVZERODataDCS.cxx:82
 AliVZERODataDCS.cxx:83
 AliVZERODataDCS.cxx:84
 AliVZERODataDCS.cxx:85
 AliVZERODataDCS.cxx:86
 AliVZERODataDCS.cxx:87
 AliVZERODataDCS.cxx:88
 AliVZERODataDCS.cxx:89
 AliVZERODataDCS.cxx:90
 AliVZERODataDCS.cxx:91
 AliVZERODataDCS.cxx:92
 AliVZERODataDCS.cxx:93
 AliVZERODataDCS.cxx:94
 AliVZERODataDCS.cxx:95
 AliVZERODataDCS.cxx:96
 AliVZERODataDCS.cxx:97
 AliVZERODataDCS.cxx:98
 AliVZERODataDCS.cxx:99
 AliVZERODataDCS.cxx:100
 AliVZERODataDCS.cxx:101
 AliVZERODataDCS.cxx:102
 AliVZERODataDCS.cxx:103
 AliVZERODataDCS.cxx:104
 AliVZERODataDCS.cxx:105
 AliVZERODataDCS.cxx:106
 AliVZERODataDCS.cxx:107
 AliVZERODataDCS.cxx:108
 AliVZERODataDCS.cxx:109
 AliVZERODataDCS.cxx:110
 AliVZERODataDCS.cxx:111
 AliVZERODataDCS.cxx:112
 AliVZERODataDCS.cxx:113
 AliVZERODataDCS.cxx:114
 AliVZERODataDCS.cxx:115
 AliVZERODataDCS.cxx:116
 AliVZERODataDCS.cxx:117
 AliVZERODataDCS.cxx:118
 AliVZERODataDCS.cxx:119
 AliVZERODataDCS.cxx:120
 AliVZERODataDCS.cxx:121
 AliVZERODataDCS.cxx:122
 AliVZERODataDCS.cxx:123
 AliVZERODataDCS.cxx:124
 AliVZERODataDCS.cxx:125
 AliVZERODataDCS.cxx:126
 AliVZERODataDCS.cxx:127
 AliVZERODataDCS.cxx:128
 AliVZERODataDCS.cxx:129
 AliVZERODataDCS.cxx:130
 AliVZERODataDCS.cxx:131
 AliVZERODataDCS.cxx:132
 AliVZERODataDCS.cxx:133
 AliVZERODataDCS.cxx:134
 AliVZERODataDCS.cxx:135
 AliVZERODataDCS.cxx:136
 AliVZERODataDCS.cxx:137
 AliVZERODataDCS.cxx:138
 AliVZERODataDCS.cxx:139
 AliVZERODataDCS.cxx:140
 AliVZERODataDCS.cxx:141
 AliVZERODataDCS.cxx:142
 AliVZERODataDCS.cxx:143
 AliVZERODataDCS.cxx:144
 AliVZERODataDCS.cxx:145
 AliVZERODataDCS.cxx:146
 AliVZERODataDCS.cxx:147
 AliVZERODataDCS.cxx:148
 AliVZERODataDCS.cxx:149
 AliVZERODataDCS.cxx:150
 AliVZERODataDCS.cxx:151
 AliVZERODataDCS.cxx:152
 AliVZERODataDCS.cxx:153
 AliVZERODataDCS.cxx:154
 AliVZERODataDCS.cxx:155
 AliVZERODataDCS.cxx:156
 AliVZERODataDCS.cxx:157
 AliVZERODataDCS.cxx:158
 AliVZERODataDCS.cxx:159
 AliVZERODataDCS.cxx:160
 AliVZERODataDCS.cxx:161
 AliVZERODataDCS.cxx:162
 AliVZERODataDCS.cxx:163
 AliVZERODataDCS.cxx:164
 AliVZERODataDCS.cxx:165
 AliVZERODataDCS.cxx:166
 AliVZERODataDCS.cxx:167
 AliVZERODataDCS.cxx:168
 AliVZERODataDCS.cxx:169
 AliVZERODataDCS.cxx:170
 AliVZERODataDCS.cxx:171
 AliVZERODataDCS.cxx:172
 AliVZERODataDCS.cxx:173
 AliVZERODataDCS.cxx:174
 AliVZERODataDCS.cxx:175
 AliVZERODataDCS.cxx:176
 AliVZERODataDCS.cxx:177
 AliVZERODataDCS.cxx:178
 AliVZERODataDCS.cxx:179
 AliVZERODataDCS.cxx:180
 AliVZERODataDCS.cxx:181
 AliVZERODataDCS.cxx:182
 AliVZERODataDCS.cxx:183
 AliVZERODataDCS.cxx:184
 AliVZERODataDCS.cxx:185
 AliVZERODataDCS.cxx:186
 AliVZERODataDCS.cxx:187
 AliVZERODataDCS.cxx:188
 AliVZERODataDCS.cxx:189
 AliVZERODataDCS.cxx:190
 AliVZERODataDCS.cxx:191
 AliVZERODataDCS.cxx:192
 AliVZERODataDCS.cxx:193
 AliVZERODataDCS.cxx:194
 AliVZERODataDCS.cxx:195
 AliVZERODataDCS.cxx:196
 AliVZERODataDCS.cxx:197
 AliVZERODataDCS.cxx:198
 AliVZERODataDCS.cxx:199
 AliVZERODataDCS.cxx:200
 AliVZERODataDCS.cxx:201
 AliVZERODataDCS.cxx:202
 AliVZERODataDCS.cxx:203
 AliVZERODataDCS.cxx:204
 AliVZERODataDCS.cxx:205
 AliVZERODataDCS.cxx:206
 AliVZERODataDCS.cxx:207
 AliVZERODataDCS.cxx:208
 AliVZERODataDCS.cxx:209
 AliVZERODataDCS.cxx:210
 AliVZERODataDCS.cxx:211
 AliVZERODataDCS.cxx:212
 AliVZERODataDCS.cxx:213
 AliVZERODataDCS.cxx:214
 AliVZERODataDCS.cxx:215
 AliVZERODataDCS.cxx:216
 AliVZERODataDCS.cxx:217
 AliVZERODataDCS.cxx:218
 AliVZERODataDCS.cxx:219
 AliVZERODataDCS.cxx:220
 AliVZERODataDCS.cxx:221
 AliVZERODataDCS.cxx:222
 AliVZERODataDCS.cxx:223
 AliVZERODataDCS.cxx:224
 AliVZERODataDCS.cxx:225
 AliVZERODataDCS.cxx:226
 AliVZERODataDCS.cxx:227
 AliVZERODataDCS.cxx:228
 AliVZERODataDCS.cxx:229
 AliVZERODataDCS.cxx:230
 AliVZERODataDCS.cxx:231
 AliVZERODataDCS.cxx:232
 AliVZERODataDCS.cxx:233
 AliVZERODataDCS.cxx:234
 AliVZERODataDCS.cxx:235
 AliVZERODataDCS.cxx:236
 AliVZERODataDCS.cxx:237
 AliVZERODataDCS.cxx:238
 AliVZERODataDCS.cxx:239
 AliVZERODataDCS.cxx:240
 AliVZERODataDCS.cxx:241
 AliVZERODataDCS.cxx:242
 AliVZERODataDCS.cxx:243
 AliVZERODataDCS.cxx:244
 AliVZERODataDCS.cxx:245
 AliVZERODataDCS.cxx:246
 AliVZERODataDCS.cxx:247
 AliVZERODataDCS.cxx:248
 AliVZERODataDCS.cxx:249
 AliVZERODataDCS.cxx:250
 AliVZERODataDCS.cxx:251
 AliVZERODataDCS.cxx:252
 AliVZERODataDCS.cxx:253
 AliVZERODataDCS.cxx:254
 AliVZERODataDCS.cxx:255
 AliVZERODataDCS.cxx:256
 AliVZERODataDCS.cxx:257
 AliVZERODataDCS.cxx:258
 AliVZERODataDCS.cxx:259
 AliVZERODataDCS.cxx:260
 AliVZERODataDCS.cxx:261
 AliVZERODataDCS.cxx:262
 AliVZERODataDCS.cxx:263
 AliVZERODataDCS.cxx:264
 AliVZERODataDCS.cxx:265
 AliVZERODataDCS.cxx:266
 AliVZERODataDCS.cxx:267
 AliVZERODataDCS.cxx:268
 AliVZERODataDCS.cxx:269
 AliVZERODataDCS.cxx:270
 AliVZERODataDCS.cxx:271
 AliVZERODataDCS.cxx:272
 AliVZERODataDCS.cxx:273
 AliVZERODataDCS.cxx:274
 AliVZERODataDCS.cxx:275
 AliVZERODataDCS.cxx:276
 AliVZERODataDCS.cxx:277
 AliVZERODataDCS.cxx:278
 AliVZERODataDCS.cxx:279
 AliVZERODataDCS.cxx:280
 AliVZERODataDCS.cxx:281
 AliVZERODataDCS.cxx:282
 AliVZERODataDCS.cxx:283
 AliVZERODataDCS.cxx:284
 AliVZERODataDCS.cxx:285
 AliVZERODataDCS.cxx:286
 AliVZERODataDCS.cxx:287
 AliVZERODataDCS.cxx:288
 AliVZERODataDCS.cxx:289
 AliVZERODataDCS.cxx:290
 AliVZERODataDCS.cxx:291
 AliVZERODataDCS.cxx:292
 AliVZERODataDCS.cxx:293
 AliVZERODataDCS.cxx:294
 AliVZERODataDCS.cxx:295
 AliVZERODataDCS.cxx:296
 AliVZERODataDCS.cxx:297
 AliVZERODataDCS.cxx:298
 AliVZERODataDCS.cxx:299
 AliVZERODataDCS.cxx:300
 AliVZERODataDCS.cxx:301
 AliVZERODataDCS.cxx:302
 AliVZERODataDCS.cxx:303