ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <Riostream.h>
#include <TFile.h>
#include <TString.H>
#include "AliITSGainSSDv2.h"
#include "AliCDBEntry.h"
#include "AliCDBManager.h"
#include "AliCDBMetaData.h"
#endif
Int_t GainCalibration(AliCDBManager * man, Float_t* gainP, Float_t* gainN) 
{
	const Int_t fgkSSDMODULES = 1698;
  	static const Int_t fgkDefaultNStripsSSD = 768;
  	AliITSGainSSDv2 *gainSSD = new AliITSGainSSDv2();
  	AliCDBEntry *entryGainSSD = man->Get("ITS/Calib/GainSSD");
  	TObject *empty = (TObject *)entryGainSSD->GetObject();
  	TString objectname = empty->GetName();
  	if(objectname=="AliITSGainSSDv2") 
	{
    		cout<<"Reading the new format of the calibration file..."<<endl;
    		gainSSD = (AliITSGainSSDv2 *)entryGainSSD->GetObject();
  	}
	else
	{
		cout<<"Now OCDB object"<<endl;
		return 0 ;
	}
  	for (Int_t i = 0; i < fgkSSDMODULES; i++) 
	{
  			//for (Int_t i = 0; i < 1; i++) {
    			//AliITSgeomTGeo::GetModuleId(i+500,layer,ladder,module);
   		for(Int_t j = 0; j < fgkDefaultNStripsSSD; j++) 
	 	{
     	 		gainP[i*fgkDefaultNStripsSSD+j] = gainSSD->GetGainP(i,j);
      			gainN[i*fgkDefaultNStripsSSD+j]= gainSSD->GetGainN(i,j);
     	
    		}//strip loop
  	}//module loop
	return 1;
}


