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 "AliADDataDCS.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;

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

//_____________________________________________________________________________
AliADDataDCS::AliADDataDCS(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();

}

//_____________________________________________________________________________
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; 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; //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");	  		
  	}
}

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