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.                  *
 **************************************************************************/

// 
// Class AliVZEROTrending
// ---------------------------
// 
//  class used in QA to publish variables evolution versus time in AMORE. 
//  These histo are the one which will be looked at by QA Shifter
// 
#include "TGraph.h"
#include "TMultiGraph.h"
#include "TLegend.h"
#include "TString.h"

#include "AliLog.h"
#include "AliVZEROTrending.h"

ClassImp(AliVZEROTrending)

//_____________________________________________________________________________
AliVZEROTrending::AliVZEROTrending() : TH1(), fNEntries(0), fMultiGraphs(NULL)
{
	// Default constructor
	for(int i=0; i<8;i++) fGraphs[i] = NULL;
	for (int i = 0; i < kDataSize; i++) {
		fTime[i] = 0;
		for (int j = 0; j < 8; j++) {
		  fData[j][i] = 0;
		}
	}
}
//_____________________________________________________________________________
AliVZEROTrending::AliVZEROTrending(const char* name, const char* title) : TH1(), fNEntries(0), fMultiGraphs(NULL)
{
	SetName(name);
	SetTitle(title);
	for(int i=0; i<8;i++) fGraphs[i] = NULL;
	for (int i = 0; i < kDataSize; i++) {
		fTime[i] = 0;
		for (int j = 0; j < 8; j++) {
		  fData[j][i] = 0;
		}
	}
}
//_____________________________________________________________________________
AliVZEROTrending::AliVZEROTrending(const AliVZEROTrending &trend) : 
	TH1(), fNEntries(trend.fNEntries), fMultiGraphs(NULL)
{
	// Copy constructor
	for(int i=0; i<8;i++) fGraphs[i] = NULL;
	SetName(trend.GetName());
	SetTitle(trend.GetTitle());
	for (int i = 0; i < kDataSize; i++) {
		fTime[i] = trend.fTime[i];
		for (int j = 0; j < 8; j++) {
			fData[j][i] = trend.fData[j][i];
		}
	}
}

//_____________________________________________________________________________
AliVZEROTrending::~AliVZEROTrending(){
  for (Int_t i=0; i<8; ++i) delete fGraphs[i];
  delete fMultiGraphs;
}
// -----------------------------------------------------------------			
void AliVZEROTrending::AddEntry(Double_t * data, UInt_t time)
{

	if(fNEntries<kDataSize){
		for (int i = 0; i < 8; i++)
		{
			fData[i][fNEntries] = data[i];
			fTime[fNEntries] = (double) time;
		}
		fNEntries++;	
	}else{

		for (int i = 0; i < kDataSize-1; i++){
			fTime[i] = fTime[i+1];
			for (int ich = 0; ich < 8; ich++){		
				fData[ich][i] = fData[ich][i+1];
			}	
		}
		for (int i = 0; i < 8; i++)
		{
			fData[i][fNEntries-1] = data[i];
			fTime[fNEntries-1] = (double) time;
		}
		
	}
// 	printf("sizeof UInt_t Double_t %d %d\n",sizeof(UInt_t),sizeof(Double_t));
// 	printf("Add Entry %d @ %f : %f %f %f %f %f %f %f %f \n",fNEntries,fTime[fNEntries-1], 
// 		data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
}			
// -----------------------------------------------------------------			
void AliVZEROTrending::PrintEntry(UInt_t entry)
{

	if(entry>=fNEntries){
		AliError(Form("maximum entry is %d\n",fNEntries-1));
	}else{
		AliInfo(Form("Entry %d @ %f : %f %f %f %f %f %f %f %f \n",entry, fTime[entry],
			fData[0][entry],fData[1][entry],fData[2][entry],fData[3][entry],fData[4][entry],fData[5][entry],fData[6][entry],fData[7][entry]));

	}
}			

