]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDPedestalDA.cxx
Coding violations corrected.
[u/mrichter/AliRoot.git] / FMD / AliFMDPedestalDA.cxx
index c9396728ad66cc8dae290661c466f52626d459e0..e69d4cb760d819fddf5307c990b7b30d2bc0454e 100644 (file)
 
 #include "AliFMDPedestalDA.h"
 #include "AliFMDAltroMapping.h"
-#include "iostream"
-#include "fstream"
+#include <iostream>
+#include <fstream>
 #include "AliLog.h"
 #include "TF1.h"
 #include "TObject.h"
 #include "TMath.h"
+#include <TSystem.h>
+#include <TDatime.h>
+#include <TH2.h>
 
 //_____________________________________________________________________
 ClassImp(AliFMDPedestalDA)
 
 //_____________________________________________________________________
-AliFMDPedestalDA::AliFMDPedestalDA() : AliFMDBaseDA(),
-  fCurrentChannel(1),
-  fPedSummary("PedestalSummary","pedestals",51200,0,51200),
-  fNoiseSummary("NoiseSummary","noise",51200,0,51200),
-  fZSfileFMD1(),
-  fZSfileFMD2(),
-  fZSfileFMD3(), 
-  fMinTimebin(3 * 4 * 3 * 16), // 3 ddls, 4 FECs, 3 Altros, 16 channels
-  fMaxTimebin(3 * 4 * 3 * 16)  // 3 ddls, 4 FECs, 3 Altros, 16 channels
+AliFMDPedestalDA::AliFMDPedestalDA() 
+  : AliFMDBaseDA(),
+    fCurrentChannel(1),
+    fPedSummary("PedestalSummary","pedestals",51200,0,51200),
+    fNoiseSummary("NoiseSummary","noise",51200,0,51200),
+    fZSfileFMD1(),
+    fZSfileFMD2(),
+    fZSfileFMD3(), 
+    fMinTimebin(3 * 4 * 3 * 16), // 3 ddls, 4 FECs, 3 Altros, 16 channels
+    fMaxTimebin(3 * 4 * 3 * 16), // 3 ddls, 4 FECs, 3 Altros, 16 channels
+    fSummaryFMD1i(0),
+    fSummaryFMD2i(0),
+    fSummaryFMD2o(0),
+    fSummaryFMD3i(0),
+    fSummaryFMD3o(0)
 {
   // Default constructor 
+  Rotate("peds.csv", 3);
   fOutputFile.open("peds.csv");
+  Rotate("ddl3072.csv", 10);
   fZSfileFMD1.open("ddl3072.csv");
+  Rotate("ddl3073.csv", 10);
   fZSfileFMD2.open("ddl3073.csv");
+  Rotate("ddl3074.csv", 10);
   fZSfileFMD3.open("ddl3074.csv");  
 }
 
@@ -67,7 +80,12 @@ AliFMDPedestalDA::AliFMDPedestalDA(const AliFMDPedestalDA & pedDA) :
   fZSfileFMD2(),
   fZSfileFMD3(),
   fMinTimebin(pedDA.fMinTimebin),
-  fMaxTimebin(pedDA.fMaxTimebin)
+  fMaxTimebin(pedDA.fMaxTimebin),
+  fSummaryFMD1i(pedDA.fSummaryFMD1i),
+  fSummaryFMD2i(pedDA.fSummaryFMD2i),
+  fSummaryFMD2o(pedDA.fSummaryFMD2o),
+  fSummaryFMD3i(pedDA.fSummaryFMD3i),
+  fSummaryFMD3o(pedDA.fSummaryFMD3o)
 {
   // Copy constructor 
 }
@@ -85,6 +103,8 @@ void AliFMDPedestalDA::Init()
   SetRequiredEvents(1000);
   fMinTimebin.Reset(1024);
   fMaxTimebin.Reset(-1);
+
+
 }
 
 //_____________________________________________________________________
@@ -141,6 +161,38 @@ void AliFMDPedestalDA::FillChannels(AliFMDDigit* digit)
   
 }
 