void UpdateSSDGainOCDB(TString gainfile,Float_t globalMPV=84.0,const char* type = "alien", Int_t runNumber = 0, Int_t runRangemin=0 ,Int_t runRangemax= AliCDBRunRange::Infinity()) 
{
	if((runRangemax<runRangemin))
	{
		cout<<"wrong run range "<<endl;
		return;
	}	
  	const Int_t fgkPNStripsPerModule = 768;
  	const Int_t fgkNumberOfSSDModules = 1698;
	Float_t gainPold[fgkPNStripsPerModule* fgkNumberOfSSDModules];
	Float_t gainNold[fgkPNStripsPerModule* fgkNumberOfSSDModules];
	
	for(int i=0;i<fgkPNStripsPerModule* fgkNumberOfSSDModules;i++)
	{
			gainPold[i]=0.0;
			gainNold[i]=0.0;
	}
	
	TString gType = type;
  	AliCDBManager * man = AliCDBManager::Instance();
	if(gType == "alien") 
   		 man->SetDefaultStorage("alien://folder=/alice/data/2010/OCDB/");
  	else if(gType == "local") 
    		man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
  	else 
	{
    		cout<<"Allowed types: local or alien!!!"<<endl;
    		return;
  	}
	  man->SetRun(runNumber);
	if(!GainCalibration(man,gainPold,gainNold))
		return;
		
	char buffer[256];
	ifstream ingainfile(gainfile);
	if(!ingainfile.good())
		return;
	
	
	 ingainfile.getline(buffer,256);
	cout<<buffer<<endl;
	
	
	Int_t module=0;
	Int_t gainflag=0;
	Float_t gainP=0;
	Float_t gainN=0;
	Float_t fMPV=0;
	Float_t corrP[1698];
	Float_t corrN[1698];
	
	for(int jj=0;jj<1698;jj++)
    	{
		ingainfile>>module;
		ingainfile>>gainflag;
		ingainfile>>gainP;
		ingainfile>>gainN;
		ingainfile>>fMPV;
		if(gainflag==1)
		{
			corrP[module]=gainP*globalMPV/fMPV;
			corrN[module]=gainN*globalMPV/fMPV;
			
		}
		else
		{
			corrP[module]=1.0;
			corrN[module]=1.0;
		}
			
	}
	
	
  	TObjArray *array = new TObjArray();
  	array->SetName("Gain");
  	AliITSGainSSDv2  *mc;
	mc = new AliITSGainSSDv2();
  	for(Int_t mind = 0; mind < fgkNumberOfSSDModules; mind++) 
	{
    		for (Int_t i = 0; i < fgkPNStripsPerModule; i++) 
		{
			mc->AddGainP(mind,i, gainPold[mind* fgkPNStripsPerModule+i]*corrP[mind]);
     			mc->AddGainN(mind,i,gainNold[mind* fgkPNStripsPerModule+i]*corrN[mind]);			
    		}
  	}

	man = AliCDBManager::Instance();
	man->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
	man->SetRun(0);
	//AliCDBId id("ITS/Calib/GainSSD",0,AliCDBRunRange::Infinity());
	AliCDBId id("ITS/Calib/GainSSD",runRangemin,runRangemax);
	AliCDBMetaData *metadata= new AliCDBMetaData();
	metadata->SetResponsible("Marek.Chojnacki@cern.ch");
	metadata->SetComment("Default values for the SSD gain calibration");
	//man->Put(array,id,metadata);
	man->Put(mc,id,metadata);
	 TFile* fout=TFile::Open("AliITSGainSSD_new.root","recreate");
	mc ->Write();	
	 	fout->Close();
	
}  
 UpdateSSDGainOCDB.C:1
 UpdateSSDGainOCDB.C:2
 UpdateSSDGainOCDB.C:3
 UpdateSSDGainOCDB.C:4
 UpdateSSDGainOCDB.C:5
 UpdateSSDGainOCDB.C:6
 UpdateSSDGainOCDB.C:7
 UpdateSSDGainOCDB.C:8
 UpdateSSDGainOCDB.C:9
 UpdateSSDGainOCDB.C:10
 UpdateSSDGainOCDB.C:11
 UpdateSSDGainOCDB.C:12
 UpdateSSDGainOCDB.C:13
 UpdateSSDGainOCDB.C:14
 UpdateSSDGainOCDB.C:15
 UpdateSSDGainOCDB.C:16
 UpdateSSDGainOCDB.C:17
 UpdateSSDGainOCDB.C:18
 UpdateSSDGainOCDB.C:19
 UpdateSSDGainOCDB.C:20
 UpdateSSDGainOCDB.C:21
 UpdateSSDGainOCDB.C:22
 UpdateSSDGainOCDB.C:23
 UpdateSSDGainOCDB.C:24
 UpdateSSDGainOCDB.C:25
 UpdateSSDGainOCDB.C:26
 UpdateSSDGainOCDB.C:27
 UpdateSSDGainOCDB.C:28
 UpdateSSDGainOCDB.C:29
 UpdateSSDGainOCDB.C:30
 UpdateSSDGainOCDB.C:31
 UpdateSSDGainOCDB.C:32
 UpdateSSDGainOCDB.C:33
 UpdateSSDGainOCDB.C:34
 UpdateSSDGainOCDB.C:35
 UpdateSSDGainOCDB.C:36
 UpdateSSDGainOCDB.C:37
 UpdateSSDGainOCDB.C:38
 UpdateSSDGainOCDB.C:39
 UpdateSSDGainOCDB.C:40
 UpdateSSDGainOCDB.C:41
 UpdateSSDGainOCDB.C:42
 UpdateSSDGainOCDB.C:43
 UpdateSSDGainOCDB.C:44
 UpdateSSDGainOCDB.C:45
 UpdateSSDGainOCDB.C:46
 UpdateSSDGainOCDB.C:47
 UpdateSSDGainOCDB.C:48
 UpdateSSDGainOCDB.C:49
 UpdateSSDGainOCDB.C:50
 UpdateSSDGainOCDB.C:51
 UpdateSSDGainOCDB.C:52
 UpdateSSDGainOCDB.C:53
 UpdateSSDGainOCDB.C:54
 UpdateSSDGainOCDB.C:55
 UpdateSSDGainOCDB.C:56
 UpdateSSDGainOCDB.C:57
 UpdateSSDGainOCDB.C:58
 UpdateSSDGainOCDB.C:59
 UpdateSSDGainOCDB.C:60
 UpdateSSDGainOCDB.C:61
 UpdateSSDGainOCDB.C:62
 UpdateSSDGainOCDB.C:63
 UpdateSSDGainOCDB.C:64
 UpdateSSDGainOCDB.C:65
 UpdateSSDGainOCDB.C:66
 UpdateSSDGainOCDB.C:67
 UpdateSSDGainOCDB.C:68
 UpdateSSDGainOCDB.C:69
 UpdateSSDGainOCDB.C:70
 UpdateSSDGainOCDB.C:71
 UpdateSSDGainOCDB.C:72
 UpdateSSDGainOCDB.C:73
 UpdateSSDGainOCDB.C:74
 UpdateSSDGainOCDB.C:75
 UpdateSSDGainOCDB.C:76
 UpdateSSDGainOCDB.C:77
 UpdateSSDGainOCDB.C:78
 UpdateSSDGainOCDB.C:79
 UpdateSSDGainOCDB.C:80
 UpdateSSDGainOCDB.C:81
 UpdateSSDGainOCDB.C:82
 UpdateSSDGainOCDB.C:83
 UpdateSSDGainOCDB.C:84
 UpdateSSDGainOCDB.C:85
 UpdateSSDGainOCDB.C:86
 UpdateSSDGainOCDB.C:87
 UpdateSSDGainOCDB.C:88
 UpdateSSDGainOCDB.C:89
 UpdateSSDGainOCDB.C:90
 UpdateSSDGainOCDB.C:91
 UpdateSSDGainOCDB.C:92
 UpdateSSDGainOCDB.C:93
 UpdateSSDGainOCDB.C:94
 UpdateSSDGainOCDB.C:95
 UpdateSSDGainOCDB.C:96
 UpdateSSDGainOCDB.C:97
 UpdateSSDGainOCDB.C:98
 UpdateSSDGainOCDB.C:99
 UpdateSSDGainOCDB.C:100
 UpdateSSDGainOCDB.C:101
 UpdateSSDGainOCDB.C:102
 UpdateSSDGainOCDB.C:103
 UpdateSSDGainOCDB.C:104
 UpdateSSDGainOCDB.C:105
 UpdateSSDGainOCDB.C:106
 UpdateSSDGainOCDB.C:107
 UpdateSSDGainOCDB.C:108
 UpdateSSDGainOCDB.C:109
 UpdateSSDGainOCDB.C:110
 UpdateSSDGainOCDB.C:111
 UpdateSSDGainOCDB.C:112
 UpdateSSDGainOCDB.C:113
 UpdateSSDGainOCDB.C:114
 UpdateSSDGainOCDB.C:115
 UpdateSSDGainOCDB.C:116
 UpdateSSDGainOCDB.C:117
 UpdateSSDGainOCDB.C:118
 UpdateSSDGainOCDB.C:119
 UpdateSSDGainOCDB.C:120
 UpdateSSDGainOCDB.C:121
 UpdateSSDGainOCDB.C:122
 UpdateSSDGainOCDB.C:123
 UpdateSSDGainOCDB.C:124
 UpdateSSDGainOCDB.C:125
 UpdateSSDGainOCDB.C:126
 UpdateSSDGainOCDB.C:127
 UpdateSSDGainOCDB.C:128
 UpdateSSDGainOCDB.C:129
 UpdateSSDGainOCDB.C:130
 UpdateSSDGainOCDB.C:131
 UpdateSSDGainOCDB.C:132
 UpdateSSDGainOCDB.C:133
 UpdateSSDGainOCDB.C:134
 UpdateSSDGainOCDB.C:135
 UpdateSSDGainOCDB.C:136
 UpdateSSDGainOCDB.C:137
 UpdateSSDGainOCDB.C:138
 UpdateSSDGainOCDB.C:139
 UpdateSSDGainOCDB.C:140
 UpdateSSDGainOCDB.C:141
 UpdateSSDGainOCDB.C:142
 UpdateSSDGainOCDB.C:143
 UpdateSSDGainOCDB.C:144