ROOT logo
#include "AliVZEROPreprocessor.h"
#include "AliVZEROCalibData.h"
#include "AliVZEROTriggerData.h"
#include "AliCDBMetaData.h"
#include "AliCDBEntry.h"
#include "AliDCSValue.h"
#include "AliLog.h"
#include "AliShuttleInterface.h"
#include "AliVZERODataFEE.h"
#include "AliVZERODataDCS.h"

#include <TFile.h>
#include <TTimeStamp.h>
#include <TObjString.h>
#include <TSystem.h>
#include <TH1F.h>


class Tlist;

//
//  This class is  a simple preprocessor for VZERO detector.
//
//  It gets High Voltage values for a given run from DCS and Pedestal values from DAQ 
//  and writes them as Calibration MetaData into OCDB/VZERO/Calib/Data
//  It also retrieves FEE parameters from DCS archive   
//  and writes them as Trigger MetaData into OCDB/VZERO/Trigger/Data 
//  (to be used for trigger simulation)
//

ClassImp(AliVZEROPreprocessor)

//______________________________________________________________________________________________
AliVZEROPreprocessor::AliVZEROPreprocessor(AliShuttleInterface* shuttle) :
	AliPreprocessor("V00", shuttle),
	fData(0),
	fFEEData(0)
 
{
  // constructor  
  
  AddRunType("STANDALONE_PULSER");
  AddRunType("STANDALONE_BC");
  AddRunType("PHYSICS");
    
}

//______________________________________________________________________________________________
AliVZEROPreprocessor::~AliVZEROPreprocessor()
{
  // destructor
	delete fFEEData;
	delete fData;
	
}

//______________________________________________________________________________________________
void AliVZEROPreprocessor::Initialize(Int_t run, UInt_t startTime,
	UInt_t endTime)
{
  // Creates AliVZERODataDCS object

   AliPreprocessor::Initialize(run, startTime, endTime);
  
   Log(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", run,
		TTimeStamp(startTime).AsString(),
		TTimeStamp(endTime).AsString()));

   fRun       = run;
   // fStartTime = startTime;
   // fEndTime   = endTime;
   fStartTime = GetStartTimeDCSQuery ();
   fEndTime   = GetEndTimeDCSQuery ();
   time_t daqStart = (time_t) (((TString)GetRunParameter("DAQ_time_start")).Atoi());
   time_t daqEnd   = (time_t) (((TString)GetRunParameter("DAQ_time_end")).Atoi());
   time_t ctpStart = (time_t) (((TString)GetRunParameter("TRGTimeStart")).Atoi());
   time_t ctpEnd   = (time_t) (((TString)GetRunParameter("TRGTimeEnd")).Atoi());
   
	fData      = new AliVZERODataDCS(fRun, fStartTime, fEndTime,(UInt_t)daqStart, (UInt_t)daqEnd,(UInt_t)ctpStart, (UInt_t)ctpEnd);
	fFEEData   = new AliVZERODataFEE(fRun, fStartTime, fEndTime);		
   
}

