Two new methods to retrieve the number of dead and masked channels after the PEDESTAL...
authorgvolpe <gvolpe@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 1 Feb 2010 14:50:09 +0000 (14:50 +0000)
committergvolpe <gvolpe@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 1 Feb 2010 14:50:09 +0000 (14:50 +0000)
HMPID/AliHMPIDCalib.cxx
HMPID/AliHMPIDCalib.h
HMPID/HMPIDda.cxx

index 8dcfb98..d687a22 100644 (file)
@@ -52,7 +52,9 @@ fDeadMap(0x0),
 fPedMeanMap(0x0),
 fPedSigMap(0x0),
 f1DPedMean(0x0),
-f1DPedSigma(0x0)
+f1DPedSigma(0x0),
+fNumMaskedPads(0),
+fNumDeadPads(0)
 {
   //
   //constructor
@@ -177,6 +179,7 @@ AliHMPIDCalib::~AliHMPIDCalib()
   fSigCut=0;
   fLargeHisto=kFALSE;
   fSelectDDL=0;
+  fNumMaskedPads=0;
   
   if (fPedMeanMap)   { delete [] fPedMeanMap; fPedMeanMap=0x0;  }  
   if (fPedSigMap)    { delete [] fPedSigMap;  fPedSigMap=0x0;   }  
@@ -408,7 +411,7 @@ Bool_t AliHMPIDCalib::CalcPedestal(Int_t nDDL, Char_t* name, Char_t *name2,Int_t
   Int_t feeOffset=196657;
   ofstream feeInput; feeInput.open(Form("%s",name2));      //write thr file for Fe2C
   
-  Double_t mean=0,sigma=0;
+  Double_t mean=0,sigma=0, threshold=0;
   Double_t qs2m=0,qsm2=0;
   ofstream out;                                            //to write the pedestal text files
   Int_t inhard;
@@ -447,11 +450,13 @@ Bool_t AliHMPIDCalib::CalcPedestal(Int_t nDDL, Char_t* name, Char_t *name2,Int_t
        if(nEvPerPad < 1 ) {                                                      //if the pad is bad then we assign 100  for the sigma and 50 for the mean
           mean  = AliHMPIDParam::kPadMeanZeroCharge;
           sigma = AliHMPIDParam::kPadSigmaZeroCharge;
+          fNumDeadPads++;
         }
         else if(fDeadMap->GetBinContent(binSp)>0)                                 //check if channel is masked, if yes set maksed values
         {
           mean  = AliHMPIDParam::kPadMeanMasked;
           sigma = AliHMPIDParam::kPadSigmaMasked;
+          fNumMaskedPads++;
         }
        else{            
          mean = fsq[nDDL][row][dil][pad]*1.0/nEvPerPad;
@@ -459,7 +464,13 @@ Bool_t AliHMPIDCalib::CalcPedestal(Int_t nDDL, Char_t* name, Char_t *name2,Int_t
          qsm2 = TMath::Power(fsq[nDDL][row][dil][pad]*1.0/nEvPerPad,2); 
         sigma = TMath::Sqrt(TMath::Abs(qs2m-qsm2));
         }
-        inhard=((Int_t(mean+fSigCut*sigma))<<9)+Int_t(mean);                       //right calculation, xchecked with Paolo 8/4/2008
+        
+        //The electronics takes the 32bit int as: first 9 bits for the pedestal and the second 9 bits for threshold
+        threshold = mean+fSigCut*sigma;                                                                    
+        if(mean > 511.0 || threshold > 511.0) {mean = AliHMPIDParam::kPadMeanMasked; threshold = AliHMPIDParam::kPadMeanMasked + 5.0 * AliHMPIDParam::kPadSigmaMasked; }
+        //inhard=((Int_t(mean+fSigCut*sigma))<<9)+Int_t(mean);                                                 //right calculation, xchecked with Paolo 8/4/2008
+        inhard=((Int_t(threshold))<<9)+Int_t(mean);                                                            //right calculation, xchecked with Paolo 8/4/2008
+        
         out << Form("%2i %2i %2i %5.3f %5.3f %4.4x \n",row,dil,pad,mean,sigma,inhard);
         feeInput << Form("0x%4.4x\n",inhard);
         
index 03d85f6..937fe1c 100644 (file)
@@ -39,11 +39,13 @@ public:
          void SetSigCutFromFile(TString name);                              //Set Sigma Cuts from File
          void SetDeadChannelMapFromFile(TString name);
          Bool_t GetSelectedDDL()     const  {return fSelectDDL;}              //Set wether ADC histos of pads are written or not
-         TH2F   *GetPedMeanMap(Int_t iDDL)  {return fPedMeanMap[iDDL];}
-         TH2F   *GetPedSigMap(Int_t iDDL)   {return fPedSigMap[iDDL];}
-         TH1F   *GetPedMean(Int_t iChFee)   {return f1DPedMean[iChFee];}
-         TH1F   *GetPedSigma(Int_t iChFee)  {return f1DPedSigma[iChFee];}
-     THnSparse  *GetDeadMap()               {return fDeadMap;}
+         TH2F   *GetPedMeanMap(Int_t iDDL)  {return fPedMeanMap[iDDL];}       //Get the pedestal mean map for a DDL to send to AMORE
+         TH2F   *GetPedSigMap(Int_t iDDL)   {return fPedSigMap[iDDL];}        //Get the pedestal sigma map for a DDL to send to AMORE
+         TH1F   *GetPedMean(Int_t iChFee)   {return f1DPedMean[iChFee];}      //Get the pedestal mean map for a FEE channel to send to AMORE
+         TH1F   *GetPedSigma(Int_t iChFee)  {return f1DPedSigma[iChFee];}     //Get the pedestal Sigma map for a FEE channel to send to AMORE
+     THnSparse  *GetDeadMap()               {return fDeadMap;}                //Get the masked channel map from the DAQ database
+         Int_t   GetNumMaskedPads()         {return fNumMaskedPads;}          //Get the number of masked channels
+         Int_t   GetNumDeadPads()           {return fNumDeadPads;}            //Get the number of masked channels
 protected: 
 
     Bool_t     *faddl;                                                         //check is ddl is filled
@@ -66,15 +68,17 @@ protected:
     THnSparse  *fDeadMap;                                                      //Dead Channel Map
     TH2F       **fPedMeanMap;                                                  //2D mean pedestal map to export to AMORE
     TH2F       **fPedSigMap;                                                   //2D pedestal sigma map to export to AMORE
-    TH1F      **f1DPedMean;                                                   //1D mean pedestal map to export to AMORE
+    TH1F      **f1DPedMean;                                                    //1D mean pedestal map to export to AMORE
     TH1F      **f1DPedSigma;                                                   //1D pedestal sigma map to export to AMORE
-        
+    Int_t       fNumMaskedPads;                                                //Number of masked pads     
+    Int_t       fNumDeadPads;                                                  //Number of currently dead channels   
+            
   private:
                                            
   AliHMPIDCalib(const AliHMPIDCalib& c);                                       //dummy copy constructor
   AliHMPIDCalib &operator=(const AliHMPIDCalib& c);                            //dummy assignment operator
      
-    ClassDef(AliHMPIDCalib,4)                                                  //HMPID calibration and pedestal class        
+    ClassDef(AliHMPIDCalib,5)                                                  //HMPID calibration and pedestal class        
 };
 #endif
 
index f6feae7..e5baad3 100644 (file)
@@ -55,24 +55,24 @@ int main(int argc, char **argv){
 
   
   /* log start of process */
-  printf("HMPID DA program started\n");  
+  printf("HMP PedestalDa: HMPID DA program started\n");  
 
   gROOT->GetPluginManager()->AddHandler("TVirtualStreamerInfo","*","TStreamerInfo","RIO","TStreamerInfo()");
   
   /* check that we got some arguments = list of files */
   if (argc<2) {
-    printf("Wrong number of arguments\n");
+    printf("HMP PedestalDa: Wrong number of arguments\n");
     return -1;
   }
 
   /* copy locally a file from daq detector config db */
   
-  hmpIn=Form("./%s",hmpConfigFile);
-  status=daqDA_DB_getFile(hmpConfigFile,hmpIn.Data()); 
-  if (status) { printf("Failed to get HMPID config file status: %d\n",status);return -1; }
-  hmpIn2=Form("./%s",hmpDeadChannelMapFile);
-  status=daqDA_DB_getFile(hmpDeadChannelMapFile,hmpIn2.Data()); 
-  if (status) { printf("Failed to get HMPID dead channel file status: %d\n",status);return -1; }
+ hmpIn=Form("./%s",hmpConfigFile);
+ status=daqDA_DB_getFile(hmpConfigFile,hmpIn.Data()); 
+ if (status) { printf("Failed to get HMPID config file status: %d\n",status);return -1; }
+ hmpIn2=Form("./%s",hmpDeadChannelMapFile);
+ status=daqDA_DB_getFile(hmpDeadChannelMapFile,hmpIn2.Data()); 
+ if (status) { printf("Failed to get HMPID dead channel file status: %d\n",status);return -1; }
   
 
   /* report progress */
@@ -89,8 +89,8 @@ int main(int argc, char **argv){
   AliHMPIDCalib *pCal=new AliHMPIDCalib();
   /* Set the number of sigma cuts inside the file HmpidSigmaCut.txt on all LDCs! */
   /* If the file is NOT present then the default cut 3 will be used!*/
-  pCal->SetSigCutFromFile(hmpIn);
-  pCal->SetDeadChannelMapFromFile(hmpIn2);  
+ pCal->SetSigCutFromFile(hmpIn);
+ pCal->SetDeadChannelMapFromFile(hmpIn2);  
   
   /* init event counter */
   Int_t firstEvt=0;
@@ -103,7 +103,7 @@ int main(int argc, char **argv){
 
     status=monitorSetDataSource( argv[n] );
     if (status!=0) {
-      printf("monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
+      printf("HMP PedestalDa: monitorSetDataSource() failed : %s\n",monitorDecodeError(status));
       return -1;
     }
 
@@ -123,11 +123,11 @@ int main(int argc, char **argv){
       status=monitorGetEventDynamic((void **)&event);
       if (status==MON_ERR_EOF)                                              /* end of monitoring file has been reached */
       {
-        printf("End of monitoring file has been reached! \n");
+        printf("HMP PedestalDa: End of monitoring file has been reached! \n");
         break;
         }
       if (status!=0) {
-        printf("monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
+        printf("HMP PedestalDa: monitorGetEventDynamic() failed : %s\n",monitorDecodeError(status));
        return -1;
       }
 
@@ -167,7 +167,7 @@ int main(int argc, char **argv){
 
       /* exit when last event received, no need to wait for TERM signal */
       if (eventT==END_OF_RUN) {
-       printf("EOR event detected\n");
+       printf("HMP PedestalDa: EOR event detected\n");
        break;    
     
       } // events loop   
@@ -178,10 +178,10 @@ int main(int argc, char **argv){
   }//arg
 
   /* write report */
-  printf("HMPID DA processed RUN #%s on LDC#%d, with %d calibration events\n",getenv("DATE_RUN_NUMBER"),ldcId,iEvtNcal);
+  printf("HMP PedestalDa: HMPID DA processed RUN #%s on LDC#%d, with %d calibration events\n",getenv("DATE_RUN_NUMBER"),ldcId,iEvtNcal);
 
   if (!iEvtNcal) {
-    printf("No calibration events have been read. Exiting\n");
+    printf("HMP PedestalDa: No calibration events have been read. Exiting\n");
     return -1;
   }
 
@@ -193,13 +193,13 @@ int main(int argc, char **argv){
     /* Calculate pedestal for the given ddl, if there is no ddl go t next */
     if(pCal->CalcPedestal(nDDL,Form("HmpidPedDdl%02i.txt",nDDL),Form("%s",feeIn.Data()),iEvtNcal)) {
       status=daqDA_DB_storeFile(feeIn.Data(),feeIn.Data());                                               //store a single threshold file for a DDL in DAQ DB  
-      if (status) { printf("Failed to store file %s in DAQ DB, status: %d\n",feeIn.Data(),status); }
+      if (status) { printf("HMP PedestalDa: Failed to store file %s in DAQ DB, status: %d\n",feeIn.Data(),status); }
       status=daqDA_FES_storeFile(Form("HmpidPedDdl%02i.txt",nDDL),Form("HmpidPedDdl%02i.txt",nDDL));      //store a single pedestal file for a DDL
-      if (status) { printf("Failed to export file on FES: %d\n",status); }
+      if (status) { printf("HMP PedestalDa: Failed to export file on FES: %d\n",status); }
     }//pedestals and thresholds
     if(pCal->WriteErrors(nDDL,Form("HmpidErrorsDdl%02i.txt",nDDL),iEvtNcal)) {
       status=daqDA_FES_storeFile(Form("HmpidErrorsDdl%02i.txt",nDDL),Form("HmpidErrorsDdl%02i.txt",nDDL));
-      if (status) { printf("Failed to export file : %d\n",status); }
+      if (status) { printf("HMP PedestalDa: Failed to export file : %d\n",status); }
     }//errors
   }//nDDL
 
@@ -219,7 +219,9 @@ int main(int argc, char **argv){
          statusAmoreDA+=amoreDA.Send(Form("f1DPedSigma_Ch%d_FEE_%d",iCh,iFee),pCal->GetPedSigma(6*iCh+iFee));
        }
      }
-         
+
+  printf("HMP PedestalDa: num. masked pads: %d, num of currently dead pads: %d.\n",pCal->GetNumMaskedPads(),pCal->GetNumDeadPads()); 
+           
   delete pCal;  
   if(status) return -1;
   if(statusAmoreDA) return -1;
@@ -228,6 +230,7 @@ int main(int argc, char **argv){
   daqDA_progressReport(100);
   
   
+  
   return status;
 }