X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PHOS%2FAliPHOSDA2.cxx;h=047bd1b403f463ac95ebefd5d5fab2c574876702;hb=f29cf84c1d85d96ec0c7623c593abd69b2398601;hp=be5c0fc9a1d74dfa69ff884588d6193de36cf37e;hpb=6a34dadbb477ba5f6075c3c79680fa6601b71d38;p=u%2Fmrichter%2FAliRoot.git diff --git a/PHOS/AliPHOSDA2.cxx b/PHOS/AliPHOSDA2.cxx index be5c0fc9a1d..047bd1b403f 100644 --- a/PHOS/AliPHOSDA2.cxx +++ b/PHOS/AliPHOSDA2.cxx @@ -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(); + }