//______________________________________________________________________________________________
UInt_t AliVZEROPreprocessor::Process(TMap* dcsAliasMap)
{
  // Fills data retrieved from DCS and DAQ into a AliVZEROCalibData object and 
  // stores it into CalibrationDB


  // *** GET RUN TYPE ***
  TString runType = GetRunType();


  // *** REFERENCE DATA *** 
  
  TString fileName; 
  AliVZEROCalibData *calibData = new AliVZEROCalibData();
  
  // *************** HV From DCS ******************
  // Fills data into a AliVZERODataDCS object
  if(!dcsAliasMap) return 1;

 	// The Processing of the DCS input data is forwarded to AliVZERODataDCS
  if (!fData->ProcessData(*dcsAliasMap)) return 1;

	// Writes VZERO PMs HV values into VZERO calibration object and Timing resolution parameters
  	calibData->FillDCSData(fData);
	   
   // *************** From DAQ ******************
   
	TString sourcesId = "V00da_results";

	TList* sourceList = GetFileSources(kDAQ, sourcesId.Data());
  	if (!sourceList)  {
		Log(Form("No sources found for id %s", sourcesId.Data()));      		
      		return 1; }
	Log(Form("The following sources produced files with the id %s",sourcesId.Data()));
	sourceList->Print();    

  	TIter iter(sourceList);
  	TObjString *source;
		
	while((source=dynamic_cast<TObjString*> (iter.Next()))){
  		fileName = GetFile(kDAQ, sourcesId.Data(), source->GetName());
  		if (fileName.Length() > 0)
    		Log(Form("Got the file %s, now we can extract some values.", fileName.Data()));
		FILE *file;
		if((file = fopen(fileName.Data(),"r")) == NULL){
            	                   Log(Form("Cannot open file %s",fileName.Data()));
	    	  	           return 1;}
		Float_t pedMean[128], pedSigma[128], adcMean[128], adcSigma[128] ;
		for(Int_t j=0; j<128; j++) {
		  Int_t resScan = fscanf(file,"%f %f %f %f",
					 &pedMean[j], &pedSigma[j], &adcMean[j], &adcSigma[j]);
		  if (resScan != 4) Log(Form("Bad data in file %s !",fileName.Data()));
		}
		fclose(file);
	    	
		calibData->SetPedestal(pedMean);
		calibData->SetSigma(pedSigma);			
		calibData->SetADCsigma(adcSigma);
		}				

	delete source;      
  
  // Check that everything was properly transmitted

//   for(Int_t j=0; j<128; j++){printf("Pedestal[%d] -> %f \n",j,calibData->GetPedestal(j));}
//   for(Int_t j=0; j<128; j++){printf("pedSigma[%d] -> %f \n",j,calibData->GetSigma(j));}
//   for(Int_t j=0; j<128; j++){printf("Gain[%d] -> %f \n",j,calibData->GetGain(j));}
//   for(Int_t j=0; j<128; j++){printf("adcSigma[%d] -> %f \n",j,calibData->GetADCsigma(j));}
//   for(Int_t j=0; j<64; j++){printf("MeanHV[%d] -> %f \n",j,calibData->GetMeanHV(j));}
//   for(Int_t j=0; j<64; j++){printf("WidthHV[%d] -> %f \n",j,calibData->GetWidthHV(j));}
  
  // Now we store the VZERO Calibration Object into CalibrationDB

  Bool_t resECal=kTRUE;
  
  Bool_t result = 0;
//  if(sourceList && sourceList->GetEntries()>0)
//  {
  AliCDBMetaData metaData;
  metaData.SetBeamPeriod(0);
  metaData.SetResponsible("Brigitte Cheynis");
  metaData.SetComment("This preprocessor fills an AliVZEROCalibData object");

  resECal = Store("Calib", "Data", calibData, &metaData, 0, kTRUE);
//  }
  if(resECal==kFALSE ) result = 1;
  

  delete calibData;
  delete sourceList; 

 // -----------------------------------------------------------------------
 // Retrieves Front End Electronics Parameters from  DCS archive
 // -----------------------------------------------------------------------
	AliVZEROTriggerData *triggerData = new AliVZEROTriggerData();

 	// The processing of the DCS input data is forwarded to AliVZERODataFEE
	fFEEData->ProcessData(*dcsAliasMap);

	// Writes VZERO FEE parameters values into VZERO  Trigger parametrization object
	triggerData->FillData(fFEEData);

	// Stores the VZERO Trigger Object into TriggerDB
	
	resECal=kTRUE;
	
	metaData.SetBeamPeriod(0);
	metaData.SetResponsible("Brigitte Cheynis");
	metaData.SetComment("This preprocessor fills an AliVZEROTriggerData object");
	
	resECal = Store("Trigger", "Data", triggerData, &metaData, 0, kTRUE);
	if(resECal==kFALSE ) result = 1;
	

   // *************** From DAQ DA - Equalization factors ******************
  
  TH1F *eqFactors = new TH1F("VZEROEqualizationFactors","VZERO Equalization Factors for Pb-Pb",64,-0.5,63.5);
  sourcesId = "V00DAEqualFactors";

  TList* sourceList2 = GetFileSources(kDAQ, sourcesId.Data());
  if (!sourceList2)  {
    Log(Form("No sources found for id %s", sourcesId.Data()));      		
    return 1; }
  Log(Form("The following sources produced files with the id %s",sourcesId.Data()));
  sourceList2->Print();

  TIter iter2(sourceList2);
  TObjString *source2;
		
  while((source2=dynamic_cast<TObjString*> (iter2.Next()))){
    fileName = GetFile(kDAQ, sourcesId.Data(), source2->GetName());
    if (fileName.Length() > 0)
      Log(Form("Got the file %s, now we can extract some values.", fileName.Data()));
    FILE *file2;
    if((file2 = fopen(fileName.Data(),"r")) == NULL){
      Log(Form("Cannot open file %s",fileName.Data()));
      return 1;}

    Double_t alpha[66];
    alpha[0] = alpha[65] = 0;
    Int_t tempCh;
    Float_t tempAlpha;
    for(Int_t j=0; j<64; ++j) {
      Int_t resScan = fscanf(file2,"%d %f", &tempCh, &tempAlpha);
      if (resScan != 2) Log(Form("Bad data in file %s !",fileName.Data()));
      alpha[tempCh+1] = tempAlpha;
    }
    fclose(file2);

    // Check that everything was properly transmitted
    printf("Equalization factors (0->64): ");
    for(Int_t j=0; j<64; ++j) printf("%.5f ",alpha[j+1]);
    printf("\n");

    eqFactors->SetContent(alpha);
  }

  delete source2;      
  
  // Now we store the VZERO Equalization Factors Object into OCDB

  resECal=kTRUE;
  
  AliCDBMetaData metaData2;
  metaData2.SetBeamPeriod(0);
  metaData2.SetResponsible("Brigitte Cheynis");
  metaData2.SetComment("VZERO Equalization Factors object filled by VZERO preprocessor");

  resECal = Store("Calib", "EqualizationFactors", eqFactors, &metaData2, 0, kTRUE);

  if(resECal==kFALSE ) result = 1;

  delete eqFactors;
  delete sourceList2; 

	
  return result;
}

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