]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSPreprocessorSDD.cxx
Fixes for Febr. 2008 run
[u/mrichter/AliRoot.git] / ITS / AliITSPreprocessorSDD.cxx
1 /**************************************************************************
2  * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////
19 //                                                               //
20 // Implementation of the class for SDD preprocessing             //
21 // Origin: E.Crescio, Torino, crescio@to.infn.it                 //
22 //         F.Prino, Torino, prino@to.infn.it                     //
23 //                                                               //
24 ///////////////////////////////////////////////////////////////////
25
26 #include "AliITSPreprocessorSDD.h"
27 #include "AliITSCalibrationSDD.h"
28 #include "AliITSDriftSpeedSDD.h"
29 #include "AliITSDDLModuleMapSDD.h"
30 #include "AliITSDriftSpeedArraySDD.h"
31 #include "AliITSDCSAnalyzerSDD.h"
32 #include "AliShuttleInterface.h"
33 #include "AliCDBEntry.h"
34 #include "AliCDBMetaData.h"
35 #include "TObjArray.h"
36 #include "AliLog.h"
37 #include <TObjString.h>
38 #include <TSystem.h>
39 #include <TList.h>
40
41 const TString AliITSPreprocessorSDD::fgkNameHistoPedestals = "hpedestal";
42 const TString AliITSPreprocessorSDD::fgkNameHistoNoise = "hnoise";
43 ClassImp(AliITSPreprocessorSDD)
44
45
46 UInt_t AliITSPreprocessorSDD::Process(TMap* dcsAliasMap){
47
48   // Get DDL map from OCDB
49   AliCDBEntry* entry = GetFromOCDB("Calib", "DDLMapSDD");
50   if(!entry){
51     Log("DDL map file not found in OCDB.");  
52     return 2;
53   }
54   AliITSDDLModuleMapSDD* ddlmap = (AliITSDDLModuleMapSDD*)entry->GetObject();
55   if(!ddlmap){ 
56     Log("AliITSDDLModuleMapSDD object not in file.");
57     return 2;
58   }
59
60   //preprocessing
61   TString runType = GetRunType();
62   Bool_t retcode;
63   Char_t command[100];
64   Char_t inpFileName[100];
65   AliCDBMetaData *md1= new AliCDBMetaData();
66   md1->SetResponsible("Francesco Prino");
67   md1->SetBeamPeriod(0);
68   md1->SetAliRootVersion("head 30 November 2007"); //root version
69   md1->SetComment("This is a test");
70
71   if (runType == "PULSER"){
72     TObjArray calSDD(kNumberOfSDD);
73     calSDD.SetOwner(kFALSE);
74     Float_t baseline,rawnoise,cmn,corn,gain;
75     Int_t isgoodan,i,im,is,isgoodmod,basmin,basoff;
76     Int_t numOfBadChannels[kNumberOfSDD];
77   
78     TList* sourceList = GetFileSources(kDAQ, "SDD_Calib");
79     if (!sourceList){ 
80       Log("Error: no sources found for SDD_Calib");
81       return 2;
82     }
83
84     Int_t ind = 0;
85     while (sourceList->At(ind)!=NULL) {
86       TObjString* tarId = (TObjString*) sourceList->At(ind);
87       TString tarName = GetFile(kDAQ, "SDD_Calib", tarId->GetString().Data());
88       if(tarName.Length()==0){
89         Log(Form("Baseline tar file from source %d not found.",ind));
90         return 2;
91       }
92       sprintf(command,"tar -xf %s",tarName.Data());
93       gSystem->Exec(command);
94       ind++;
95     }
96     delete sourceList;
97
98     for(Int_t iddl=0;iddl<kNumberOfDDL;iddl++){
99       for(Int_t imod=0;imod<kModulesPerDDL;imod++){
100         Int_t modID=ddlmap->GetModuleNumber(iddl,imod);
101         if(modID==-1) continue;
102         modID-=240; // to have SDD modules numbering from 0 to 260
103         AliITSCalibrationSDD *cal = new AliITSCalibrationSDD("simulated");
104         numOfBadChannels[modID]=0;
105         Int_t badch[kNumberOfChannels];
106         for(Int_t isid=0;isid<=1;isid++){
107           sprintf(inpFileName,"./SDDbase_ddl%02dc%02d_sid%d.data",iddl,imod,isid);
108           FILE* basFil = fopen(inpFileName,"read");
109           if (basFil == 0) {
110             Log(Form("File %s not found.",inpFileName));
111             cal->SetDead();
112             continue;
113           }
114           fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod);
115           if(!isgoodmod) cal->SetDead();
116           for(Int_t ian=0;ian<(kNumberOfChannels/2);ian++){
117             fscanf(basFil,"%d %d %f %d %d %f %f %f %f\n",&i,&isgoodan,&baseline,&basmin,&basoff,&rawnoise,&cmn,&corn,&gain);
118             Int_t ich=ian;
119             if(isid==1) ich+=256;
120             if(!isgoodan){ 
121               Int_t ibad=numOfBadChannels[modID];
122               badch[ibad]=ich;
123               numOfBadChannels[modID]++;
124             }
125             cal->SetBaseline(ich,baseline);
126             cal->SetNoiseAfterElectronics(ich,rawnoise);
127             Int_t iChip=cal->GetChip(ich);
128             Int_t iChInChip=cal->GetChipChannel(ich);
129             cal->SetGain(gain,isid,iChip,iChInChip);
130           }
131           cal->SetDeadChannels(numOfBadChannels[modID]);
132           for(Int_t ibad=0;ibad<numOfBadChannels[modID];ibad++){
133             cal->SetBadChannel(ibad,badch[ibad]);
134           }
135           fclose(basFil);
136         }
137         calSDD.AddAt(cal,modID);
138       }
139     }
140     md1->SetObjectClassName("AliITSCalibration");
141     retcode = Store("Calib","CalibSDD",&calSDD,md1, 0, kTRUE);
142   }else if(runType== "INJECTOR"){
143
144     TObjArray vdrift(2*kNumberOfSDD);
145     vdrift.SetOwner(kFALSE);
146     Int_t evNumb,polDeg; 
147     UInt_t timeStamp;
148     Float_t param[4];
149
150     TList* sourceList = GetFileSources(kDAQ, "SDD_Injec");
151     if (!sourceList){ 
152       Log("Error: no sources found for SDD_Injec");
153       return 2;
154     }
155     Int_t ind = 0;
156     while (sourceList->At(ind)!=NULL) {
157       TObjString* tarId = (TObjString*) sourceList->At(ind);
158       TString tarName = GetFile(kDAQ, "SDD_Injec", tarId->GetString().Data());
159       if(tarName.Length()==0){
160         Log(Form("Injector tar file from source %d not found.",ind));
161         return 2;
162       }
163       sprintf(command,"tar -xf %s",tarName.Data());
164       gSystem->Exec(command);
165       ind++;
166     }
167     delete sourceList;
168
169     for(Int_t iddl=0;iddl<kNumberOfDDL;iddl++){
170       for(Int_t imod=0;imod<kModulesPerDDL;imod++){
171         Int_t modID=ddlmap->GetModuleNumber(iddl,imod);
172         if(modID==-1) continue;
173         modID-=240; // to have SDD modules numbering from 0 to 260
174         for(Int_t isid=0;isid<=1;isid++){
175           AliITSDriftSpeedArraySDD *arr=new AliITSDriftSpeedArraySDD();
176           sprintf(inpFileName,"./SDDinj_ddl%02dc%02d_sid%d.data",iddl,imod,isid);
177           FILE* injFil = fopen(inpFileName,"read");
178           if (injFil == 0) {
179             Log(Form("File %s not found.",inpFileName));
180             AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD();
181             arr->AddDriftSpeed(dsp);
182             vdrift.AddAt(arr,2*modID+isid);
183             continue; 
184           }
185           fscanf(injFil,"%d",&polDeg);
186           while (!feof(injFil)){
187             fscanf(injFil,"%d %d",&evNumb,&timeStamp);
188             if(feof(injFil)) break;
189             for(Int_t ic=0;ic<4;ic++) fscanf(injFil,"%f",&param[ic]);
190             AliITSDriftSpeedSDD *dsp=new AliITSDriftSpeedSDD(evNumb,timeStamp,polDeg,param);
191             arr->AddDriftSpeed(dsp);
192           }
193           vdrift.AddAt(arr,2*modID+isid);
194         }
195       }
196     }
197     md1->SetObjectClassName("AliITSDriftSpeedArraySDD");
198     retcode = Store("Calib","DriftSpeedSDD",&vdrift,md1,0, kTRUE);    
199   }else{
200     // do nothing for other run types
201     retcode=1;
202   }
203   if(retcode){
204     // process DCS data
205     AliITSDCSAnalyzerSDD *dcs=new AliITSDCSAnalyzerSDD();
206     dcs->AnalyzeData(dcsAliasMap);
207     TObjArray refDCS(kNumberOfSDD);
208     refDCS.SetOwner(kFALSE);
209     for(Int_t imod=0;imod<kNumberOfSDD;imod++){
210       AliITSDCSDataSDD *dcsdata=dcs->GetDCSData(imod);
211       refDCS.Add(dcsdata);
212     }
213     
214     AliCDBMetaData *mddcs= new AliCDBMetaData();
215     mddcs->SetResponsible("Francesco Prino");
216     mddcs->SetBeamPeriod(0);
217     mddcs->SetAliRootVersion("head 18 December 2007"); //root version
218     mddcs->SetComment("This is a test");
219     mddcs->SetObjectClassName("AliITSDCSDataSDD");
220     Int_t retcodedcs = StoreReferenceData("DCS","DataSDD",&refDCS,mddcs);
221     
222     if(retcodedcs) return 0;
223   }
224   return 1;
225 }