add TRU and LEDMon histograms to QA Raw for usage in AMORE
authordsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 8 Aug 2009 14:32:38 +0000 (14:32 +0000)
committerdsilverm <dsilverm@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sat, 8 Aug 2009 14:32:38 +0000 (14:32 +0000)
EMCAL/AliEMCALGeoParams.h
EMCAL/AliEMCALQADataMakerRec.cxx
EMCAL/AliEMCALQADataMakerRec.h

index ecce96b..cfaf2b5 100644 (file)
@@ -30,6 +30,10 @@ public:
   static const int fgkSampleMax = 1023; // highest possible sample value (10-bit = 0x3ff)
   static const int fgkOverflowCut = 950; // saturation starts around here; also exist as private constant in AliEMCALRawUtils, should probably be replaced
   static const int fgkSampleMin = 0; // lowest possible sample value 
+
+  // TRU numbers
+  static const int fgkEMCALTRUsPerSM = 3; // number of TRU's in a SuperModule
+  static const int fgkEMCAL2x2PerTRU = 96; // number of 2x2's in a TRU
   
   // RAW/AliCaloAltroMapping provides the correspondence information between
   // an electronics HWAddress (Branch<<1 | FEC<<7 | ALTRO<<4 | Channel) 
index c1501e6..05ff8d6 100644 (file)
@@ -45,6 +45,7 @@ Authors:  J.Klay (Cal Poly) May 2008
 #include "AliEMCALRecParam.h"
 #include "AliRawReader.h"
 #include "AliCaloRawStreamV3.h"
+#include "AliEMCALGeoParams.h"
 
 ClassImp(AliEMCALQADataMakerRec)
            
@@ -152,7 +153,7 @@ void AliEMCALQADataMakerRec::InitRaws()
    const Bool_t saveCorr = kTRUE ; 
    const Bool_t image    = kTRUE ; 
 
-  int nTowersPerSM = 1152; // number of towers in a SuperModule; 24x48
+  int nTowersPerSM = AliEMCALGeoParams::fgkEMCALRows * AliEMCALGeoParams::fgkEMCALCols; // number of towers in a SuperModule; 24x48
   int nTot = fSuperModules * nTowersPerSM; // max number of towers in all SuperModules
 
   // counter info: number of channels per event (bins are SM index)
@@ -164,18 +165,18 @@ void AliEMCALQADataMakerRec::InitRaws()
   Add2RawsList(h1, kNsmodHG, !expert, image, !saveCorr) ;
 
   // where did max sample occur? (bins are towers)
