]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PHOS/AliPHOSDA2.cxx
Some of the coding violations corrected
[u/mrichter/AliRoot.git] / PHOS / AliPHOSDA2.cxx
index be5c0fc9a1d74dfa69ff884588d6193de36cf37e..047bd1b403f463ac95ebefd5d5fab2c574876702 100644 (file)
@@ -5,7 +5,7 @@ ClassImp(AliPHOSDA2)
 
 //----------------------------------------------------------------
 AliPHOSDA2::AliPHOSDA2(int module) : TNamed(),
- fHistoFile(0),fMod(module)
+ fHistoFile(0),fFiredCells(0),fMod(module)
 
 {
   // Create AliPHOSDA2 ("Bad channels finder") object.
@@ -14,13 +14,15 @@ AliPHOSDA2::AliPHOSDA2(int module) : TNamed(),
   // Root file name: PHOS_ModuleX_BCM.root, where X - module number.
   
   char name[128];
-  sprintf(name,"PHOS_Module%d_BCM",fMod);
+  TString sname="PHOS_Module%d_BCM";
+  snprintf(name,sname.Length(),sname.Data(),fMod);
   SetName(name);
 
   SetTitle("Detector Algorithm to check for PHOS channels quality");
 
   char rootname[128];
-  sprintf(rootname,"%s.root",GetName());
+  TString srootname="%s.root";
+  snprintf(rootname,srootname.Length(),srootname.Data(),GetName());
 
   fHistoFile =  new TFile(rootname,"recreate"); // new file!
   
@@ -35,22 +37,67 @@ AliPHOSDA2::AliPHOSDA2(int module) : TNamed(),
   fMaps[0]=0;
   fMaps[1]=0;
 
+  fFiredCells = new TH1I("fFiredCells","Number of fired cells per event",100,0,1000);
+
+}
+
+//----------------------------------------------------------------
+AliPHOSDA2::AliPHOSDA2(Int_t module, TObjArray* oldHistos) : TNamed(),
+ fHistoFile(0),fFiredCells(0),fMod(module)
+
+{
+  // Create AliPHOSDA2 ("Bad channels finder") object.
+  // module is the PHOS module number (0..4).
+  // Quality histogram names: module_iX_iZ_gain.
+  // Read histograms from array oldHistos (if any).
+  // Do not produce an output file!
+
+  char name[128];
+  TString sname="PHOS_Module%d_BCM";
+  snprintf(name,sname.Length(),sname.Data(),fMod);
+  SetName(name);
+
+  SetTitle("Detector Algorithm to check for PHOS channels quality");
+
+  char hname[128];
+  TH1F* hist1=0;
+  TString shname = "%d_%d_%d_%d";
+
+  for(Int_t iX=0; iX<64; iX++) {
+    for(Int_t iZ=0; iZ<56; iZ++) {
+      for(Int_t iGain=0; iGain<2; iGain++) {
+       snprintf(hname,shname.Length(),shname.Data(),fMod,iX,iZ,iGain);
+       if(oldHistos) 
+         hist1 = (TH1F*)oldHistos->FindObject(hname);
+       if(hist1) fHQuality[iX][iZ][iGain] = hist1;
+       else
+         fHQuality[iX][iZ][iGain] = 0;
+      }
+    }
+  }
+  
+  fMaps[0]=0;
+  fMaps[1]=0;
+  
+  fFiredCells = new TH1I("fFiredCells","Number of fired cells per event",100,0,1000);
+  
 }
 
 //-------------------------------------------------------------------
 AliPHOSDA2::AliPHOSDA2(const AliPHOSDA2& da) : TNamed(da),