+//_____________________________________________________________________
+void AliFMDPedestalDA::MakeSummary(UShort_t det, Char_t ring)
+{
+  //Create summary hists for FMD pedestals
+  std::cout << "Making summary for FMD" << det << ring << " ..." << std::endl;
+  switch (det) { 
+  case 1: 
+    fSummaryFMD1i = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+    break;
+  case 2:
+    switch (ring) { 
+    case 'I': case 'i':
+      fSummaryFMD2i = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+      break;
+    case 'O': case 'o':
+      fSummaryFMD2o = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+      break;
+    }
+    break;
+  case 3:
+    switch (ring) { 
+    case 'I': case 'i':
+      fSummaryFMD3i = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+      break;
+    case 'O': case 'o':
+      fSummaryFMD3o = MakeSummaryHistogram("ped", "Pedestals", det, ring);
+      break;
+    }
+    break;
+  }
+}
+
 //_____________________________________________________________________
 void AliFMDPedestalDA::Analyse(UShort_t det, 
                               Char_t   ring, 
@@ -156,6 +208,28 @@ void AliFMDPedestalDA::Analyse(UShort_t det,
   //     sec   Sector 
   //     strip Strip.
   AliFMDParameters* pars     = AliFMDParameters::Instance();
+  TH2* summary = 0;
+  switch (det) { 
+  case 1: summary = fSummaryFMD1i; break;
+  case 2: 
+    switch (ring) { 
+    case 'I':  summary = fSummaryFMD2i; break;
+    case 'O':  summary = fSummaryFMD2o; break;
+    }
+    break;
+  case 3:
+    switch (ring) { 
+    case 'I':  summary = fSummaryFMD3i; break;
+    case 'O':  summary = fSummaryFMD3o; break;
+    }
+    break;
+  }
+  static bool first = true;
+  if (summary && first) { 
+    std::cout << "Filling summary " << summary->GetName() << std::endl;
+    first = false;
+  }
+
   // Float_t           factor   = pars->GetPedestalFactor();
   UInt_t            samples  = pars->GetSampleRate(det, ring, sec, strip);
   for (UShort_t sample = 0; sample < samples; sample++) {
@@ -208,7 +282,7 @@ void AliFMDPedestalDA::Analyse(UShort_t det,
            << channel << ',' 
            << timebin << ','
            << mean    << ',' 
-           << rms     << "\n"; break;
+           << rms     << "\n";
     
     Float_t chi2ndf = 0;
     
@@ -233,7 +307,13 @@ void AliFMDPedestalDA::Analyse(UShort_t det,
                << fitFunc.GetParameter(1)     << ','
                << fitFunc.GetParameter(2)     << ','
                << chi2ndf                     <<"\n";
-    
+
+    if (summary) { 
+      Int_t bin = summary->FindBin(sec, strip);
+      summary->SetBinContent(bin, mean);
+      summary->SetBinError(bin, rms);
+    }
+
     if(fSaveHistograms  ) {
       gDirectory->cd(GetSectorPath(det, ring, sec, kTRUE));
       TH1F* sumPed   = dynamic_cast<TH1F*>(gDirectory->Get("Pedestals"));
@@ -292,14 +372,23 @@ void AliFMDPedestalDA::Terminate(TFile* diagFile)
     fNoiseSummary.Write();
   }
   AliFMDAltroMapping* map = AliFMDParameters::Instance()->GetAltroMap();
-  if(fZSfileFMD1.is_open()) FillinTimebins(fZSfileFMD1, map->Detector2DDL(1));
-  if(fZSfileFMD2.is_open()) FillinTimebins(fZSfileFMD2, map->Detector2DDL(2));
-  if(fZSfileFMD3.is_open()) FillinTimebins(fZSfileFMD3, map->Detector2DDL(3));
+  for (Int_t i = 0; i < 3; i++) { 
+    std::ofstream& out = (i == 0 ? fZSfileFMD1 : 
+                         i == 1 ? fZSfileFMD2 : 
+                         fZSfileFMD3);
+    if (out.is_open() && fSeenDetectors[i]) { 
+      FillinTimebins(out, map->Detector2DDL(i+1));
+    }
+    if (!fSeenDetectors[i]) {
+      TString n(Form("ddl%d.csv",3072+map->Detector2DDL(i+1)));
+      gSystem->Unlink(n.Data());
+    }
+  }
   
 }
 
 //_____________________________________________________________________
-void AliFMDPedestalDA::FillinTimebins(std::ofstream& out, UShort_t ddl)
+void AliFMDPedestalDA::FillinTimebins(std::ofstream& out, UShort_t /*ddl*/)
 {
 #if 0
   unsigned short  boards[] = { 0x0, 0x1, 0x10, 0x11, 0xFFFF };
@@ -348,6 +437,9 @@ void AliFMDPedestalDA::WriteHeaderToFile()
   // Write headers to output files 
   AliFMDParameters* pars       = AliFMDParameters::Instance();
   fOutputFile.write(Form("# %s \n",pars->GetPedestalShuttleID()),13);
+  TDatime now;
+  fOutputFile << "# This file created from run # " << fRunno 
+             << " @ " << now.AsString() << std::endl;
   fOutputFile.write("# Detector, "
                    "Ring, "
                    "Sector, "
@@ -359,14 +451,17 @@ void AliFMDPedestalDA::WriteHeaderToFile()
                    "Chi2/NDF \n", 71);
 
   std::ostream* zss[] = { &fZSfileFMD1, &fZSfileFMD2, &fZSfileFMD3, 0 };
-  for (size_t i = 0; i < 3; i++) 
-    *(zss[i]) << "# FMD 1 pedestals \n"
+  for (size_t i = 0; i < 3; i++)  {
+    *(zss[i]) << "# FMD " << (i+1) << " pedestals \n"
              << "# board, "
              << "altro, "
              << "channel, "
              << "timebin, "
              << "pedestal, "
              << "noise\n";
+    *(zss[i]) << "# This file created from run # " << fRunno 
+             << " @ " << now.AsString() << std::endl;
+  }
 }
 
 //_____________________________________________________________________