ROOT logo
//
// Author: Enrico Fragiacomo
// Date: 13/10/2006
// 
// SHUTTLE preprocessing class for SSD calibration files

/* $Id$ */

#include "AliITSPreprocessorSSD.h"
 
#include "AliCDBMetaData.h"
#include "AliLog.h"
#include "TFile.h"

#include <TTimeStamp.h>
#include <TObjString.h>

#include "AliITSRawStreamSSD.h"
#include "AliITSNoiseSSDv2.h"
#include "AliITSPedestalSSDv2.h"
#include "AliITSBadChannelsSSDv2.h"
#include <Riostream.h>


const Int_t AliITSPreprocessorSSD::fgkNumberOfSSD = 1698;

ClassImp(AliITSPreprocessorSSD)

//-----------------------------------------------------------------------
AliITSPreprocessorSSD::AliITSPreprocessorSSD(AliShuttleInterface* shuttle) :
  AliPreprocessor("SSD", shuttle)
{
  // constructor

  AddRunType("ELECTRONICS_CALIBRATION_RUN");
  AddRunType("PEDESTAL");
  AddRunType("PHYSICS");

}

//______________________________________________________________________________________________
void AliITSPreprocessorSSD::Initialize(Int_t run, UInt_t startTime,
	UInt_t endTime)
{
  // initialize

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

//______________________________________________________________________________________________
UInt_t AliITSPreprocessorSSD::Process(TMap* /*dcsAliasMap*/)
{

  // Note. To be modified: dcsAliasMap is not needed but I can not get rid
  // of it unless the base class AliPreprocessor is modified accordingly.

  //  TObjArray calib_array(fgkNumberOfSSD); 
  //TObjArray badch_array(fgkNumberOfSSD); 
  //TObjArray ped_array(fgkNumberOfSSD); 
  //Float_t noise=0, gain=0;
  
  //---------------------------------------
  // initialize the calibration objects
  AliITSNoiseSSDv2 *calib = new AliITSNoiseSSDv2();
  AliITSBadChannelsSSDv2 *badch = new AliITSBadChannelsSSDv2();
  AliITSPedestalSSDv2 *pedel = new AliITSPedestalSSDv2();
  
  TString runType = GetRunType();
  if(runType == "ELECTRONICS_CALIBRATION_RUN") {
    
  }
  else if(runType == "PEDESTAL") {

    TList* list = GetFileSources(kDAQ, "CALIBRATION");
    if (list && list->GetEntries() > 0)
      {
	Log("The following sources produced files with the id CALIBRATION");
	list->Print();
	
	// create iterator over list of LDCs (provides list of TObjString)
	TIter next(list);
	TObjString *ok;
	
	// expect to iterate 3 times (LDC0, LDC1, LDC2)
	while ( (ok = (TObjString*) next()) ) {                               
	  
	  TString key = ok->String();
	  
	  TString fileName = GetFile(kDAQ, "CALIBRATION", key.Data());
	  if (fileName.Length() > 0) {
	    
	    Log(Form("Got the file %s, now we can extract some values.", fileName.Data()));
	    
	    TFile *f = new TFile(fileName.Data());
	    if(!f || !f->IsOpen()){
	    	Log("Error opening file!");
		delete list;
		return 2;
	    }
	    
	    AliITSNoiseSSDv2 *cal; 
	    f->GetObject("AliITSNoiseSSDv2;1", cal); 
	    if(!cal) {
	    	Log("File does not contain expected data for the noise!");
		delete list;
		return 3;
	    }	    
	    AliITSPedestalSSDv2 *ped;
	    f->GetObject("AliITSPedestalSSDv2;1", ped); 
	    if(!ped) {
	    	Log("File does not contain expected data for the pedestals!");
		delete list;
		return 5;
	    }	    
	    AliITSBadChannelsSSDv2 *bad;
	    f->GetObject("AliITSBadChannelsSSDv2;1", bad); 
	    if(!bad) {
	    	Log("File does not contain expected data for bad channels  !");
		delete list;
		return 4;
	    }	    

	    for(Int_t module=0; module<fgkNumberOfSSD; module++) {
	      for(Int_t strip=0; strip<768; strip++) {
		if(cal->GetNoiseP(module,strip)) 
		  calib->AddNoiseP(module,strip,cal->GetNoiseP(module,strip));
		if(cal->GetNoiseN(module,strip)) 
		  calib->AddNoiseN(module,strip,cal->GetNoiseN(module,strip));
		if(ped->GetPedestalP(module,strip)) 
		  pedel->AddPedestalP(module,strip,
				      ped->GetPedestalP(module,strip));
		if(ped->GetPedestalN(module,strip)) 
		  pedel->AddPedestalN(module,strip,
				      ped->GetPedestalN(module,strip));
		if(bad->GetBadChannelP(module,strip)) 
		  badch->AddBadChannelP(module,strip,
					 bad->GetBadChannelP(module,strip));
		if(bad->GetBadChannelN(module,strip)) 
		  badch->AddBadChannelN(module,strip,
					 bad->GetBadChannelN(module,strip));
	      }
	    }

	    f->Close(); delete f;	    
		
	  } else {
	  	Log("GetFile error!");
		delete list;
		return 6;
	  } // if filename
	} // end iteration over LDCs
	
	delete list;
      } else {
      	  Log("GetFileSources error!");
	  if(list) delete list;
	  return 7;
      } // if list
    
    //Now we have to store the final CDB file
    AliCDBMetaData metaData;
    metaData.SetBeamPeriod(0);
    metaData.SetResponsible("Enrico Fragiacomo");
    metaData.SetComment("Fills noise, pedestal and bad channels TObjArray");
    
      if(!Store("Calib", "NoiseSSD", (TObject *)calib, &metaData, 0, 1)) {
	Log("no store");
        return 1;
      }  
      
      if(!Store("Calib", "BadChannelsSSD", (TObject*)badch, &metaData, 0, 1)) {
	Log("no store");
        return 1;
      }  
      
      if(!StoreReferenceData("Ref","PedestalSSD",  (TObject*)pedel, &metaData)) {
	Log("no store");
	return 1;
      }
	 
  } // end if pedestal run
  else {
    Log("Nothing to do");
    return 0;
  }
  
  Log("Database updated");
  return 0; // 0 means success

}

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