// -----------------------------------------------------------------			
void AliVZEROTrending::Draw(Option_t *option){
    TString opt = option;	
	fMultiGraphs = new TMultiGraph();
	fMultiGraphs->SetTitle(GetTitle());
	
	for(int i=0;i<8;i++) {
		fGraphs[i] = new TGraph(GetNEntries(), GetTime(), GetChannel(i));
		fGraphs[i]->SetLineWidth(2);
		fGraphs[i]->SetLineColor(i<4 ? i+1 : i -3);
		fGraphs[i]->SetLineStyle(i<4 ? 1 : 2);
	 	fMultiGraphs->Add(fGraphs[i]);
	}

	fMultiGraphs->Draw("AL");
	fMultiGraphs->GetXaxis()->SetTimeDisplay(1);
	fMultiGraphs->GetXaxis()->SetNdivisions(505,kFALSE);
	fMultiGraphs->Draw("AL");
	TLegend * legend = new TLegend(0.7,0.65,0.86,0.88);
	legend->AddEntry(fGraphs[4],"V0A - Ring0","l");
	legend->AddEntry(fGraphs[5],"V0A - Ring1","l");
	legend->AddEntry(fGraphs[6],"V0A - Ring2","l");
	legend->AddEntry(fGraphs[7],"V0A - Ring3","l");
	legend->AddEntry(fGraphs[0],"V0C - Ring0","l");
	legend->AddEntry(fGraphs[1],"V0C - Ring1","l");
	legend->AddEntry(fGraphs[2],"V0C - Ring2","l");
	legend->AddEntry(fGraphs[3],"V0C - Ring3","l");
	legend->Draw();
}
 AliVZEROTrending.cxx:1
 AliVZEROTrending.cxx:2
 AliVZEROTrending.cxx:3
 AliVZEROTrending.cxx:4
 AliVZEROTrending.cxx:5
 AliVZEROTrending.cxx:6
 AliVZEROTrending.cxx:7
 AliVZEROTrending.cxx:8
 AliVZEROTrending.cxx:9
 AliVZEROTrending.cxx:10
 AliVZEROTrending.cxx:11
 AliVZEROTrending.cxx:12
 AliVZEROTrending.cxx:13
 AliVZEROTrending.cxx:14
 AliVZEROTrending.cxx:15
 AliVZEROTrending.cxx:16
 AliVZEROTrending.cxx:17
 AliVZEROTrending.cxx:18
 AliVZEROTrending.cxx:19
 AliVZEROTrending.cxx:20
 AliVZEROTrending.cxx:21
 AliVZEROTrending.cxx:22
 AliVZEROTrending.cxx:23
 AliVZEROTrending.cxx:24
 AliVZEROTrending.cxx:25
 AliVZEROTrending.cxx:26
 AliVZEROTrending.cxx:27
 AliVZEROTrending.cxx:28
 AliVZEROTrending.cxx:29
 AliVZEROTrending.cxx:30
 AliVZEROTrending.cxx:31
 AliVZEROTrending.cxx:32
 AliVZEROTrending.cxx:33
 AliVZEROTrending.cxx:34
 AliVZEROTrending.cxx:35
 AliVZEROTrending.cxx:36
 AliVZEROTrending.cxx:37
 AliVZEROTrending.cxx:38
 AliVZEROTrending.cxx:39
 AliVZEROTrending.cxx:40
 AliVZEROTrending.cxx:41
 AliVZEROTrending.cxx:42
 AliVZEROTrending.cxx:43
 AliVZEROTrending.cxx:44
 AliVZEROTrending.cxx:45
 AliVZEROTrending.cxx:46
 AliVZEROTrending.cxx:47
 AliVZEROTrending.cxx:48
 AliVZEROTrending.cxx:49
 AliVZEROTrending.cxx:50
 AliVZEROTrending.cxx:51
 AliVZEROTrending.cxx:52
 AliVZEROTrending.cxx:53
 AliVZEROTrending.cxx:54
 AliVZEROTrending.cxx:55
 AliVZEROTrending.cxx:56
 AliVZEROTrending.cxx:57
 AliVZEROTrending.cxx:58
 AliVZEROTrending.cxx:59
 AliVZEROTrending.cxx:60
 AliVZEROTrending.cxx:61
 AliVZEROTrending.cxx:62
 AliVZEROTrending.cxx:63
 AliVZEROTrending.cxx:64
 AliVZEROTrending.cxx:65
 AliVZEROTrending.cxx:66
 AliVZEROTrending.cxx:67
 AliVZEROTrending.cxx:68
 AliVZEROTrending.cxx:69
 AliVZEROTrending.cxx:70
 AliVZEROTrending.cxx:71
 AliVZEROTrending.cxx:72
 AliVZEROTrending.cxx:73
 AliVZEROTrending.cxx:74
 AliVZEROTrending.cxx:75
 AliVZEROTrending.cxx:76
 AliVZEROTrending.cxx:77
 AliVZEROTrending.cxx:78
 AliVZEROTrending.cxx:79
 AliVZEROTrending.cxx:80
 AliVZEROTrending.cxx:81
 AliVZEROTrending.cxx:82
 AliVZEROTrending.cxx:83
 AliVZEROTrending.cxx:84
 AliVZEROTrending.cxx:85
 AliVZEROTrending.cxx:86
 AliVZEROTrending.cxx:87
 AliVZEROTrending.cxx:88
 AliVZEROTrending.cxx:89
 AliVZEROTrending.cxx:90
 AliVZEROTrending.cxx:91
 AliVZEROTrending.cxx:92
 AliVZEROTrending.cxx:93
 AliVZEROTrending.cxx:94
 AliVZEROTrending.cxx:95
 AliVZEROTrending.cxx:96
 AliVZEROTrending.cxx:97
 AliVZEROTrending.cxx:98
 AliVZEROTrending.cxx:99
 AliVZEROTrending.cxx:100
 AliVZEROTrending.cxx:101
 AliVZEROTrending.cxx:102
 AliVZEROTrending.cxx:103
 AliVZEROTrending.cxx:104
 AliVZEROTrending.cxx:105
 AliVZEROTrending.cxx:106
 AliVZEROTrending.cxx:107
 AliVZEROTrending.cxx:108
 AliVZEROTrending.cxx:109
 AliVZEROTrending.cxx:110
 AliVZEROTrending.cxx:111
 AliVZEROTrending.cxx:112
 AliVZEROTrending.cxx:113
 AliVZEROTrending.cxx:114
 AliVZEROTrending.cxx:115
 AliVZEROTrending.cxx:116
 AliVZEROTrending.cxx:117
 AliVZEROTrending.cxx:118
 AliVZEROTrending.cxx:119
 AliVZEROTrending.cxx:120
 AliVZEROTrending.cxx:121
 AliVZEROTrending.cxx:122
 AliVZEROTrending.cxx:123
 AliVZEROTrending.cxx:124
 AliVZEROTrending.cxx:125
 AliVZEROTrending.cxx:126
 AliVZEROTrending.cxx:127
 AliVZEROTrending.cxx:128
 AliVZEROTrending.cxx:129
 AliVZEROTrending.cxx:130
 AliVZEROTrending.cxx:131
 AliVZEROTrending.cxx:132
 AliVZEROTrending.cxx:133
 AliVZEROTrending.cxx:134
 AliVZEROTrending.cxx:135
 AliVZEROTrending.cxx:136
 AliVZEROTrending.cxx:137
 AliVZEROTrending.cxx:138
 AliVZEROTrending.cxx:139
 AliVZEROTrending.cxx:140
 AliVZEROTrending.cxx:141
 AliVZEROTrending.cxx:142
 AliVZEROTrending.cxx:143
 AliVZEROTrending.cxx:144
 AliVZEROTrending.cxx:145
 AliVZEROTrending.cxx:146
 AliVZEROTrending.cxx:147
 AliVZEROTrending.cxx:148
 AliVZEROTrending.cxx:149
 AliVZEROTrending.cxx:150