]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSPreprocessorSDD.cxx
Run number initialized to -1.
[u/mrichter/AliRoot.git] / ITS / AliITSPreprocessorSDD.cxx
index a0c6d7d808ba1f3c684431229f4bd9be536bf018..8cdefee4258223f53286eff276d1cb5631b44d79 100644 (file)
@@ -1,21 +1,25 @@
 /////////////////////////////////////////
 // Class for SDD digits preprocessing  //
+//                                     //
+//                                     //
 ////////////////////////////////////////
 
+/* $Id$ */
+
 #include "AliITSPreprocessorSDD.h"
 #include "AliITSCalibrationSDD.h"
 #include "AliShuttleInterface.h"
 #include "AliCDBMetaData.h"
 #include "TObjArray.h"
-#include "TH1F.h"
 #include "AliLog.h"
-#include "TFile.h"
+#include <TObjString.h>
+#include <TSystem.h>
+#include <TList.h>
 
 const Int_t AliITSPreprocessorSDD::fgkNumberOfSDD = 260;
 const Int_t AliITSPreprocessorSDD::fgkNumberOfChannels = 512;
-const char* AliITSPreprocessorSDD::fgkNameHistoPedestals ="hpedestal";
-const char* AliITSPreprocessorSDD::fgkNameHistoNoise="hnoise";
-
+const TString AliITSPreprocessorSDD::fgkNameHistoPedestals = "hpedestal";
+const TString AliITSPreprocessorSDD::fgkNameHistoNoise = "hnoise";
 ClassImp(AliITSPreprocessorSDD)
 
 
