]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSPreprocessorSDD.cxx
Fix of parsing bug related to the reading of the calib header. Added consistency...
[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 "AliITSDriftSpeedSDD.h"
12 #include "AliITSDriftSpeedArraySDD.h"
13 #include "AliShuttleInterface.h"
14 #include "AliCDBMetaData.h"
15 #include "TObjArray.h"
16 #include "AliLog.h"
17 #include <TObjString.h>
18 #include <TSystem.h>
19 #include <TList.h>
20
21 const Int_t AliITSPreprocessorSDD::fgkNumberOfSDD = 260;
22 const Int_t AliITSPreprocessorSDD::fgkNumberOfChannels = 512;
23 const TString AliITSPreprocessorSDD::fgkNameHistoPedestals = "hpedestal";
24 const TString AliITSPreprocessorSDD::fgkNameHistoNoise = "hnoise";
25 ClassImp(AliITSPreprocessorSDD)
26
27
28 UInt_t AliITSPreprocessorSDD::Process(TMap*/* dcsAliasMap*/){
29
30   //preprocessing. 
31
32   TString runType = GetRunType();
33   Bool_t retcode;
34   Char_t command[100];
35   Char_t inpFileName[100];
36   AliCDBMetaData *md1= new AliCDBMetaData();
37   md1->SetResponsible("Elisabetta Crescio, Francesco Prino");
38   md1->SetBeamPeriod(0);
39   md1->SetAliRootVersion("head 30 November 2007"); //root version
40   md1->SetComment("This is a test");
41
42   if (runType == "PULSER_RUN"){
43     TObjArray calSDD(fgkNumberOfSDD);
44     calSDD.SetOwner(kFALSE);
45     Float_t baseline,rawnoise,cmn,corn,gain;
46     Int_t isgoodan,i,im,is,isgoodmod;
47     Int_t numOfBadChannels[fgkNumberOfSDD];
48   
49     TList* sourceList = GetFileSources(kDAQ, "SDD_Calib");
50     if (!sourceList){ 
51       Log("Error: no sources found for SDD_Calib");
52       return 2;
53     }
54
55     Int_t ind = 0;
56     while (sourceList->At(ind)!=NULL) {
57       TObjString* tarId = (TObjString*) sourceList->At(ind);
58       TString tarName = GetFile(kDAQ, "SDD_Calib", tarId->GetString().Data());
59       if(tarName.Length()==0){
60         Log(Form("Baseline tar file from source %d not found.",ind));
61         return 2;
62       }
63       sprintf(command,"tar -xf %s",tarName.Data());
64       gSystem->Exec(command);
65       ind++;
66     }
67     delete sourceList;
68
69     for(Int_t imod=0;imod<fgkNumberOfSDD;imod++){
70       AliITSCalibrationSDD *cal = new AliITSCalibrationSDD("simulated");
71       numOfBadChannels[imod]=0;
72       Int_t badch[fgkNumberOfChannels];
73       for(Int_t isid=0;isid<=1;isid++){
74        sprintf(inpFileName,"./SDDbase_mod%03d_sid%d.data",imod,isid);
75        FILE* basFil = fopen(inpFileName,"read");
76        if (basFil == 0) {
77          Log(Form("File %s not found.",inpFileName));
78          return 2;
79        }      
80        fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod);
81        if(!isgoodmod) cal->SetDead();
82        for(Int_t ian=0;ian<(fgkNumberOfChannels/2);ian++){
83          fscanf(basFil,"%d %d %f %f %f %f %f\n",&i,&isgoodan,&baseline,&rawnoise,&cmn,&corn,&gain);
84          Int_t ich=ian;
85          if(isid==1) ich+=256;
86          if(!isgoodan){ 
87            Int_t ibad=numOfBadChannels[imod];
88            numOfBadChannels[imod]++;
89            badch[ibad]=ich;
90          }
91          cal->SetBaseline(ich,baseline);
92          cal->SetNoiseAfterElectronics(ich,rawnoise);
93          Int_t iChip=cal->GetChip(ich);
94          Int_t iChInChip=cal->GetChipChannel(ich);
95          cal->SetGain(gain,isid,iChip,iChInChip);
96        }
97        cal->SetDeadChannels(numOfBadChannels[imod]);
98        for(Int_t ibad=0;ibad<numOfBadChannels[imod];ibad++){
99          cal->SetBadChannel(ibad,badch[ibad]);
100        }
101        fclose(basFil);
102       }
103       calSDD.Add(cal);
104     }
105     md1->SetObjectClassName("AliITSCalibration");
106     retcode = Store("Calib","CalibSDD",&calSDD,md1, 0, kTRUE);
107   }else if(runType == "PHYSICS"){
108
109     TObjArray vdrift(2*fgkNumberOfSDD);
110     vdrift.SetOwner(kFALSE);
111     Int_t evNumb,polDeg; 
112     UInt_t timeStamp;
113     Float_t param[4];
114
115     TList* sourceList = GetFileSources(kDAQ, "SDD_Injec");
116     if (!sourceList){ 
117       Log("Error: no sources found for SDD_Injec");
118       return 2;
119     }
120     Int_t ind = 0;
121     while (sourceList->At(ind)!=NULL) {
122       TObjString* tarId = (TObjString*) sourceList->At(ind);
123       TString tarName = GetFile(kDAQ, "SDD_Injec", tarId->GetString().Data());
124       if(tarName.Length()==0){
125         Log(Form("Injector tar file from source %d not found.",ind));
126         return 2;
127       }
128       sprintf(command,"tar -xf %s",tarName.Data());
129       gSystem->Exec(command);
130       ind++;
131     }
132     delete sourceList;
133
134     for(Int_t imod=0;imod<fgkNumberOfSDD;imod++){
135       for(Int_t isid=0;isid<=1;isid++){
136         AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
137         sprintf(inpFileName,"./SDDinj_mod%03d_sid%d.data",imod,isid);
138         FILE* injFil = fopen(inpFileName,"read");
139         if (injFil == 0) {
140           Log(Form("File %s not found.",inpFileName));
141           return 2;
142         }
143         fscanf(injFil,"%d",&polDeg);
144         while (!feof(injFil)){
145           fscanf(injFil,"%d %d",&evNumb,&timeStamp);
146           if(feof(injFil)) break;
147           for(Int_t ic=0;ic<4;ic++) fscanf(injFil,"%f",&param[ic]);
148           AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,param);
149           arr->AddDriftSpeed(dsp);
150         }
151         vdrift.Add(arr);
152       }
153     }
154     md1->SetObjectClassName("AliITSDriftSpeedArraySDD");
155     retcode = Store("Calib","DriftSpeedSDD",&vdrift,md1,0, kTRUE);    
156   }else{
157     // do nothing for other run types
158     retcode=1;
159   }
160   if(retcode) return 0;
161   else return 1;
162 }