]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDPreprocessor.cxx
Define default values of cluster resolution per chamber in the
[u/mrichter/AliRoot.git] / FMD / AliFMDPreprocessor.cxx
index 9af160770393ce90fdd5dd759ea47c80a02ff129..388611ce4750b1ac0c0bf771f65540939ec3150d 100644 (file)
 //                       error   Error on gain
 //                       chi2    Chi^2 per degrees of freedom of fit
 //                  
+// See also 
+//
+//   http://aliceinfo.cern.ch/Offline/Activities/Shuttle.html
+//
 // Latest changes by Christian Holm Christensen
 //
 
-// #include <iostream>
+ #include <iostream>
 
 #include <fstream>
 #include "AliFMDPreprocessor.h"
@@ -79,6 +83,18 @@ ClassImp(AliFMDPreprocessor)
 ;
 #endif 
 
+
+//____________________________________________________
+AliFMDPreprocessor::AliFMDPreprocessor(AliShuttleInterface* shuttle)
+  : AliPreprocessor("FMD", shuttle)
+{
+  AddRunType("PHYSICS");
+  AddRunType("STANDALONE");
+  AddRunType("PEDESTAL");
+  AddRunType("GAIN");
+}
+
+
 //____________________________________________________
 Bool_t AliFMDPreprocessor::GetAndCheckFileSources(TList*&     list,
                                                  Int_t       system, 
@@ -120,8 +136,13 @@ UInt_t AliFMDPreprocessor::Process(TMap* /* dcsAliasMap */)
   // Parameters: 
   //    dcsAliassMap   Map of DCS data point aliases.
   // Return 
-  //    ? 
-
+  //    0 on success, >0 otherwise 
+  Bool_t resultPed   = kTRUE;
+  Bool_t resultGain  = kTRUE;
+  Bool_t resultRange = kTRUE;
+  Bool_t resultRate  = kTRUE;
+  Bool_t resultZero  = kTRUE;
+  Bool_t infoCalib   = kTRUE;
   // Do we need this ?
   // if(!dcsAliasMap) return 1;
   // 
@@ -131,32 +152,42 @@ UInt_t AliFMDPreprocessor::Process(TMap* /* dcsAliasMap */)
   // cdb->SetRun(0);
   AliFMDParameters* pars = AliFMDParameters::Instance();
   pars->Init(this, false, AliFMDParameters::kAltroMap);
-
   // This is if the SOR contains Fee parameters, and we run a DA to
   // extract these parameters.   The same code could work if we get
   // the information from DCS via the FXS 
   TList* files = 0;
-  GetAndCheckFileSources(files, kDAQ,"info");
-  // if (!ifiles) return 1;
   AliFMDCalibSampleRate*      calibRate  = 0;
   AliFMDCalibStripRange*      calibRange = 0;
   AliFMDCalibZeroSuppression* calibZero  = 0;
-  GetInfoCalibration(files, calibRate, calibRange, calibZero);
   
-  // Gt the run type 
+  if (GetAndCheckFileSources(files, kDAQ,pars->GetConditionsShuttleID()))
+    infoCalib = GetInfoCalibration(files, calibRate, calibRange, calibZero);
+  resultRate  = (!calibRate  ? kFALSE : kTRUE);
+  resultRange = (!calibRange ? kFALSE : kTRUE);
+  resultZero  = (!calibZero  ? kFALSE : kTRUE);
+  
+
+  // Get the run type 
   TString runType(GetRunType()); 
 
   //Creating calibration objects
   AliFMDCalibPedestal* calibPed  = 0;
   AliFMDCalibGain*     calibGain = 0;
-  if (runType.Contains("PEDESTAL", TString::kIgnoreCase) && 
-      GetAndCheckFileSources(files, kDAQ, "pedestal"))  
-    calibPed = GetPedestalCalibration(files);
-  if (runType.Contains("PULSER", TString::kIgnoreCase) && 
-      GetAndCheckFileSources(files, kDAQ, "gain"))
-    calibGain = GetGainCalibration(files);
-
-  
+  if (runType.Contains("PEDESTAL", TString::kIgnoreCase)) { 
+    if (GetAndCheckFileSources(files, kDAQ, pars->GetPedestalShuttleID())) {
+      if(files->GetSize())
+       calibPed = GetPedestalCalibration(files);
+    }
+    resultPed = (calibPed ? kTRUE : kFALSE);
+  }
+  if (runType.Contains("GAIN", TString::kIgnoreCase)) {
+    if (GetAndCheckFileSources(files, kDAQ, pars->GetGainShuttleID())) {
+      if(files->GetSize())
+       calibGain = GetGainCalibration(files);
+    }
+    resultGain = (calibGain ? kTRUE : kFALSE);
+  }
   
   //Storing Calibration objects  
   AliCDBMetaData metaData;
@@ -164,42 +195,32 @@ UInt_t AliFMDPreprocessor::Process(TMap* /* dcsAliasMap */)
   metaData.SetResponsible("Hans H. Dalsgaard");
   metaData.SetComment("Preprocessor stores pedestals and gains for the FMD.");
   
-  Bool_t resultPed   = kFALSE;
-  Bool_t resultGain  = kFALSE;
-  Bool_t resultRange = kFALSE;
-  Bool_t resultRate  = kFALSE;
-  Bool_t resultZero  = kFALSE;
   if(calibPed)  { 
-    resultPed  = Store("Calib","Pedestal", calibPed, &metaData);
+    resultPed  = Store("Calib","Pedestal", calibPed, &metaData, 0, kTRUE);
     delete calibPed;
   }
   if(calibGain) { 
-    resultGain = Store("Calib","PulseGain", calibGain, &metaData);
+    resultGain = Store("Calib","PulseGain", calibGain, &metaData, 0, kTRUE);
     delete calibGain;
   }
   if(calibRange) { 
-    resultRange = Store("Calib","StripRange", calibRange, &metaData);
+    resultRange = Store("Calib","StripRange", calibRange, &metaData, 0, kTRUE);
     delete calibRange;
   }
   if(calibRate) { 
-    resultRate = Store("Calib","SampleRate", calibRate, &metaData);
+    resultRate = Store("Calib","SampleRate", calibRate, &metaData, 0, kTRUE);
     delete calibRate;
   }
   if(calibZero) { 
-    resultZero = Store("Calib","ZeroSuppression", calibZero, &metaData);
+    resultZero = Store("Calib","ZeroSuppression", calibZero,&metaData,0,kTRUE);
     delete calibZero;
   }
+
+  Bool_t success = (resultPed && resultGain  && resultRange && 
+                   resultRate  && resultZero && infoCalib);
   
-  return (resultPed && resultGain ? 0 : 1);
-#if 0
-  // Disabled until we implement GetInfoCalibration properly
-  return (resultPed   && 
-         resultGain  && 
-         resultRange && 
-         resultRate  &&
-         resultZero 
-         ? 0 : 1);
-#endif
+  Log(Form("FMD preprocessor was %s", (success ? "successful" : "failed")));
+  return (success ? 0 : 1);
 }
 
 //____________________________________________________________________