@@ -23,77 +27,122 @@ UInt_t AliITSPreprocessorSDD::Process(TMap*/* dcsAliasMap*/){
 
   //preprocessing. 
 
-  UInt_t result = 0;
-  const char* filename = GetFile(kDAQ,"PEDESTALS","GDC");
-  const char* filenamen= GetFile(kDAQ,"NOISE","GDC");
-  const char* filenamed= GetFile(kDAQ,"DEADCHANNELS","GDC");
-  TFile* f1 = TFile::Open(filename,"r");
-  TFile* f2 = TFile::Open(filenamen,"r");
-  Char_t namehisto[20];
-  Char_t namehisto2[20];
-
-  FILE* filed = fopen(filenamed,"read");
+  TObjArray respSDD(fgkNumberOfSDD);
+  respSDD.SetOwner(kFALSE);
+  Float_t baseline,rawnoise,cmn,corn,gain;
+  Int_t isgoodan,i,im,is,isgoodmod;
   Int_t numOfBadChannels[fgkNumberOfSDD];
-  Int_t** badCh = new Int_t*[fgkNumberOfSDD];
+  //TString pwd = gSystem->pwd();
+//  const Char_t* tempDir=AliShuttleInterface::GetShuttleTempDir();
   
-  Char_t row[50];
-  Int_t nSDD=0;
-  Char_t str[20];
-  char dims[1];
-  Int_t dim;
-  sprintf(str,"MODULE=%d",0);
-  while(!feof(filed)){
-    fscanf(filed,"%s\n",row);
-    if(strcmp(row,str)==0){
-      fscanf(filed,"%s %d\n",dims,&dim);
-      badCh[nSDD] = new Int_t[dim];
-      numOfBadChannels[nSDD]=dim;
-      for(Int_t ibad=0;ibad<dim;ibad++){
-       fscanf(filed,"%d\n",&badCh[nSDD][ibad]);
-      }      
-    }
-    nSDD++;
-    sprintf(str,"MODULE=%d",nSDD);
+  TList* sourceList = GetFileSources(kDAQ, "SDD_Calib");
+  if (!sourceList){ 
+    Log("Error: no sources found for SDD_Calib");
+    return 2;
   }
-  
 
+  Int_t ind = 0;
+  Char_t command[100];
+  while (sourceList->At(ind)!=NULL) {
+    TObjString* tarId = (TObjString*) sourceList->At(ind);
+    TString tarName = GetFile(kDAQ, "SDD_Calib", tarId->GetString().Data());
+//    gSystem->cd(tempDir);
+    if(tarName.Length()==0){
+      Log(Form("Baseline tar file from source %d not found.",ind));
+      return 2;
+    }
+    sprintf(command,"tar -xf %s",tarName.Data());
+    gSystem->Exec(command);
+    ind++;
+  }
+   
+  sourceList = GetFileSources(kDAQ, "SDD_Injec");
+  if (!sourceList){ 
+    Log("Error: no sources found for SDD_Injec");
+    return 2;
+  }
 
-  AliCDBMetaData *md1= new AliCDBMetaData(); // metaData describing the object
-  md1->SetObjectClassName("AliITSCalibration");
-  md1->SetResponsible("Elisabetta Crescio");
-  md1->SetBeamPeriod(0);
-  md1->SetAliRootVersion("head September 2005"); //root version
-  md1->SetComment("This is a test");
-
-  TObjArray respSDD(260);
-  respSDD.SetOwner(kFALSE);
+  ind = 0;
+  while (sourceList->At(ind)!=NULL) {
+   TObjString* tarId = (TObjString*) sourceList->At(ind);
+   TString tarName = GetFile(kDAQ, "SDD_Injec", tarId->GetString().Data());
+//    gSystem->cd(tempDir);
+    if(tarName.Length()==0){
+      Log(Form("Injector tar file from source %d not found.",ind));
+      return 2;
+    }
+    sprintf(command,"tar -xf %s",tarName.Data());
+    gSystem->Exec(command);
+    ind++;
+  }
   
+  delete sourceList;
+
   for(Int_t imod=0;imod<fgkNumberOfSDD;imod++){
     AliITSCalibrationSDD *cal = new AliITSCalibrationSDD("simulated");
-    cal->SetDeadChannels(numOfBadChannels[imod]);
-    for(Int_t ich=0;ich<numOfBadChannels[imod];ich++){
-      cal->SetBadChannel(ich,badCh[imod][ich]);
-    }
-    sprintf(namehisto,"%s_%d",fgkNameHistoPedestals,imod);
-    sprintf(namehisto2,"%s_%d",fgkNameHistoNoise,imod);
-    TH1F* hbas = (TH1F*)f1->Get(namehisto);
-    TH1F* hnoi = (TH1F*)f2->Get(namehisto2);
-    for(Int_t ien=0;ien<fgkNumberOfChannels;ien++){
-      cal->SetBaseline(ien,hbas->GetBinContent(ien+1));
-      cal->SetNoiseAfterElectronics(ien,hnoi->GetBinContent(ien+1));
+    numOfBadChannels[imod]=0;
+    Int_t badch[fgkNumberOfChannels];
+    for(Int_t isid=0;isid<=1;isid++){
+      Char_t basFileName[100];
+//      sprintf(basFileName,"%s/SDDbase_mod%03d_sid%d.data",tempDir,imod,isid);
+      sprintf(basFileName,"./SDDbase_mod%03d_sid%d.data",imod,isid);
+      FILE* basFil = fopen(basFileName,"read");
+      if (basFil == 0) {
+       Log(Form("File %s not found.",basFileName));
+       return 2;
+      }      
+      fscanf(basFil,"%d %d %d\n",&im,&is,&isgoodmod);
+      if(!isgoodmod) cal->SetDead();
+      for(Int_t ian=0;ian<(fgkNumberOfChannels/2);ian++){
+       fscanf(basFil,"%d %d %f %f %f %f %f\n",&i,&isgoodan,&baseline,&rawnoise,&cmn,&corn,&gain);
+       Int_t ich=ian;
+       if(isid==1) ich+=256;
+       if(!isgoodan){ 
+         Int_t ibad=numOfBadChannels[imod];
+         numOfBadChannels[imod]++;
+         badch[ibad]=ich;
+       }
+       cal->SetBaseline(ich,baseline);
+       cal->SetNoiseAfterElectronics(ich,rawnoise);
+       Int_t iChip=cal->GetChip(ich);
+       Int_t iChInChip=cal->GetChipChannel(ich);
+       cal->SetGain(gain,isid,iChip,iChInChip);
+      }
+      cal->SetDeadChannels(numOfBadChannels[imod]);
+      for(Int_t ibad=0;ibad<numOfBadChannels[imod];ibad++){
+       cal->SetBadChannel(ibad,badch[ibad]);
+      }
+      fclose(basFil);
+
+      Char_t injFileName[100];
+      Int_t evNumb; 
+      UInt_t timeStamp;
+      Float_t param[4];
+      sprintf(injFileName,"./SDDinj_mod%03d_sid%d.data",imod,isid);
+      FILE* injFil = fopen(injFileName,"read");
+      if (injFil == 0) {
+       Log(Form("File %s not found.",basFileName));
+       return 2;
+      }      
+      while (!feof(injFil)){
+       fscanf(injFil,"%d %d",&evNumb,&timeStamp);
+       if(feof(injFil)) break;
+       for(Int_t ic=0;ic<4;ic++) fscanf(injFil,"%f",&param[ic]);
+       cal->SetDriftSpeedParam(isid,param);
+      }
     }
     respSDD.Add(cal);
   }
 
-  result = Store("Calib","Data",&respSDD,md1);
+  AliCDBMetaData *md1= new AliCDBMetaData(); // metaData describing the object
+  md1->SetObjectClassName("AliITSCalibration");
+  md1->SetResponsible("Elisabetta Crescio, Francesco Prino");
+  md1->SetBeamPeriod(0);
+  md1->SetAliRootVersion("head 5 April 2007"); //root version
+  md1->SetComment("This is a test");
 
-  for(Int_t i=0;i<fgkNumberOfSDD;i++){
-    delete badCh[i];
-  }
-  delete [] badCh;
-  f1->Close();
-  f2->Close();
-  fclose(filed);
-  return result;
+  Bool_t retcode = Store("Calib","CalibSDD",&respSDD,md1, 0, kTRUE);
 
+  if(retcode) return 0;
+  else return 1;
 }