]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - FMD/AliFMDPedestalDA.cxx
Fixed the DA so it picks up the pedestals from the right sample
[u/mrichter/AliRoot.git] / FMD / AliFMDPedestalDA.cxx
index 9ae10b7a3b3b729541dbd28c4851e12f98fa17a0..bb84b771e5b1fcd4cf9779fa9c80ccd10196ce17 100644 (file)
 #include "AliLog.h"
 #include "TF1.h"
 #include "TObject.h"
+#include "TMath.h"
 
 //_____________________________________________________________________
 ClassImp(AliFMDPedestalDA)
 
 //_____________________________________________________________________
 AliFMDPedestalDA::AliFMDPedestalDA() : AliFMDBaseDA(),
-  fCurrentChannel(0),
+  fCurrentChannel(1),
   fPedSummary("PedestalSummary","pedestals",51200,0,51200),
-  fNoiseSummary("NoiseSummary","noise",51200,0,51200)
+  fNoiseSummary("NoiseSummary","noise",51200,0,51200),
+  fZSfileFMD1(),
+  fZSfileFMD2(),
+  fZSfileFMD3()
 {
   fOutputFile.open("peds.csv");
-  
+  fZSfileFMD1.open("ddl3072.csv");
+  fZSfileFMD2.open("ddl3073.csv");
+  fZSfileFMD3.open("ddl3074.csv");  
 }
 
 //_____________________________________________________________________
 AliFMDPedestalDA::AliFMDPedestalDA(const AliFMDPedestalDA & pedDA) : 
   AliFMDBaseDA(pedDA),
-  fCurrentChannel(0),
+  fCurrentChannel(1),
   fPedSummary("PedestalSummary","pedestals",51200,0,51200),
-  fNoiseSummary("NoiseSummary","noise",51200,0,51200)
+  fNoiseSummary("NoiseSummary","noise",51200,0,51200),
+  fZSfileFMD1(),
+  fZSfileFMD2(),
+  fZSfileFMD3()
 {
   
 }
@@ -66,6 +75,8 @@ AliFMDPedestalDA::~AliFMDPedestalDA()
 void AliFMDPedestalDA::Init() 
 { 
   SetRequiredEvents(1000);
+  
 }
 
 //_____________________________________________________________________