@@ -217,24 +238,26 @@ AliFMDPreprocessor::GetInfoCalibration(TList* files,
   //     z     On return, newly allocated object 
   // Return: 
   //     kTRUE on success
-  if (!files) return kTRUE; // Should really be false
-  if (files->GetEntries() <= 0) return kTRUE;
+  if (!files) return kFALSE; // Should really be false
+  if (files->GetEntries() <= 0) return kFALSE;
   
   s = new AliFMDCalibSampleRate();
   r = new AliFMDCalibStripRange();
   z = new AliFMDCalibZeroSuppression();
   
-  // AliFMDParameters*    pars     = AliFMDParameters::Instance();
+  AliFMDParameters*    pars     = AliFMDParameters::Instance();
   TIter                iter(files);
   TObjString*          fileSource;
 
   while((fileSource = dynamic_cast<TObjString*>(iter.Next()))) {
-    const Char_t* filename = GetFile(kDAQ, "info", fileSource->GetName());
+    const Char_t* filename = GetFile(kDAQ, pars->GetConditionsShuttleID(), fileSource->GetName());
     std::ifstream in(filename);
     if(!in) {
-      AliError(Form("File %s not found!", filename));
+      Log(Form("File %s not found!", filename));
       continue;
     }
+    s->ReadFromFile(in);
+    r->ReadFromFile(in);
   }
   return kTRUE;
 }