-  fHistoFile(0),fMod(da.fMod)
+  fHistoFile(0),fFiredCells(0),fMod(da.fMod)
 {
   // Copy constructor.
 
   char hname[128];
   TH1F* hist1=0;
+  TString shname = "%d_%d_%d_%d";
 
   for(Int_t iX=0; iX<64; iX++) {
     for(Int_t iZ=0; iZ<56; iZ++) {
       for(Int_t iGain=0; iGain<2; iGain++) {
 
-       sprintf(hname,"%d_%d_%d_%d",fMod,iX,iZ,iGain);
+       snprintf(hname,shname.Length(),shname.Data(),fMod,iX,iZ,iGain);
        hist1 = (TH1F*)da.fHistoFile->Get(hname);
        if(hist1) fHQuality[iX][iZ][iGain] = new TH1F(*hist1);
        else
@@ -70,6 +117,7 @@ AliPHOSDA2::AliPHOSDA2(const AliPHOSDA2& da) : TNamed(da),
     fMaps[1] = 0;
   
   fHistoFile = new TFile(da.GetName(),"recreate");
+  fFiredCells = new TH1I(*da.fFiredCells);
   
 }
 
@@ -112,6 +160,11 @@ AliPHOSDA2& AliPHOSDA2::operator= (const AliPHOSDA2& da)
       fMaps[1] = da.fMaps[1];
     } 
     
+    if(fFiredCells) {
+      delete fFiredCells;
+      fFiredCells = da.fFiredCells;
+    }
+    
   }
   
   return *this;
@@ -150,8 +203,8 @@ void AliPHOSDA2::FillQualityHistograms(Float_t quality[64][56][2])
        if(fHQuality[iX][iZ][iGain]) 
          fHQuality[iX][iZ][iGain]->Fill(quality[iX][iZ][iGain]);
        else {
-         sprintf(hname,"%d_%d_%d_%d",fMod,iX,iZ,iGain);
-         sprintf(htitl,"Quality for crystal %d_%d_%d and gain %d",fMod,iX,iZ,iGain);
+         snprintf(hname,128,"%d_%d_%d_%d",fMod,iX,iZ,iGain);
+         snprintf(htitl,128,"Quality for crystal %d_%d_%d and gain %d",fMod,iX,iZ,iGain);
          fHQuality[iX][iZ][iGain] = new TH1F(hname,htitl,100,1.e-6,10.);
          fHQuality[iX][iZ][iGain]->Fill(quality[iX][iZ][iGain]);
        }
@@ -162,6 +215,12 @@ void AliPHOSDA2::FillQualityHistograms(Float_t quality[64][56][2])
 
 }
 
+//-------------------------------------------------------------------
+void  AliPHOSDA2::FillFiredCellsHistogram(Int_t nCells)
+{
+  fFiredCells->Fill(nCells);
+}
+
 //-------------------------------------------------------------------
 void AliPHOSDA2::UpdateHistoFile()
 {
@@ -175,14 +234,14 @@ void AliPHOSDA2::UpdateHistoFile()
   if(fMaps[0]) 
     fMaps[0]->Reset();
   else {
-    sprintf(titl,"Quality map for Low gain");
+    snprintf(titl,128,"Quality map for Low gain");
     fMaps[0] = new TH2F("gmaplow",  titl, 64,0.,64.,56,0.,56.);
   }
 
   if(fMaps[1]) 
     fMaps[1]->Reset();
   else {
-    sprintf(titl,"Quality map for High gain");
+    snprintf(titl,128,"Quality map for High gain");
     fMaps[1] = new TH2F("gmaphigh", titl, 64,0.,64.,56,0.,56.);
   }
     
@@ -196,7 +255,7 @@ void AliPHOSDA2::UpdateHistoFile()
        if(hist1) { 
          hist1->Write(hist1->GetName(),TObject::kWriteDelete);
          Double_t mean = hist1->GetMean();
-         fMaps[iGain]->Fill(iX,iZ,mean);
+         fMaps[iGain]->SetBinContent(iX+1,iZ+1,mean);
        }
       } 
 
@@ -206,5 +265,7 @@ void AliPHOSDA2::UpdateHistoFile()
   fMaps[0]->Write(fMaps[0]->GetName(),TObject::kWriteDelete);
   fMaps[1]->Write(fMaps[1]->GetName(),TObject::kWriteDelete);
 
+  fFiredCells->Write();
+
 }