@@ -75,11 +86,11 @@ void AliFMDPedestalDA::AddChannelContainer(TObjArray* sectorArray,
                                           UShort_t sec, 
                                           UShort_t strip) 
 {
-#ifdef USE_SAMPLES
   AliFMDParameters* pars        = AliFMDParameters::Instance();
-  Int_t             samples     = pars->GetSampleRate(det, ring, sec, strip);
+  UInt_t             samples     = pars->GetSampleRate(det, ring, sec, strip);
   TObjArray*        sampleArray = new TObjArray(samples);
-  for (size_t sample = 0; sample < samples; sample++) {
+  sampleArray->SetOwner();
+  for (UInt_t sample = 0; sample < samples; sample++) {
     TH1S* hSample = new TH1S(Form("FMD%d%c[%02d,03%d]_%d",
                                  det,ring,sec,strip,sample),
                             Form("FMD%d%c[%02d,%03%d]_%d",
@@ -87,17 +98,11 @@ void AliFMDPedestalDA::AddChannelContainer(TObjArray* sectorArray,
                             1024,-.5,1023.5);
     hSample->SetXTitle("ADC");
     hSample->SetYTitle("Events");
+    hSample->SetDirectory(0);
     sampleArray->AddAt(hSample, sample);
   }
   sectorArray->AddAtAndExpand(sampleArray, strip);
-#else
-  TH1S* hChannel = new TH1S(Form("hFMD%d%c_%d_%d",det,ring,sec,strip),
-                           Form("hFMD%d%c_%d_%d",det,ring,sec,strip),
-                           1024,-.5,1023.5);
   
-  hChannel->SetDirectory(0);
-  sectorArray->AddAtAndExpand(hChannel,strip);
-#endif
 
 }
 
@@ -108,18 +113,14 @@ void AliFMDPedestalDA::FillChannels(AliFMDDigit* digit)
   Char_t   ring  = digit->Ring();
   UShort_t sec   = digit->Sector();
   UShort_t strip = digit->Strip();
-
-#ifdef USE_SAMPLES    
+  
   AliFMDParameters* pars     = AliFMDParameters::Instance();
-  Int_t             samples  = pars->GetSampleRate(det, ring, sec, strip);
-  for (size_t sample = 0; sample < samples; sample++) {
+  UInt_t             samples  = pars->GetSampleRate(det, ring, sec, strip);
+  for (UInt_t sample = 0; sample < samples; sample++) {
     TH1S* hSample = GetChannel(det, ring, sec, strip, sample);
     hSample->Fill(digit->Count(sample));
   }
-#else
-  TH1S* hChannel = GetChannel(det, ring, sec, strip);
-  hChannel->Fill(digit->Counts());
-#endif
+  
 }
 
 //_____________________________________________________________________
@@ -127,93 +128,147 @@ void AliFMDPedestalDA::Analyse(UShort_t det,
                               Char_t   ring, 
                               UShort_t sec, 
                               UShort_t strip) {
-
-  TH1S* hChannel       = GetChannel(det, ring, sec, strip);
-  if(hChannel->GetEntries() == 0) {
-    //  AliWarning(Form("No entries for FMD%d%c, sector %d, strip %d",
-    //                  det,ring,sec,strip));
-    return;
-  }
-  
-  AliDebug(50, Form("Fitting FMD%d%c_%d_%d with %d entries",det,ring,sec,strip,
-                  hChannel->GetEntries()));
-  
-  Float_t mean = hChannel->GetMean();
-  Float_t rms  = hChannel->GetRMS();
-  
-  hChannel->GetXaxis()->SetRangeUser(mean-4*rms,mean+4*rms);
   
-  mean = hChannel->GetMean();
-  rms  = hChannel->GetRMS();
+  AliFMDParameters* pars     = AliFMDParameters::Instance();
+  UInt_t             samples  = pars->GetSampleRate(det, ring, sec, strip);
+  for (UShort_t sample = 0; sample < samples; sample++) {
   
-  hChannel->Fit("gaus","Q0+","",mean-5*rms,mean+5*rms);
-  TF1* fitFunc = hChannel->GetFunction("gaus");
+    TH1S* hChannel       = GetChannel(det, ring, sec, strip,sample);
+    if(hChannel->GetEntries() == 0) {
+      //AliWarning(Form("No entries for FMD%d%c, sector %d, strip %d",
+      //           det,ring,sec,strip));
+      return;
+    }
     
-  Float_t chi2ndf = 0;
-  if(fitFunc->GetNDF())
-    chi2ndf = fitFunc->GetChisquare() / fitFunc->GetNDF();
-
-  fOutputFile << det                         << ','
-             << ring                        << ','
-             << sec                         << ','
-              << strip                       << ','
-             << mean                        << ','
-             << rms                         << ','
-             << fitFunc->GetParameter(1)    << ','
-             << fitFunc->GetParameter(2)    << ','
-             << chi2ndf                     <<"\n";
+    AliDebug(50, Form("Fitting FMD%d%c_%d_%d with %d entries",det,ring,sec,strip,
+                     hChannel->GetEntries()));
+    TF1 fitFunc("fitFunc","gausn",0,300);
+    fitFunc.SetParameters(100,100,1);
+    hChannel->Fit("fitFunc","Q0+","",10,200);
+    
+    Float_t mean = hChannel->GetMean();
+    Float_t rms  = hChannel->GetRMS();
+    
+    
+    
+    hChannel->GetXaxis()->SetRangeUser(mean-5*rms,mean+5*rms);
+    
+    mean = hChannel->GetMean();
+    rms  = hChannel->GetRMS();
   
-  if(fSaveHistograms) {
-    gDirectory->cd(GetSectorPath(det, ring, sec, kTRUE));
-    TH1F* sumPed   = dynamic_cast<TH1F*>(gDirectory->Get("Pedestals"));
-    TH1F* sumNoise = dynamic_cast<TH1F*>(gDirectory->Get("Noise"));
-    Int_t nStr = (ring == 'I' ? 512 : 256);
-    if (!sumPed) {
-      sumPed = new TH1F("Pedestals", 
-                       Form("Summary of pedestals in FMD%d%c[%02d]", 
-                            det, ring, sec), 
-                       nStr, -.5, nStr-.5);
-      sumPed->SetXTitle("Strip");
-      sumPed->SetYTitle("Pedestal [ADC]");
-      sumPed->SetDirectory(gDirectory);
-    }
-    if (!sumNoise) { 
-      sumNoise = new TH1F("Noise", 
-                         Form("Summary of noise in FMD%d%c[%02d]", 
-                              det, ring, sec), 
-                         nStr, -.5, nStr-.5);
-      sumNoise->SetXTitle("Strip");
-      sumNoise->SetYTitle("Noise [ADC]");
+    
+    UShort_t ddl, board, altro, channel;
+    UShort_t timebin;
+    
+    pars->Detector2Hardware(det,ring,sec,strip,sample,ddl,board,altro,channel,timebin);
+    
+    switch(det) {
+    case 1:
+      fZSfileFMD1 << board << ',' << altro << ',' << channel << ',' << timebin << ','
+                 << mean  << ',' << rms << "\n"; break;
+    case 2:
+      fZSfileFMD2 << board << ',' << altro << ',' << channel << ',' << timebin << ','
+                 << mean  << ',' << rms << "\n"; break;
+    case 3:
+      fZSfileFMD3 << board << ',' << altro << ',' << channel << ',' << timebin << ','
+                 << mean  << ',' << rms << "\n"; break;
+    default:
+      AliWarning("Unknown sample!"); break;
       
-      sumNoise->SetDirectory(gDirectory);
     }
-    sumPed->SetBinContent(strip+1, mean);
-    sumPed->SetBinError(strip+1, rms);
-    sumNoise->SetBinContent(strip+1, rms);
     
-    if(sumNoise->GetEntries() == nStr)
-      sumNoise->Write(sumNoise->GetName(),TObject::kOverwrite);
-    if(sumPed->GetEntries() == nStr)
-      sumPed->Write(sumPed->GetName(),TObject::kOverwrite);
+    Float_t chi2ndf = 0;
+    
     
-    fPedSummary.SetBinContent(fCurrentChannel,mean);
-    fNoiseSummary.SetBinContent(fCurrentChannel,rms);
-    fCurrentChannel++;
+    if(fitFunc.GetNDF())
+      chi2ndf = fitFunc.GetChisquare() / fitFunc.GetNDF();
     
-    gDirectory->cd(GetStripPath(det, ring, sec, strip, kTRUE));
-    hChannel->GetXaxis()->SetRange(1,1024);
+    Int_t sampleToWrite = 2;
     
-    hChannel->Write();
-  }  
+    if(pars->GetSampleRate(det,ring,sec,strip)==2)
+      sampleToWrite = 1;
+    
+    if(pars->GetSampleRate(det,ring,sec,strip)<2)
+      sampleToWrite = 0;
+    
+    if(sample==sampleToWrite) {
+    
+      fOutputFile << det                         << ','
+                 << ring                        << ','
+                 << sec                         << ','
+                 << strip                       << ','
+                 << mean                        << ','
+                 << rms                         << ','
+                 << fitFunc.GetParameter(1)     << ','
+                 << fitFunc.GetParameter(2)     << ','
+                 << chi2ndf                     <<"\n";
+      
+      if(fSaveHistograms  ) {
+       gDirectory->cd(GetSectorPath(det, ring, sec, kTRUE));
+       TH1F* sumPed   = dynamic_cast<TH1F*>(gDirectory->Get("Pedestals"));
+       TH1F* sumNoise = dynamic_cast<TH1F*>(gDirectory->Get("Noise"));
+       Int_t nStr = (ring == 'I' ? 512 : 256);
+       if (!sumPed) {
+         sumPed = new TH1F("Pedestals", 
+                           Form("Summary of pedestals in FMD%d%c[%02d]", 
+                                det, ring, sec), 
+                           nStr, -.5, nStr-.5);
+         sumPed->SetXTitle("Strip");
+         sumPed->SetYTitle("Pedestal [ADC]");
+         sumPed->SetDirectory(gDirectory);
+       }
+       if (!sumNoise) { 
+         sumNoise = new TH1F("Noise", 
+                             Form("Summary of noise in FMD%d%c[%02d]", 
+                                  det, ring, sec), 
+                             nStr, -.5, nStr-.5);
+         sumNoise->SetXTitle("Strip");
+         sumNoise->SetYTitle("Noise [ADC]");
+         
+         sumNoise->SetDirectory(gDirectory);
+       }
+       sumPed->SetBinContent(strip+1, mean);
+       sumPed->SetBinError(strip+1, rms);
+       sumNoise->SetBinContent(strip+1, rms);
+      
+       if(sumNoise->GetEntries() == nStr)
+         sumNoise->Write(sumNoise->GetName(),TObject::kOverwrite);
+       if(sumPed->GetEntries() == nStr)
+         sumPed->Write(sumPed->GetName(),TObject::kOverwrite);
+       
+       fPedSummary.SetBinContent(fCurrentChannel,mean);
+       
+       fNoiseSummary.SetBinContent(fCurrentChannel,rms);
+       fCurrentChannel++;
+       
+       gDirectory->cd(GetStripPath(det, ring, sec, strip, kTRUE));
+       hChannel->GetXaxis()->SetRange(1,1024);
+       
+       hChannel->Write();
+      }
+    }
+  }
 }
 
 //_____________________________________________________________________
 void AliFMDPedestalDA::Terminate(TFile* diagFile) 
 {
-  diagFile->cd();
+  if(fSaveHistograms) {
+    diagFile->cd();
+    
+    fPedSummary.Write();
+    fNoiseSummary.Write();
+  }
   
-  fPedSummary.Write();
-  fNoiseSummary.Write();
+  if(fZSfileFMD1.is_open()) { 
+    fZSfileFMD1.write("# EOF\n",6);
+    fZSfileFMD1.close();  }
+  if(fZSfileFMD2.is_open()) {
+    fZSfileFMD2.write("# EOF\n",6);
+    fZSfileFMD2.close(); }
+  if(fZSfileFMD3.is_open()) {
+    fZSfileFMD3.write("# EOF\n",6);
+    fZSfileFMD3.close(); }
   
 }
 
@@ -231,29 +286,47 @@ void AliFMDPedestalDA::WriteHeaderToFile()
                    "Mu, "
                    "Sigma, "
                    "Chi2/NDF \n", 71);
+  fZSfileFMD1.write("# FMD 1 pedestals \n",19);
+  fZSfileFMD1.write("# board, "
+                   "altro, "
+                   "channel, "
+                   "timebin, "
+                   "pedestal, "
+                   "noise \n", 51);
+  fZSfileFMD2.write("# FMD 2 pedestals \n",19);
+  fZSfileFMD2.write("# board, "
+                   "altro, "
+                   "channel, "
+                   "timebin, "
+                   "pedestal, "
+                   "noise \n", 51);
+  fZSfileFMD3.write("# FMD 3 pedestals \n",19);
+  fZSfileFMD3.write("# board, "
+                   "altro, "
+                   "channel, "
+                   "timebin, "
+                   "pedestal, "
+                   "noise \n", 51);
+  
 }
 
 //_____________________________________________________________________
 TH1S* AliFMDPedestalDA::GetChannel(UShort_t det, 
                                   Char_t   ring, 
                                   UShort_t sec, 
-                                  UShort_t strip) 
+                                  UShort_t strip,
+                                  UInt_t    sample) 
 {
   UShort_t   iring     = (ring == 'O' ? 0 : 1);
   TObjArray* detArray  = static_cast<TObjArray*>(fDetectorArray.At(det));
   TObjArray* ringArray = static_cast<TObjArray*>(detArray->At(iring));
   TObjArray* secArray  = static_cast<TObjArray*>(ringArray->At(sec));
-#ifdef USE_SAMPLES
-  AliFMDParameters* pars        = AliFMDParameters::Instance();
-  Int_t             samples     = pars->GetSampleRate(det, ring, sec, strip);
   TObjArray*        sampleArray = static_cast<TObjArray*>(secArray->At(strip));
   TH1S*      hSample = static_cast<TH1S*>(sampleArray->At(sample));
   return hSample;
-#else
-  TH1S*      hChannel  = static_cast<TH1S*>(secArray->At(strip));
-  return hChannel;
-#endif  
+  
 }
+
 //_____________________________________________________________________
 //
 //EOF