@@ -259,10 +282,10 @@ AliFMDPreprocessor::GetPedestalCalibration(TList* pedFiles)
   TObjString*          fileSource;
   
   while((fileSource = dynamic_cast<TObjString*>(iter.Next()))) {
-    const Char_t* filename = GetFile(kDAQ, "pedestal", fileSource->GetName());
+    const Char_t* filename = GetFile(kDAQ, pars->GetPedestalShuttleID(), fileSource->GetName());
     std::ifstream in(filename);
     if(!in) {
-      AliError(Form("File %s not found!", filename));
+      Log(Form("File %s not found!", filename));
       continue;
     }
 
@@ -270,8 +293,8 @@ AliFMDPreprocessor::GetPedestalCalibration(TList* pedFiles)
     TString header;
     header.ReadLine(in);
     header.ToLower();
-    if(!header.Contains("pedestal")) {
-      AliError("File header is not from pedestal!");
+    if(!header.Contains(pars->GetPedestalShuttleID())) {
+      Log("File header is not from pedestal!");
       continue;
     }
     Log("File contains data from pedestals");
@@ -281,37 +304,41 @@ AliFMDPreprocessor::GetPedestalCalibration(TList* pedFiles)
     header.ReadLine(in);
     
     // Loop until EOF
-    while(!in.eof()) {
+    while(in.peek()!=EOF) {
       if(in.bad()) { 
-       AliError(Form("Bad read at line %d in %s", lineno, filename));
+       Log(Form("Bad read at line %d in %s", lineno, filename));
        break;
       }
-      UInt_t ddl=2, board, chip, channel, strip, tb;
+      UShort_t det, sec, strip;
+      Char_t ring;
       Float_t ped, noise, mu, sigma, chi2ndf;
-      Char_t c[10];
+      Char_t c[8];
          
-      in // >> ddl      >> c[0] 
-        >> board    >> c[1]
-        >> chip     >> c[2]
-        >> channel  >> c[3]
-        >> strip    >> c[4]
-        >> tb       >> c[5]
-        >> ped      >> c[6]
-        >> noise    >> c[7]
-        >> mu       >> c[8]
-        >> sigma    >> c[9]
+      in >> det      >> c[0] 
+        >> ring     >> c[1]
+        >> sec      >> c[2]
+        >> strip    >> c[3]
+        >> ped      >> c[4]
+        >> noise    >> c[5]
+        >> mu       >> c[6]
+        >> sigma    >> c[7]
         >> chi2ndf;
       lineno++;
+      
       // Ignore trailing garbage 
-      if (strip > 127) continue;
+      // if (strip > 127) continue;
       
+      //Setting DDL to comply with the FMD in DAQ
+      // UInt_t FmdDDLBase = 3072; 
+      // ddl = ddl - FmdDDLBase;
       //Setting the pedestals via the hardware address
-      UShort_t det, sec, str;
-      Char_t ring;
-         
-      pars->Hardware2Detector(ddl,board,chip,channel,det,ring,sec,str);
-      strip += str;
+      
+      
+      // pars->Hardware2Detector(ddl,board,chip,channel,det,ring,sec,str);
+      // strip += str;
+     
       calibPed->Set(det,ring,sec,strip,ped,noise);
+     
     }
   }
   return calibPed;
@@ -335,10 +362,10 @@ AliFMDPreprocessor::GetGainCalibration(TList* gainFiles)
   TIter             iter(gainFiles);
   TObjString*       fileSource;
   while((fileSource = dynamic_cast<TObjString *>(iter.Next()))) {
-    const Char_t* filename = GetFile(kDAQ, "gain", fileSource->GetName());
+    const Char_t* filename = GetFile(kDAQ, pars->GetGainShuttleID(), fileSource->GetName());
     std::ifstream in(filename);
     if(!in) {
-      AliError(Form("File %s not found!", filename));
+      Log(Form("File %s not found!", filename));
       continue;
     }
 
@@ -346,8 +373,8 @@ AliFMDPreprocessor::GetGainCalibration(TList* gainFiles)
     TString header;
     header.ReadLine(in);
     header.ToLower();
-    if(!header.Contains("gain")) {
-      AliError("File header is not from gain!");
+    if(!header.Contains(pars->GetGainShuttleID())) {
+      Log("File header is not from gain!");
       continue;
     }
     Log("File contains data from pulse gain");
@@ -357,33 +384,35 @@ AliFMDPreprocessor::GetGainCalibration(TList* gainFiles)
 
     int lineno  = 2;
     // Read until EOF 
-    while(!in.eof()) {
+    while(in.peek()!=EOF) {
       if(in.bad()) { 
-       AliError(Form("Bad read at line %d in %s", lineno, filename));
+       Log(Form("Bad read at line %d in %s", lineno, filename));
        break;
       }
-      UInt_t ddl=2, board, chip, channel, strip;
+      UShort_t det, sec, strip;
+      Char_t ring;
+      
       Float_t gain,error,  chi2ndf;
-      Char_t c[7];
-             
-      in // >> ddl      >> c[0] 
-        >> board    >> c[1]
-        >> chip     >> c[2]
-        >> channel  >> c[3]
-        >> strip    >> c[4]
-        >> gain     >> c[5]
-        >> error    >> c[6]
+      Char_t c[6];
+      
+      in >> det      >> c[0] 
+        >> ring     >> c[1]
+        >> sec      >> c[2]
+        >> strip    >> c[3]
+        >> gain     >> c[4]
+        >> error    >> c[5]
         >> chi2ndf;
       lineno++;
       // Ignore trailing garbage
-      if(strip > 127) continue;
+      //if(strip > 127) continue;
       
+      //Setting DDL to comply with the FMD in DAQ
+      // UInt_t FmdDDLBase = 3072; 
+      // ddl = ddl - FmdDDLBase;
       //Setting the pedestals via the hardware address
-      UShort_t det, sec, str;
-      Char_t ring;
-      pars->Hardware2Detector(ddl,board,chip,channel,det,ring,sec,str);
+      //   pars->Hardware2Detector(ddl,board,chip,channel,det,ring,sec,str);
 
-      strip += str;
+      // strip += str;
       calibGain->Set(det,ring,sec,strip,gain);
     }
   }