Anode dependent drift speed. AliITSsegmentationSDD does not depend any longer on...
[u/mrichter/AliRoot.git] / ITS / AliITSPreprocessorSDD.cxx
1 /////////////////////////////////////////
2 // Class for SDD digits preprocessing  //
3 //                                     //
4 //                                     //
5 ////////////////////////////////////////
6
7 /* $Id$ */
8
9 #include "AliITSPreprocessorSDD.h"
10 #include "AliITSCalibrationSDD.h"
11 #include "AliShuttleInterface.h"
12 #include "AliCDBMetaData.h"
13 #include "TObjArray.h"
14 #include "AliLog.h"
15 #include <TObjString.h>
16 #include <TSystem.h>
17 #include <TList.h>
18
19 const Int_t AliITSPreprocessorSDD::fgkNumberOfSDD = 260;
20 const Int_t AliITSPreprocessorSDD::fgkNumberOfChannels = 512;
21 const TString AliITSPreprocessorSDD::fgkNameHistoPedestals = "hpedestal";
22 const TString AliITSPreprocessorSDD::fgkNameHistoNoise = "hnoise";
23 ClassImp(AliITSPreprocessorSDD)
24
25
26 UInt_t AliITSPreprocessorSDD::Process(TMap*/* dcsAliasMap*/){
27
28   //preprocessing. 
29
30   TObjArray respSDD(fgkNumberOfSDD);
31   respSDD.SetOwner(kFALSE);
32   Float_t baseline,rawnoise,cmn,corn,gain;
33   Int_t isgoodan,i,im,is,isgoodmod;
34   Int_t numOfBadChannels[fgkNumberOfSDD];
35   //TString pwd = gSystem->pwd();
36 //  const Char_t* tempDir=AliShuttleInterface::GetShuttleTempDir();
37   
38   TList* sourceList = GetFileSources(kDAQ, "SDD_Calib");
39   if (!sourceList){ 
40     Log("Error: no sources found for SDD_Calib");
41     return 2;
42   }
43
44   Int_t ind = 0;
45   Char_t command[100];
46   while (sourceList->At(ind)!=NULL) {
47     TObjString* tarId = (TObjString*) sourceList->At(ind);
48     TString tarName = GetFile(kDAQ, "SDD_Calib", tarId->GetString().Data());
49 //    gSystem->cd(tempDir);
50     if(tarName.Length()==0){
51       Log(Form("Baseline tar file from source %d not found.",ind));
52       return 2;
53     }
54     sprintf(command,"tar -xf %s",tarName.Data());
55     gSystem->Exec(command);
56     ind++;
57   }
58    
59   sourceList = GetFileSources(kDAQ, "SDD_Injec");
60   if (!sourceList){ 
61     Log("Error: no sources found for SDD_Injec");
62     return 2;
63   }
64
65   ind = 0;
66   while (sourceList->At(ind)!=NULL) {
67    TObjString* tarId = (TObjString*) sourceList->At(ind);
68    TString tarName = GetFile(kDAQ, "SDD_Injec", tarId->GetString().Data());
69 //    gSystem->cd(tempDir);
70     if(tarName.Length()==0){
71       Log(Form("Injector tar file from source %d not found.",ind));
72       return 2;
73     }
74     sprintf(command,"tar -xf %s",tarName.Data());
75     gSystem->Exec(command);
76     ind++;
77   }
78   
79   delete sourceList;
80
81   for(Int_t imod=0;imod<fgkNumberOfSDD;imod++){
82     AliITSCalibrationSDD *cal = new AliITSCalibrationSDD("simulated");
83     numOfBadChannels[imod]=0;
84     Int_t badch[fgkNumberOfChannels];
85     for(Int_t isid=0;isid<=1;isid++){
86       Char_t basFileName[100];
87 //      sprintf(basFileName,"%s/SDDbase_mod%03d_sid%d.data",tempDir,imod,isid);
88       sprintf(basFileName,"./SDDbase_mod%03d_sid%d.data",imod,isid);
89       FILE* basFil = fopen(basFileName,"read");
90       if (basFil == 0) {
91         Log(Form("File %s not found.",basFileName));
92         return 2;
93       }      
94       fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod);
95       if(!isgoodmod) cal->SetDead();
96       for(Int_t ian=0;ian<(fgkNumberOfChannels/2);ian++){
97         fscanf(basFil,"%d %d %f %f %f %f %f\n",&i,&isgoodan,&baseline,&rawnoise,&cmn,&corn,&gain);
98         Int_t ich=ian;
99         if(isid==1) ich+=256;
100         if(!isgoodan){ 
101           Int_t ibad=numOfBadChannels[imod];
102           numOfBadChannels[imod]++;
103           badch[ibad]=ich;
104         }
105         cal->SetBaseline(ich,baseline);
106         cal->SetNoiseAfterElectronics(ich,rawnoise);
107         Int_t iChip=cal->GetChip(ich);
108         Int_t iChInChip=cal->GetChipChannel(ich);
109         cal->SetGain(gain,isid,iChip,iChInChip);
110       }
111       cal->SetDeadChannels(numOfBadChannels[imod]);
112       for(Int_t ibad=0;ibad<numOfBadChannels[imod];ibad++){
113         cal->SetBadChannel(ibad,badch[ibad]);
114       }
115       fclose(basFil);
116
117       Char_t injFileName[100];
118       Int_t evNumb; 
119       UInt_t timeStamp;
120       Float_t param[4];
121       sprintf(injFileName,"./SDDinj_mod%03d_sid%d.data",imod,isid);
122       FILE* injFil = fopen(injFileName,"read");
123       if (injFil == 0) {
124         Log(Form("File %s not found.",basFileName));
125         return 2;
126       }      
127       while (!feof(injFil)){
128         fscanf(injFil,"%d %d",&evNumb,&timeStamp);
129         if(feof(injFil)) break;
130         for(Int_t ic=0;ic<4;ic++) fscanf(injFil,"%f",&param[ic]);
131         cal->SetDriftSpeedParam(isid,param);
132       }
133     }
134     respSDD.Add(cal);
135   }
136
137   AliCDBMetaData *md1= new AliCDBMetaData(); // metaData describing the object
138   md1->SetObjectClassName("AliITSCalibration");
139   md1->SetResponsible("Elisabetta Crescio, Francesco Prino");
140   md1->SetBeamPeriod(0);
141   md1->SetAliRootVersion("head 5 April 2007"); //root version
142   md1->SetComment("This is a test");
143
144   Bool_t retcode = Store("Calib","CalibSDD",&respSDD,md1, 0, kTRUE);
145
146   if(retcode) return 0;
147   else return 1;
148 }