-  TProfile * h2 = new TProfile("hLowEmcalRawtime", "Low Gain EMC: Time at Max vs towerId;Tower Id;Time [ns]", 
+  TProfile * h2 = new TProfile("hLowEmcalRawtime", "Low Gain EMC: Time at Max vs towerId;Tower Id;Time [ticks]", 
                               nTot, -0.5, nTot-0.5) ;
   Add2RawsList(h2, kTimeLG, !expert, image, !saveCorr) ;
-  TProfile * h3 = new TProfile("hHighEmcalRawtime", "High Gain EMC: Time at Max vs towerId;Tower Id;Time [ns]", 
+  TProfile * h3 = new TProfile("hHighEmcalRawtime", "High Gain EMC: Time at Max vs towerId;Tower Id;Time [ticks]", 
                               nTot, -0.5, nTot-0.5) ;
   Add2RawsList(h3, kTimeHG, !expert, image, !saveCorr) ;
 
   // how much above pedestal was the max sample?  (bins are towers)
-  TProfile * h4 = new TProfile("hLowEmcalRawMaxMinusMin", "Low Gain EMC: Max - Min vs towerId;Tower Id;??", 
+  TProfile * h4 = new TProfile("hLowEmcalRawMaxMinusMin", "Low Gain EMC: Max - Min vs towerId;Tower Id;Max-Min [ADC counts]", 
                               nTot, -0.5, nTot-0.5) ;
   Add2RawsList(h4, kSigLG, !expert, image, !saveCorr) ;
-  TProfile * h5 = new TProfile("hHighEmcalRawMaxMinusMin", "High Gain EMC: Max - Min vs towerId;Tower Id;??",
+  TProfile * h5 = new TProfile("hHighEmcalRawMaxMinusMin", "High Gain EMC: Max - Min vs towerId;Tower Id;Max-Min [ADC counts]",
                               nTot, -0.5, nTot-0.5) ;
   Add2RawsList(h5, kSigHG, !expert, image, !saveCorr) ;
 
@@ -202,6 +203,92 @@ void AliEMCALQADataMakerRec::InitRaws()
   TProfile * h11 = new TProfile("hHighEmcalRawPedRMS", "High Gain EMC: Pedestal RMS vs towerId;Tower Id;Width [ADC counts]",
                                nTot, -0.5, nTot-0.5) ;
   Add2RawsList(h11, kPedRMSHG, !expert, image, !saveCorr) ;
+
+
+  // now repeat the same for TRU and LEDMon data
+  int nTot2x2 = fSuperModules * AliEMCALGeoParams::fgkEMCALTRUsPerSM * AliEMCALGeoParams::fgkEMCAL2x2PerTRU; // max number of TRU channels for all SuperModules
+
+  // counter info: number of channels per event (bins are SM index)
+  TProfile * hT0 = new TProfile("hTRUEmcalSupermodules", "TRU EMC: # of TRU channels vs SuperMod;SM Id;# of TRU channels",
+                               fSuperModules, -0.5, fSuperModules-0.5) ;
+  Add2RawsList(hT0, kNsmodTRU, !expert, image, !saveCorr) ;
+
+  // where did max sample occur? (bins are TRU channels)
+  TProfile * hT1 = new TProfile("hTRUEmcalRawtime", "TRU EMC: Time at Max vs 2x2Id;2x2 Id;Time [ticks]", 
+                               nTot2x2, -0.5, nTot2x2-0.5) ;
+  Add2RawsList(hT1, kTimeTRU, !expert, image, !saveCorr) ;
+
+  // how much above pedestal was the max sample?  (bins are TRU channels)
+  TProfile * hT2 = new TProfile("hTRUEmcalRawMaxMinusMin", "TRU EMC: Max - Min vs 2x2Id;2x2 Id;Max-Min [ADC counts]", 
+                               nTot2x2, -0.5, nTot2x2-0.5) ;
+  Add2RawsList(hT2, kSigTRU, !expert, image, !saveCorr) ;
+
+  // total counter: channels per event
+  TH1I * hT3 = new TH1I("hTRUNtot", "TRU EMC: Total Number of found TRU channels;# of TRU Channels;Counts", 200, 0, nTot2x2) ;
+  hT3->Sumw2() ;
+  Add2RawsList(hT3, kNtotTRU, !expert, image, !saveCorr) ;
+
+  // pedestal (bins are TRU channels)
+  TProfile * hT4 = new TProfile("hTRUEmcalRawPed", "TRU EMC: Pedestal vs 2x2Id;2x2 Id;Pedestal [ADC counts]", 
+                               nTot2x2, -0.5, nTot2x2-0.5) ;
+  Add2RawsList(hT4, kPedTRU, !expert, image, !saveCorr) ;
+
+  // pedestal rms (standard dev = sqrt of variance estimator for pedestal) (bins are TRU channels)
+  TProfile * hT5 = new TProfile("hTRUEmcalRawPedRMS", "TRU EMC: Pedestal RMS vs 2x2Id;2x2 Id;Width [ADC counts]", 
+                               nTot2x2, -0.5, nTot2x2-0.5) ;
+  Add2RawsList(hT5, kPedRMSTRU, !expert, image, !saveCorr) ;
+
+  // and also LED Mon..
+  // LEDMon has both high and low gain channels, just as regular FEE/towers
+  int nTotLEDMon = fSuperModules * AliEMCALGeoParams::fgkEMCALLEDRefs; // max number of LEDMon channels for all SuperModules
+
+  // counter info: number of channels per event (bins are SM index)
+  TProfile * hL0 = new TProfile("hLowLEDMONEmcalSupermodules", "LowLEDMON Gain EMC: # of strips vs SuperMod;SM Id;# of strips",
+                              fSuperModules, -0.5, fSuperModules-0.5) ;
+  Add2RawsList(hL0, kNsmodLGLEDMon, !expert, image, !saveCorr) ;
+  TProfile * hL1 = new TProfile("hHighLEDMonEmcalSupermodules", "HighLEDMon Gain EMC: # of strips vs SuperMod;SM Id;# of strips",  
+                              fSuperModules, -0.5, fSuperModules-0.5) ; 
+  Add2RawsList(hL1, kNsmodHGLEDMon, !expert, image, !saveCorr) ;
+
+  // where did max sample occur? (bins are strips)
+  TProfile * hL2 = new TProfile("hLowLEDMONEmcalRawtime", "LowLEDMON Gain EMC: Time at Max vs stripId;Strip Id;Time [ticks]", 
+                              nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL2, kTimeLGLEDMon, !expert, image, !saveCorr) ;
+  TProfile * hL3 = new TProfile("hHighLEDMonEmcalRawtime", "HighLEDMon Gain EMC: Time at Max vs stripId;Strip Id;Time [ticks]", 
+                              nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL3, kTimeHGLEDMon, !expert, image, !saveCorr) ;
+
+  // how much above pedestal was the max sample?  (bins are strips)
+  TProfile * hL4 = new TProfile("hLowLEDMONEmcalRawMaxMinusMin", "LowLEDMON Gain EMC: Max - Min vs stripId;Strip Id;Max-Min [ADC counts]", 
+                              nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL4, kSigLGLEDMon, !expert, image, !saveCorr) ;
+  TProfile * hL5 = new TProfile("hHighLEDMonEmcalRawMaxMinusMin", "HighLEDMon Gain EMC: Max - Min vs stripId;Strip Id;Max-Min [ADC counts]",
+                              nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL5, kSigHGLEDMon, !expert, image, !saveCorr) ;
+
+  // total counter: channels per event
+  TH1I * hL6 = new TH1I("hLowLEDMONNtot", "LowLEDMON Gain EMC: Total Number of found strips;# of Strips;Counts", 200, 0, nTotLEDMon) ;
+  hL6->Sumw2() ;
+  Add2RawsList(hL6, kNtotLGLEDMon, !expert, image, !saveCorr) ;
+  TH1I * hL7 = new TH1I("hHighLEDMonNtot", "HighLEDMon Gain EMC: Total Number of found strips;# of Strips;Counts", 200,0, nTotLEDMon) ;
+  hL7->Sumw2() ;
+  Add2RawsList(hL7, kNtotHGLEDMon, !expert, image, !saveCorr) ;
+
+  // pedestal (bins are strips)
+  TProfile * hL8 = new TProfile("hLowLEDMONEmcalRawPed", "LowLEDMON Gain EMC: Pedestal vs stripId;Strip Id;Pedestal [ADC counts]", 
+                              nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL8, kPedLGLEDMon, !expert, image, !saveCorr) ;
+  TProfile * hL9 = new TProfile("hHighLEDMonEmcalRawPed", "HighLEDMon Gain EMC: Pedestal vs stripId;Strip Id;Pedestal [ADC counts]",
+                              nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL9, kPedHGLEDMon, !expert, image, !saveCorr) ;
+
+  // pedestal rms (standard dev = sqrt of variance estimator for pedestal) (bins are strips)
+  TProfile * hL10 = new TProfile("hLowLEDMONEmcalRawPedRMS", "LowLEDMON Gain EMC: Pedestal RMS vs stripId;Strip Id;Width [ADC counts]", 
+                               nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL10, kPedRMSLGLEDMon, !expert, image, !saveCorr) ;
+  TProfile * hL11 = new TProfile("hHighLEDMonEmcalRawPedRMS", "HighLEDMon Gain EMC: Pedestal RMS vs stripId;Strip Id;Width [ADC counts]",
+                               nTotLEDMon, -0.5, nTotLEDMon-0.5) ;
+  Add2RawsList(hL11, kPedRMSHGLEDMon, !expert, image, !saveCorr) ;
   
 }
 
@@ -251,8 +338,11 @@ void AliEMCALQADataMakerRec::MakeRaws(AliRawReader* rawReader)
   AliCaloRawStreamV3 in(rawReader,"EMCAL"); 
 
   // setup
-  int nTowersPerSM = 1152; // number of towers in a SuperModule; 24x48
-  int nRows = 24; // number of rows per SuperModule
+  int nTowersPerSM = AliEMCALGeoParams::fgkEMCALRows * AliEMCALGeoParams::fgkEMCALCols; // number of towers in a SuperModule; 24x48
+  int nRows = AliEMCALGeoParams::fgkEMCALRows; // number of rows per SuperModule
+  int nStripsPerSM = AliEMCALGeoParams::fgkEMCALLEDRefs; // number of strips per SuperModule
+  int n2x2PerSM = AliEMCALGeoParams::fgkEMCALTRUsPerSM * AliEMCALGeoParams::fgkEMCAL2x2PerTRU; // number of TRU 2x2's per SuperModule
+
   int sampleMin = 0; 
   int sampleMax = 0x3ff; // 1023 = 10-bit range
 
@@ -261,14 +351,16 @@ void AliEMCALQADataMakerRec::MakeRaws(AliRawReader* rawReader)
   int firstPedestalSample = 0;
   int lastPedestalSample = 15;
 
-  // SM counters; decl. should be safe, assuming we don't get more than 12 SuperModules..
-  int nTotalSMLG[12] = {0};
-  int nTotalSMHG[12] = {0};
+  // SM counters; decl. should be safe, assuming we don't get more than expected SuperModules..
+  int nTotalSMLG[AliEMCALGeoParams::fgkEMCALModules] = {0};
+  int nTotalSMHG[AliEMCALGeoParams::fgkEMCALModules] = {0};
+  int nTotalSMTRU[AliEMCALGeoParams::fgkEMCALModules] = {0};
+  int nTotalSMLGLEDMon[AliEMCALGeoParams::fgkEMCALModules] = {0};
+  int nTotalSMHGLEDMon[AliEMCALGeoParams::fgkEMCALModules] = {0};
 
   // indices for the reading
   int iSM = 0;
   int sample = 0;
-  int gain = 0;
   int time = 0;
   // counters, on sample level
   int i = 0; // the sample number in current event.
@@ -328,42 +420,78 @@ void AliEMCALQADataMakerRec::MakeRaws(AliRawReader* rawReader)
        rmsPed  = 0;
       }
 
-      //If we're here then we're done with this tower
-      gain = -1; // init to not valid value
-      if ( in.IsLowGain() ) {
-       gain = 0;
-      }
-      else if ( in.IsHighGain() ) {
-       gain = 1;
-      }
-      
       // it should be enough to check the SuperModule info for each DDL really, but let's keep it here for now
       iSM = in.GetModule(); //The modules are numbered starting from 0
 
       if (iSM>=0 && iSM<fSuperModules) { // valid module reading, can go on with filling
 
-       int towerId = iSM*nTowersPerSM + in.GetColumn()*nRows + in.GetRow();
-
-       if (gain == 0) { 
-         //fill the low gain histograms, and counters
-         nTotalSMLG[iSM]++; // one more channel found
-         GetRawsData(kSigLG)->Fill(towerId, max - min);
-         GetRawsData(kTimeLG)->Fill(towerId, maxTime);
-         if (nSum>0) { // only fill pedestal info in case it could be calculated
-           GetRawsData(kPedLG)->Fill(towerId, meanPed);
-           GetRawsData(kPedRMSLG)->Fill(towerId, rmsPed);
+       if ( in.IsLowGain() || in.IsHighGain() ) { // regular towers
+         int towerId = iSM*nTowersPerSM + in.GetColumn()*nRows + in.GetRow();
+
+         if ( in.IsLowGain() ) { 
+           //fill the low gain histograms, and counters
+           nTotalSMLG[iSM]++; // one more channel found
+           GetRawsData(kSigLG)->Fill(towerId, max - min);
+           GetRawsData(kTimeLG)->Fill(towerId, maxTime);
+           if (nSum>0) { // only fill pedestal info in case it could be calculated
+             GetRawsData(kPedLG)->Fill(towerId, meanPed);
+             GetRawsData(kPedRMSLG)->Fill(towerId, rmsPed);
+           }
+         } // gain==0
+         else if ( in.IsHighGain() ) {         
+           //fill the high gain ones
+           nTotalSMHG[iSM]++; // one more channel found
+           GetRawsData(kSigHG)->Fill(towerId, max - min);
+           GetRawsData(kTimeHG)->Fill(towerId, maxTime);
+           if (nSum>0) { // only fill pedestal info in case it could be calculated
+             GetRawsData(kPedHG)->Fill(towerId, meanPed);
+             GetRawsData(kPedRMSHG)->Fill(towerId, rmsPed);
+           }
          }
-       } // gain==0
-       else if (gain == 1) {           
-         //fill the high gain ones
-         nTotalSMHG[iSM]++; // one more channel found
-         GetRawsData(kSigHG)->Fill(towerId, max - min);
-         GetRawsData(kTimeHG)->Fill(towerId, maxTime);
+       } // low or high gain
+       // TRU
+       else if ( in.IsTRUData() ) {
+         // for TRU data, the mapping class holds the channel info in the Column..
+         int TRU2x2Id = iSM*n2x2PerSM + in.GetColumn();
+         
+         //fill the low gain histograms, and counters
+         nTotalSMTRU[iSM]++; // one more channel found
+         GetRawsData(kSigTRU)->Fill(TRU2x2Id, max - min);
+         GetRawsData(kTimeTRU)->Fill(TRU2x2Id, maxTime);
          if (nSum>0) { // only fill pedestal info in case it could be calculated
-           GetRawsData(kPedHG)->Fill(towerId, meanPed);
-           GetRawsData(kPedRMSHG)->Fill(towerId, rmsPed);
+           GetRawsData(kPedTRU)->Fill(TRU2x2Id, meanPed);
+           GetRawsData(kPedRMSTRU)->Fill(TRU2x2Id, rmsPed);
          }
        }
+       // LED Mon
+       else if ( in.IsLEDMonData() ) {
+         // for LED Mon data, the mapping class holds the gain info in the Row variable
+         // and the Strip number in the Column..
+         int gain = in.GetRow(); 
+         int stripId = iSM*nStripsPerSM + in.GetColumn();
+         
+         if ( gain == 0 ) { 
+           //fill the low gain histograms, and counters
+           nTotalSMLGLEDMon[iSM]++; // one more channel found
+           GetRawsData(kSigLGLEDMon)->Fill(stripId, max - min);
+           GetRawsData(kTimeLGLEDMon)->Fill(stripId, maxTime);
+           if (nSum>0) { // only fill pedestal info in case it could be calculated
+             GetRawsData(kPedLGLEDMon)->Fill(stripId, meanPed);
+             GetRawsData(kPedRMSLGLEDMon)->Fill(stripId, rmsPed);
+           }
+         } // gain==0
+         else if ( gain == 1 ) {               
+           //fill the high gain ones
+           nTotalSMHGLEDMon[iSM]++; // one more channel found
+           GetRawsData(kSigHGLEDMon)->Fill(stripId, max - min);
+           GetRawsData(kTimeHGLEDMon)->Fill(stripId, maxTime);
+           if (nSum>0) { // only fill pedestal info in case it could be calculated
+             GetRawsData(kPedHGLEDMon)->Fill(stripId, meanPed);
+             GetRawsData(kPedRMSHGLEDMon)->Fill(stripId, rmsPed);
+           }
+         } // low or high gain
+       } // LEDMon
+
       } // SM index OK
 
     }// end while over channel 
@@ -373,14 +501,26 @@ void AliEMCALQADataMakerRec::MakeRaws(AliRawReader* rawReader)
   // let's also fill the SM and event counter histograms
   int nTotalHG = 0;
   int nTotalLG = 0;
+  int nTotalTRU = 0;
+  int nTotalHGLEDMon = 0;
+  int nTotalLGLEDMon = 0;
   for (iSM=0; iSM<fSuperModules; iSM++) {  
     nTotalLG += nTotalSMLG[iSM]; 
     nTotalHG += nTotalSMHG[iSM]; 
+    nTotalTRU += nTotalSMTRU[iSM]; 
+    nTotalLG += nTotalSMLGLEDMon[iSM]; 
+    nTotalHG += nTotalSMHGLEDMon[iSM]; 
     GetRawsData(kNsmodLG)->Fill(iSM, nTotalSMLG[iSM]); 
     GetRawsData(kNsmodHG)->Fill(iSM, nTotalSMHG[iSM]); 
+    GetRawsData(kNsmodTRU)->Fill(iSM, nTotalSMTRU[iSM]); 
+    GetRawsData(kNsmodLGLEDMon)->Fill(iSM, nTotalSMLGLEDMon[iSM]); 
+    GetRawsData(kNsmodHGLEDMon)->Fill(iSM, nTotalSMHGLEDMon[iSM]); 
   }
   GetRawsData(kNtotLG)->Fill(nTotalLG);
   GetRawsData(kNtotHG)->Fill(nTotalHG);
+  GetRawsData(kNtotTRU)->Fill(nTotalTRU);
+  GetRawsData(kNtotLGLEDMon)->Fill(nTotalLGLEDMon);
+  GetRawsData(kNtotHGLEDMon)->Fill(nTotalHGLEDMon);
 
   // just in case the next rawreader consumer forgets to reset; let's do it here again..
   rawReader->Reset() ;
index 30a03bc..c6d6279 100644 (file)
@@ -26,10 +26,22 @@ class AliEMCALQADataMakerRec: public AliQADataMakerRec {
 
 public:
   //Histograms for Raw data control
-  enum HRawType_t {kNsmodLG,kNsmodHG,kTimeLG,kTimeHG,
-                  kSigLG,kSigHG,kNtotLG,kNtotHG,
-                  kPedLG,kPedHG,
-                  kPedRMSLG,kPedRMSHG} ;
+  enum HRawType_t { 
+    // first normal Low Gain and High Gain info
+    kNsmodLG,kNsmodHG,kTimeLG,kTimeHG,
+    kSigLG,kSigHG,kNtotLG,kNtotHG,
+    kPedLG,kPedHG,
+    kPedRMSLG,kPedRMSHG,
+    // then TRU info
+    kNsmodTRU,kTimeTRU,
+    kSigTRU,kNtotTRU,
+    kPedTRU,kPedRMSTRU,
+    // and also LED Mon info
+    kNsmodLGLEDMon,kNsmodHGLEDMon,kTimeLGLEDMon,kTimeHGLEDMon,
+    kSigLGLEDMon,kSigHGLEDMon,kNtotLGLEDMon,kNtotHGLEDMon,
+    kPedLGLEDMon,kPedHGLEDMon,
+    kPedRMSLGLEDMon,kPedRMSHGLEDMon
+  } ;
 
   //Histograms for RecPoints  control
   enum HRPType_t {kRecPE,kRecPM,kRecPDigM};
@@ -61,7 +73,7 @@ public:
 private:
   int fSuperModules; //The number of SuperModules activated
 
-  ClassDef(AliEMCALQADataMakerRec,2)  // description 
+  ClassDef(AliEMCALQADataMakerRec,3)  // description 
 
 };