ROOT logo
#include "AliADPreprocessor.h"
#include "AliADCalibData.h"
#include "AliCDBMetaData.h"
#include "AliCDBEntry.h"
#include "AliDCSValue.h"
#include "AliLog.h"
#include "AliShuttleInterface.h"
#include "AliADDataDCS.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 AD 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/AD/Calib/Data
//  It also retrieves FEE parameters from DCS archive   
//  and writes them as Trigger MetaData into OCDB/AD/Trigger/Data 
//  (to be used for trigger simulation)
//

ClassImp(AliADPreprocessor)

//______________________________________________________________________________________________
AliADPreprocessor::AliADPreprocessor(AliShuttleInterface* shuttle) :
	AliPreprocessor("AD0", shuttle),
	fDCSData(0)
 
{
  // constructor  
  
  AddRunType("STANDALONE_PULSER");
  AddRunType("STANDALONE_BC");
  AddRunType("PHYSICS");
    
}

//______________________________________________________________________________________________
AliADPreprocessor::~AliADPreprocessor()
{
  // destructor
	delete fDCSData;
	
}

//______________________________________________________________________________________________
void AliADPreprocessor::Initialize(Int_t run, UInt_t startTime,
	UInt_t endTime)
{
  // Creates AliADDataDCS 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());
   
	fDCSData      = new AliADDataDCS(fRun, fStartTime, fEndTime,(UInt_t)daqStart, (UInt_t)daqEnd,(UInt_t)ctpStart, (UInt_t)ctpEnd);	
   
}

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


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


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

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

	// Writes AD PMs HV values into AD calibration object and Timing resolution parameters
  	calibData->FillDCSData(fDCSData);
	   
   // *************** From DAQ ******************
   
	TString sourcesId = "AD0da_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[32], pedSigma[32], adcMean[32], adcSigma[32] ;
		for(Int_t j=0; j<32; 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->SetADCmean(adcMean);			
		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 AD Calibration Object into CalibrationDB

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

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

  delete calibData;
  delete sourceList; 

 	
  return result;
}

 AliADPreprocessor.cxx:1
 AliADPreprocessor.cxx:2
 AliADPreprocessor.cxx:3
 AliADPreprocessor.cxx:4
 AliADPreprocessor.cxx:5
 AliADPreprocessor.cxx:6
 AliADPreprocessor.cxx:7
 AliADPreprocessor.cxx:8
 AliADPreprocessor.cxx:9
 AliADPreprocessor.cxx:10
 AliADPreprocessor.cxx:11
 AliADPreprocessor.cxx:12
 AliADPreprocessor.cxx:13
 AliADPreprocessor.cxx:14
 AliADPreprocessor.cxx:15
 AliADPreprocessor.cxx:16
 AliADPreprocessor.cxx:17
 AliADPreprocessor.cxx:18
 AliADPreprocessor.cxx:19
 AliADPreprocessor.cxx:20
 AliADPreprocessor.cxx:21
 AliADPreprocessor.cxx:22
 AliADPreprocessor.cxx:23
 AliADPreprocessor.cxx:24
 AliADPreprocessor.cxx:25
 AliADPreprocessor.cxx:26
 AliADPreprocessor.cxx:27
 AliADPreprocessor.cxx:28
 AliADPreprocessor.cxx:29
 AliADPreprocessor.cxx:30
 AliADPreprocessor.cxx:31
 AliADPreprocessor.cxx:32
 AliADPreprocessor.cxx:33
 AliADPreprocessor.cxx:34
 AliADPreprocessor.cxx:35
 AliADPreprocessor.cxx:36
 AliADPreprocessor.cxx:37
 AliADPreprocessor.cxx:38
 AliADPreprocessor.cxx:39
 AliADPreprocessor.cxx:40
 AliADPreprocessor.cxx:41
 AliADPreprocessor.cxx:42
 AliADPreprocessor.cxx:43
 AliADPreprocessor.cxx:44
 AliADPreprocessor.cxx:45
 AliADPreprocessor.cxx:46
 AliADPreprocessor.cxx:47
 AliADPreprocessor.cxx:48
 AliADPreprocessor.cxx:49
 AliADPreprocessor.cxx:50
 AliADPreprocessor.cxx:51
 AliADPreprocessor.cxx:52
 AliADPreprocessor.cxx:53
 AliADPreprocessor.cxx:54
 AliADPreprocessor.cxx:55
 AliADPreprocessor.cxx:56
 AliADPreprocessor.cxx:57
 AliADPreprocessor.cxx:58
 AliADPreprocessor.cxx:59
 AliADPreprocessor.cxx:60
 AliADPreprocessor.cxx:61
 AliADPreprocessor.cxx:62
 AliADPreprocessor.cxx:63
 AliADPreprocessor.cxx:64
 AliADPreprocessor.cxx:65
 AliADPreprocessor.cxx:66
 AliADPreprocessor.cxx:67
 AliADPreprocessor.cxx:68
 AliADPreprocessor.cxx:69
 AliADPreprocessor.cxx:70
 AliADPreprocessor.cxx:71
 AliADPreprocessor.cxx:72
 AliADPreprocessor.cxx:73
 AliADPreprocessor.cxx:74
 AliADPreprocessor.cxx:75
 AliADPreprocessor.cxx:76
 AliADPreprocessor.cxx:77
 AliADPreprocessor.cxx:78
 AliADPreprocessor.cxx:79
 AliADPreprocessor.cxx:80
 AliADPreprocessor.cxx:81
 AliADPreprocessor.cxx:82
 AliADPreprocessor.cxx:83
 AliADPreprocessor.cxx:84
 AliADPreprocessor.cxx:85
 AliADPreprocessor.cxx:86
 AliADPreprocessor.cxx:87
 AliADPreprocessor.cxx:88
 AliADPreprocessor.cxx:89
 AliADPreprocessor.cxx:90
 AliADPreprocessor.cxx:91
 AliADPreprocessor.cxx:92
 AliADPreprocessor.cxx:93
 AliADPreprocessor.cxx:94
 AliADPreprocessor.cxx:95
 AliADPreprocessor.cxx:96
 AliADPreprocessor.cxx:97
 AliADPreprocessor.cxx:98
 AliADPreprocessor.cxx:99
 AliADPreprocessor.cxx:100
 AliADPreprocessor.cxx:101
 AliADPreprocessor.cxx:102
 AliADPreprocessor.cxx:103
 AliADPreprocessor.cxx:104
 AliADPreprocessor.cxx:105
 AliADPreprocessor.cxx:106
 AliADPreprocessor.cxx:107
 AliADPreprocessor.cxx:108
 AliADPreprocessor.cxx:109
 AliADPreprocessor.cxx:110
 AliADPreprocessor.cxx:111
 AliADPreprocessor.cxx:112
 AliADPreprocessor.cxx:113
 AliADPreprocessor.cxx:114
 AliADPreprocessor.cxx:115
 AliADPreprocessor.cxx:116
 AliADPreprocessor.cxx:117
 AliADPreprocessor.cxx:118
 AliADPreprocessor.cxx:119
 AliADPreprocessor.cxx:120
 AliADPreprocessor.cxx:121
 AliADPreprocessor.cxx:122
 AliADPreprocessor.cxx:123
 AliADPreprocessor.cxx:124
 AliADPreprocessor.cxx:125
 AliADPreprocessor.cxx:126
 AliADPreprocessor.cxx:127
 AliADPreprocessor.cxx:128
 AliADPreprocessor.cxx:129
 AliADPreprocessor.cxx:130
 AliADPreprocessor.cxx:131
 AliADPreprocessor.cxx:132
 AliADPreprocessor.cxx:133
 AliADPreprocessor.cxx:134
 AliADPreprocessor.cxx:135
 AliADPreprocessor.cxx:136
 AliADPreprocessor.cxx:137
 AliADPreprocessor.cxx:138
 AliADPreprocessor.cxx:139
 AliADPreprocessor.cxx:140
 AliADPreprocessor.cxx:141
 AliADPreprocessor.cxx:142
 AliADPreprocessor.cxx:143
 AliADPreprocessor.cxx:144
 AliADPreprocessor.cxx:145
 AliADPreprocessor.cxx:146
 AliADPreprocessor.cxx:147
 AliADPreprocessor.cxx:148
 AliADPreprocessor.cxx:149
 AliADPreprocessor.cxx:150
 AliADPreprocessor.cxx:151
 AliADPreprocessor.cxx:152
 AliADPreprocessor.cxx:153
 AliADPreprocessor.cxx:154
 AliADPreprocessor.cxx:155
 AliADPreprocessor.cxx:156
 AliADPreprocessor.cxx:157
 AliADPreprocessor.cxx:158
 AliADPreprocessor.cxx:159
 AliADPreprocessor.cxx:160
 AliADPreprocessor.cxx:161
 AliADPreprocessor.cxx:162
 AliADPreprocessor.cxx:163
 AliADPreprocessor.cxx:164
 AliADPreprocessor.cxx:165
 AliADPreprocessor.cxx:166
 AliADPreprocessor.cxx:167
 AliADPreprocessor.cxx:168
 AliADPreprocessor.cxx:169
 AliADPreprocessor.cxx:170
 AliADPreprocessor.cxx:171
 AliADPreprocessor.cxx:172
 AliADPreprocessor.cxx:173
 AliADPreprocessor.cxx:174
 AliADPreprocessor.cxx:175