LCOV - code coverage report
Current view: top level - PHOS/PHOSbase - AliPHOSCpvPedProducer.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 160 0.6 %
Date: 2016-06-14 17:26:59 Functions: 1 16 6.2 %

          Line data    Source code
       1             : #include "AliPHOSCpvPedProducer.h"
       2             : #include "AliPHOSCpvParam.h"
       3             : #include "AliPHOSCpvRawStream.h"
       4             : #include <fstream>
       5             : #include <iostream>
       6             : #include <TTree.h>
       7             : #include <TF1.h>
       8             : #include <TFitResult.h>
       9             : #include <TFitResultPtr.h>
      10             : #include <TSystem.h>
      11             : #include <TTimeStamp.h>
      12             : 
      13             : #include "TFile.h"
      14             : 
      15             : using namespace std;
      16             : 
      17             : using std::ifstream;
      18             : using std::ofstream;
      19          22 : ClassImp(AliPHOSCpvPedProducer) ;
      20             : 
      21             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      22             : AliPHOSCpvPedProducer::AliPHOSCpvPedProducer(Int_t sigcut):
      23           0 :   TObject(),
      24           0 :   fSigCut(sigcut),
      25           0 :   fTurbo(kTRUE),
      26           0 :   fhErrors(0),
      27           0 :   fRawStream(0)
      28           0 : {
      29             :   //
      30             :   //constructor
      31             :   //
      32           0 :   for(Int_t iDDL=0; iDDL<2*AliPHOSCpvParam::kNDDL; iDDL++) {//iDDL
      33           0 :     fPedMeanMap[iDDL]=0;
      34           0 :     fPedSigMap [iDDL]=0;
      35           0 :     f1DPedMean [iDDL]=0;
      36           0 :     f1DPedSigma[iDDL]=0;
      37           0 :     fPermanentBadMap[iDDL]=0x0;
      38           0 :     for(Int_t iX=0; iX<AliPHOSCpvParam::kPadPcX; iX++)
      39           0 :       for(Int_t iY=1; iY<AliPHOSCpvParam::kPadPcY; iY++)
      40           0 :         fPadAdc[iDDL][iX][iY]=0;
      41             :   }//iDDL
      42             : 
      43           0 :   CreateErrHist();
      44           0 : }  //constructor
      45             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      46             : AliPHOSCpvPedProducer::~AliPHOSCpvPedProducer()
      47           0 : {
      48             :   //
      49             :   //destructor
      50             :   //
      51           0 :   for(Int_t iDDL=0; iDDL<2*AliPHOSCpvParam::kNDDL; iDDL++) {//iDDL
      52           0 :     delete fPedMeanMap[iDDL];
      53           0 :     delete fPedSigMap [iDDL];
      54           0 :     delete f1DPedMean [iDDL];
      55           0 :     delete f1DPedSigma[iDDL];
      56           0 :     delete fPermanentBadMap[iDDL];
      57           0 :     for(Int_t iX=0; iX<AliPHOSCpvParam::kPadPcX; iX++)
      58           0 :       for(Int_t iY=1; iY<AliPHOSCpvParam::kPadPcY; iY++)
      59           0 :         delete fPadAdc[iDDL][iX][iY];
      60             :   }//iDDL
      61             : 
      62             :   //delete fhErrors;
      63           0 : }  //destructor
      64             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      65             : void AliPHOSCpvPedProducer::SetPermanentBadMap(TH2* badMap, int iDDL = 0)
      66             : {
      67           0 :   if(badMap!=0x0){
      68           0 :     if(iDDL>=0&&iDDL<2*AliPHOSCpvParam::kNDDL){
      69           0 :       fPermanentBadMap[iDDL] = (TH2I*)badMap->Clone();
      70           0 :     }
      71           0 :     else cout<<"DDL number "<<iDDL<<" is not valid"<<endl;
      72             :   }
      73           0 : }
      74             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      75             : void AliPHOSCpvPedProducer::SetTurbo(Bool_t turbo)
      76             : {
      77           0 :   fTurbo = turbo;
      78           0 :   if(fRawStream) fRawStream->SetTurbo(fTurbo);
      79           0 : }
      80             : //--------------------------------------------------------------------------------------
      81             : Bool_t AliPHOSCpvPedProducer::LoadNewEvent(AliRawReader *& rawReader)
      82             : {
      83           0 :   if(fRawStream) delete fRawStream;
      84           0 :   fRawStream = new AliPHOSCpvRawStream(rawReader);
      85           0 :   if(fRawStream) {
      86           0 :     fRawStream->SetTurbo(fTurbo);
      87           0 :     return kTRUE;
      88             :   }
      89           0 :   fhErrors->Fill(0);
      90           0 :   return kFALSE;
      91           0 : }
      92             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      93             : Bool_t AliPHOSCpvPedProducer::FillPedestal(Int_t abspad,Float_t q)
      94             : {
      95             :   //
      96             :   //Called from the CpvdaFillPedestal() and fills the pedestal values
      97             :   //Arguments: absolute pad number as from AliPHOSCpvParam and q-charge
      98             :   //
      99           0 :   if(q<0) {
     100           0 :    AliError("Negative charge is read!!!!!!");
     101           0 :    return kFALSE;
     102             :   }
     103           0 :   if(AliPHOSCpvParam::IsValidAbs(abspad) && q>0) {
     104           0 :     Int_t iDDL=AliPHOSCpvParam::A2DDL(abspad),
     105           0 :             iX=AliPHOSCpvParam::A2X(abspad),
     106           0 :             iY=AliPHOSCpvParam::A2Y(abspad);
     107           0 :     if(!fPadAdc [iDDL][iX][iY]) CreateDDLHistos(iDDL); 
     108           0 :     fPadAdc [iDDL][iX][iY] -> Fill(q);
     109             :     return kTRUE;
     110             :   }
     111           0 :   return kFALSE;
     112           0 : }//FillPedestal(int,float)
     113             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     114             : Bool_t AliPHOSCpvPedProducer::FillPedestal()
     115             : {
     116             :   //
     117             :   //Called from the Cpvda
     118             :   //
     119           0 :   while(fRawStream->Next()){
     120           0 :     for(Int_t iPad=0;iPad<fRawStream->GetNPads();iPad++) {
     121           0 :       Int_t charge = fRawStream->GetChargeArray()[iPad];
     122           0 :       Int_t aPad = fRawStream -> GetPadArray()[iPad];
     123           0 :       if(charge){
     124           0 :         if(!AliPHOSCpvParam::IsValidAbs(aPad)) continue;
     125           0 :         if(!FillPedestal(aPad, (Float_t)charge)) return kFALSE;
     126             :       }
     127           0 :     }
     128             :   }
     129           0 :   return kTRUE;
     130           0 : }//FillPedestal(TClonesArray*)
     131             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     132             : Bool_t AliPHOSCpvPedProducer::CalcPedestal(Int_t iDDL)
     133             : {
     134             :   //
     135             :   //Calculate pedestal for each pad
     136             :   //Arguments: nDDL-DDL number, nEv - number of the read events
     137             :   //Retutns: kTRUE/kFALSE
     138             :   //
     139             :   //cout<<"Now we are going to calculate pedestals"<<endl;
     140             : 
     141           0 :   if(fPedMeanMap[iDDL]){
     142           0 :     for(Int_t iX=0; iX<AliPHOSCpvParam::kPadPcX; iX++) {
     143           0 :       for(Int_t iY=0; iY<AliPHOSCpvParam::kPadPcY; iY++) {
     144             :         //cout<<"Ped["<<iX<<"]["<<iY<<"] = " << fPadAdc[iDDL][iX][iY]->GetMean()<<endl;
     145           0 :         if(fPermanentBadMap[iDDL]!=0x0){
     146           0 :           if(fPermanentBadMap[iDDL]->GetBinContent(iX+1,iY+1)>0){//bad channel
     147           0 :             fPedMeanMap[iDDL] -> Fill(iX, iY, fMaxThr);
     148           0 :             fPedSigMap [iDDL] -> Fill(iX, iY, 0);
     149           0 :             f1DPedMean [iDDL] -> Fill(fMaxThr);
     150           0 :             f1DPedSigma[iDDL] -> Fill(0);
     151           0 :           }
     152             :           else{
     153           0 :             fPedMeanMap[iDDL] -> Fill(iX, iY, fPadAdc[iDDL][iX][iY]->GetMean());
     154           0 :             fPedSigMap [iDDL] -> Fill(iX, iY, fPadAdc[iDDL][iX][iY]->GetRMS ());
     155           0 :             f1DPedMean [iDDL] -> Fill(fPadAdc[iDDL][iX][iY]->GetMean());
     156           0 :             f1DPedSigma[iDDL] -> Fill(fPadAdc[iDDL][iX][iY]->GetRMS ());
     157             :           }
     158             :         }
     159             :         else{
     160           0 :         fPedMeanMap[iDDL] -> Fill(iX, iY, fPadAdc[iDDL][iX][iY]->GetMean());
     161           0 :         fPedSigMap [iDDL] -> Fill(iX, iY, fPadAdc[iDDL][iX][iY]->GetRMS ());
     162           0 :         f1DPedMean [iDDL] -> Fill(fPadAdc[iDDL][iX][iY]->GetMean());
     163           0 :         f1DPedSigma[iDDL] -> Fill(fPadAdc[iDDL][iX][iY]->GetRMS ());
     164             :         }
     165             :       }
     166             : 
     167             :     }
     168           0 :     return kTRUE;
     169             :   }
     170           0 :   else return kFALSE;
     171           0 : }//CaclPedestal()
     172             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     173             : void AliPHOSCpvPedProducer::WriteAllHistsToFile(const char * name) const
     174             : {
     175           0 :   TFile * rootF = TFile::Open(name,"RECREATE");
     176           0 :   printf("Root file created \n");
     177             :   //rootF->cd();
     178           0 :   for(Int_t iDDL=0; iDDL<2*AliPHOSCpvParam::kNDDL; iDDL++) {
     179             :     // for(Int_t iX=0; iX<AliPHOSCpvParam::kPadPcX; iX++) {
     180             :     //   for(Int_t iY=0; iY<AliPHOSCpvParam::kPadPcY; iY++) {
     181             :     //  //fPadAdc[iDDL][iX][iY]->Write();
     182             :     //   }
     183             :     // }
     184             :         //Printf("iDDL = %d\n", iDDL);
     185           0 :     if ( fPedMeanMap[iDDL])
     186           0 :       rootF->WriteObject(fPedMeanMap[iDDL], Form("fPedMeanMap%d",iDDL));
     187           0 :     if ( fPedSigMap[iDDL])
     188           0 :       rootF->WriteObject(fPedSigMap [iDDL], Form("fPedSigMap%d",iDDL));
     189           0 :     if ( f1DPedMean[iDDL])
     190           0 :       rootF->WriteObject(f1DPedMean [iDDL], Form("f1DPedMean%d",iDDL));
     191           0 :     if ( f1DPedSigma[iDDL])
     192           0 :       rootF->WriteObject(f1DPedSigma[iDDL], Form("f1DPedSig%d",iDDL));
     193             :     //printf("Write here something \n");
     194             :   }
     195             :   //if(fhErrors) fhErrors -> Write();
     196             : 
     197           0 :   for(Int_t iDDL=0; iDDL<2*AliPHOSCpvParam::kNDDL; iDDL++)
     198           0 :     for(Int_t iX=0; iX<AliPHOSCpvParam::kPadPcX; iX++)
     199           0 :       for(Int_t iY=0; iY<AliPHOSCpvParam::kPadPcY; iY++);
     200             :   //fPadAdc[iDDL][iX][iY]->Write();
     201             : 
     202           0 :   rootF->Close();
     203           0 : } //WriteAllHistsToFile()
     204             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     205             : void AliPHOSCpvPedProducer::WritePedFiles(Int_t iDDL) const
     206             : {
     207             :   //
     208             :   // Write pedestal files to load them to RCB card
     209             :   // One file per each column controler
     210             :   //
     211             : 
     212             :   // accordance to RCB format, pedestals must be written in blocks of 64 lines (not AliPHOSCpvParam::kNPadAdd!)
     213             :   Int_t block = 64;
     214             : 
     215             :   //cout<<"pedestal files now will be created!"<< endl;
     216             : 
     217           0 :   if(!fPedMeanMap[iDDL]) {
     218           0 :     Printf("No pedestals found for DDL %d !\n");
     219           0 :     return;
     220             :   }
     221             : 
     222           0 :   for(Int_t iCC=0; iCC<AliPHOSCpvParam::kNRows; iCC++) {
     223             :     FILE * pedFile;
     224             :     FILE* pedFileForRCB;
     225           0 :     pedFile = fopen(Form("thr%d_%02d.dat",iDDL,iCC),"w");
     226           0 :     if(!pedFile) {
     227           0 :       Printf("AliPHOSCpvPedProducer::WritePedFiles: Error, file thr%d_%02d.dat could not be open",iDDL,iCC);
     228           0 :     }
     229             :     // create and initialize arrays for ped and sigmas
     230           0 :     Int_t ped[AliPHOSCpvParam::kN3GAdd][block],
     231             :       sig[AliPHOSCpvParam::kN3GAdd][block];
     232           0 :     for(Int_t i3g=0; i3g<AliPHOSCpvParam::kN3GAdd; i3g++) {
     233           0 :       for(Int_t iPad=0; iPad<block; iPad++) {
     234           0 :         ped[i3g][iPad] = fMaxThr;
     235           0 :         sig[i3g][iPad] = 0;
     236             :       }
     237             :     }
     238           0 :     Int_t iXmin, iXmax;
     239           0 :     AliPHOSCpvParam::GetLimOfCConX(iCC,iXmin,iXmax);
     240             :     //cout<<iXmin<<iXmax<<endl;
     241           0 :     for(Int_t iY=0; iY<AliPHOSCpvParam::kPadPcY; iY++) {
     242           0 :       Int_t g3 = AliPHOSCpvParam::Y23G(iY);
     243           0 :       for(Int_t iX=iXmin; iX<=iXmax; iX++) {
     244           0 :         Int_t pad = AliPHOSCpvParam::XY2Pad(iX,iY);
     245           0 :         if(fPermanentBadMap[iDDL]!=0x0 ){
     246           0 :           if(fPermanentBadMap[iDDL]->GetBinContent(iX+1,iY+1)>0){
     247           0 :             ped[g3][pad] = fMaxThr;
     248           0 :             sig[g3][pad] = 0;
     249           0 :           }
     250             :           else{
     251           0 :             ped[g3][pad] = (Int_t) fPadAdc[iDDL][iX][iY]->GetMean();
     252           0 :             sig[g3][pad] = (Int_t) fPadAdc[iDDL][iX][iY]->GetRMS ();
     253             :           }
     254             :         }
     255             :           else{
     256           0 :             ped[g3][pad] = (Int_t) fPadAdc[iDDL][iX][iY]->GetMean();
     257           0 :             sig[g3][pad] = (Int_t) fPadAdc[iDDL][iX][iY]->GetRMS ();
     258             :           }
     259             :         //cout<< "ped is " << fPadAdc[iDDL][iX][iY]->GetMean()<<endl;
     260             :       }
     261             :     }
     262             : 
     263             :     // write arrays to file
     264           0 :     for(Int_t i3g=0; i3g<AliPHOSCpvParam::kN3GAdd; i3g++) {
     265           0 :       for(Int_t pad=0; pad<block; pad++) {
     266             :         // first 10 bit for pedestal
     267             :         // last 9 bit for fSigCut*sigma
     268             :         Int_t write,writeRCB;
     269           0 :         if ((ped[i3g][pad] + fSigCut*sig[i3g][pad]) > fMaxThr)
     270           0 :           write = (fMaxThr<<9) + 0;
     271             :         else
     272           0 :           write = ((ped[i3g][pad]+fSigCut * sig[i3g][pad])<<9) + fSigCut * sig[i3g][pad];
     273             : 
     274           0 :         fprintf(pedFile, "0x%05x\n", write);
     275             :       }
     276             :     }
     277           0 :     fclose(pedFile);
     278           0 :   } // iCC
     279           0 : } // WritePedFiles(iDDL)
     280             : //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     281             : void AliPHOSCpvPedProducer::CreateErrHist()
     282             : {
     283           0 :   Int_t nErrors = AliPHOSCpvRawStream::GetNErrors();
     284           0 :   const char * errNames[nErrors];
     285           0 :   for(Int_t i=0; i<nErrors; i++) {
     286           0 :     errNames[i] = AliPHOSCpvRawStream::GetErrName(i);
     287             :   }
     288           0 :   fhErrors = new TH1I("errorTypes","Errors occured during processing",nErrors+1,0,nErrors+1);
     289           0 :   TAxis* x = fhErrors->GetXaxis();
     290           0 :   x->SetBinLabel(1, "Can't get event");
     291           0 :   for(Int_t i=0; i<nErrors; i++) {
     292           0 :     x->SetBinLabel(i+2,errNames[i]);
     293             :   }
     294           0 : }
     295             : //--------------------------------------------------------------------------------------
     296             : void AliPHOSCpvPedProducer::CreateDDLHistos(Int_t iDDL)
     297             : {
     298             :   // creating histograms
     299           0 :   fPedMeanMap[iDDL] = new TH2F(Form("hPedMeanMap%d",iDDL),Form("2D pedestal value map, DDL = %d",iDDL) ,AliPHOSCpvParam::kPadPcX,0.,AliPHOSCpvParam::kPadPcX,AliPHOSCpvParam::kPadPcY,0.,AliPHOSCpvParam::kPadPcY);
     300           0 :   fPedSigMap [iDDL] = new TH2F(Form("hPedSigMap%d" ,iDDL),Form("2D pedestal sigma map, DDL = %d",iDDL),AliPHOSCpvParam::kPadPcX,0.,AliPHOSCpvParam::kPadPcX,AliPHOSCpvParam::kPadPcY,0.,AliPHOSCpvParam::kPadPcY);
     301           0 :   f1DPedMean [iDDL] = new TH1F(Form("h1DPedMean%d" ,iDDL),Form("pedestal value distribution, DDL = %d",iDDL) ,5000,0,5000);
     302           0 :   f1DPedSigma[iDDL] = new TH1F(Form("h1DPedSigma%d",iDDL),Form("pedestal sigma distribution, DDL = %d",iDDL),1000 ,0,100 );
     303             : 
     304             :   // initialization of arrays
     305             :   int adr;
     306           0 :   for(Int_t iX=0; iX<AliPHOSCpvParam::kPadPcX; iX++) {
     307           0 :     for(Int_t iY=0; iY<AliPHOSCpvParam::kPadPcY; iY++) {
     308           0 :       adr = AliPHOSCpvParam::XY2A(iDDL,iX,iY);
     309           0 :       fPadAdc[iDDL][iX][iY] = new TH1F(Form("hPad%d_%d_%d",iDDL,iX,iY),Form("Amplitudes CC=%d, 3Gass=%d, pad=%d",AliPHOSCpvParam::A2CC(adr),AliPHOSCpvParam::A23G(adr),AliPHOSCpvParam::A2Pad(adr)),5000,0,5000);
     310             :     }//iY
     311             :   }//iX
     312             : 
     313           0 : }

Generated by: LCOV version 1.11