Bug fixes after first data (A. Mastroserio)
authormasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 22 Jul 2009 22:40:18 +0000 (22:40 +0000)
committermasera <masera@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 22 Jul 2009 22:40:18 +0000 (22:40 +0000)
ITS/AliITSOnlineSPDfo.cxx
ITS/AliITSOnlineSPDfo.h
ITS/AliITSOnlineSPDfoAnalyzer.cxx
ITS/AliITSOnlineSPDfoAnalyzer.h
ITS/AliITSOnlineSPDfoInfo.cxx
ITS/AliITSOnlineSPDfoInfo.h
ITS/ITSSPDFOda.cxx

index 7ef678e..1e90838 100644 (file)
@@ -300,9 +300,10 @@ TArrayI AliITSOnlineSPDfo::GetDACscanParams() const
   }
 
  
   for(Int_t i=0; i<fNdacs; i++) {
-    dacs.AddAt(min.At(i),3*i);
-    dacs.AddAt(max.At(i),3*i+1);
+    dacs.AddAt(min.At(i),3*i);    
+    dacs.AddAt(max.At(i),3*i+1); 
     dacs.AddAt(step.At(i),3*i+2); 
   }
  
@@ -353,7 +354,8 @@ TArrayS AliITSOnlineSPDfo::CreateDACArray(const TArrayS dacs, const TArrayS dacI
     else if(dacId.At(i)==kIdCONVPOL) dacarray.AddAt(dacs.At(i),kCONVPOL);
     else if(dacId.At(i)==kIdCOMPREF) dacarray.AddAt(dacs.At(i),kCOMPREF);
     else if(dacId.At(i)==kIdPreVTH) dacarray.AddAt(dacs.At(i),kPreVTH);
-    else dacarray.AddAt(dacs.At(i),i);
+    else if(dacId.At(i)==kIdCGPOL) dacarray.AddAt(dacs.At(i),kCGPOL);
+    else printf("new DAC included in the scan??\n");
     
   }
  
index d126244..d348ff5 100644 (file)
@@ -26,7 +26,7 @@ class AliITSOnlineSPDfo {
   
   virtual ~AliITSOnlineSPDfo(){ delete fArray; delete fDACnames;} //dctor
  
-  enum {kFOPOL=0, kCONVPOL=1, kCOMPREF=2, kPreVTH=3, kIdFOPOL=20, kIdCONVPOL=17, kIdCOMPREF=16, kIdPreVTH=39};
+  enum {kFOPOL=0, kCONVPOL=1, kCOMPREF=2, kCGPOL =3, kPreVTH=4, kIdFOPOL=20, kIdCONVPOL=17, kIdCOMPREF=16, kIdCGPOL=14, kIdPreVTH=39};
   
   // GENERAL METHODS
   void    AddMeasurement(const TArrayS dac, Short_t measure[3], Int_t hs, Int_t chipId);
index 6f68a2c..3bb42c7 100644 (file)
@@ -207,18 +207,20 @@ Int_t AliITSOnlineSPDfoAnalyzer::Select(const AliITSOnlineSPDfoChip *chip) const
   Float_t counts = 0;
   
   Int_t processedconfigurations = chip->GetNumberOfChipConfigs();
-  if(fHighOccupancyCheck) processedconfigurations-=1;
+  
+  
   
   for(Int_t isteps =0; isteps < processedconfigurations; isteps++){ 
     
     Int_t matrixId = ((AliITSOnlineSPDfoChipConfig*)array->At(isteps))->GetChipConfigMatrixId();
     counts = (Float_t)(((AliITSOnlineSPDfoChipConfig*)array->At(isteps))->GetChipConfigCounter());
-    
     if(matrixId==0 && counts > 0) return -1;
+    if(fHighOccupancyCheck &&  matrixId ==6) continue;
     
     Float_t efficiency = counts/npulses;
     
-    if(isteps > 0){
+    if(matrixId > 0){
       Int_t response = IsSelected(efficiency);
       if( response >=0) {
        if(quality < response) quality = response;
@@ -234,7 +236,8 @@ Int_t AliITSOnlineSPDfoAnalyzer::IsSelected(Float_t eff) const
   //
   // returns the quality of the selection 
   //
-  for(Int_t i=0; i<3; i++){   
+  
+  for(Int_t i=0; i<3; i++){  
     if(eff <= 1.+ fGeneralThresholds[i] && eff >= 1. - fGeneralThresholds[i]  ) return i;
   }
   return -1;
@@ -248,6 +251,7 @@ void AliITSOnlineSPDfoAnalyzer::Process()
   // - if the 4-tuple survives the selection, the chip-related histograms are filled.
   // (- Per each histogram the mean values of each axis are taken)
   //
+  
   if(!fFOHandler) { 
     Warning("AliITSOnlineSPDfoAnalyzer::Process","no fo object. Exiting.. \n");
     return;
@@ -255,7 +259,6 @@ void AliITSOnlineSPDfoAnalyzer::Process()
   
   TKey *key;
   Double_t *dacvalues;
-  
   TIter iter((fFOHandler->GetFile())->GetListOfKeys());  
   while ((key = (TKey*)(iter.Next()))) {
     TString classname = key->GetClassName();
@@ -263,14 +266,15 @@ void AliITSOnlineSPDfoAnalyzer::Process()
     
     TObjArray *array = (TObjArray*)(fFOHandler->GetFile())->Get(key->GetName()); // array of chips corresponding to the DACS (size 1-60)
     if(!array){
-      printf("no array found! Exiting...");
+      printf("no array found! Exiting...\n");
       break; 
     }
     
     dacvalues = fFOHandler->GetDACvaluesD(key->GetName(), GetFOHandler()->GetFOscanInfo()->GetNumDACindex());
     
     for(Int_t i=0; i< array->GetSize(); i++){
-      AliITSOnlineSPDfoChip *chip = (AliITSOnlineSPDfoChip *)array->At(i);     
+      AliITSOnlineSPDfoChip *chip = (AliITSOnlineSPDfoChip *)array->At(i); 
+          
       if(!chip) continue;
       Int_t hs = chip->GetActiveHS();
       Int_t chipid = chip->GetChipId();     
@@ -291,7 +295,10 @@ void AliITSOnlineSPDfoAnalyzer::WriteToFile(TString outputfile)
   TFile * f = TFile::Open(outputfile.Data(),"recreate");
   for(Int_t ihs =0; ihs < 6; ihs++) {
     for(Int_t ichip =0; ichip < 10; ichip++){
-      for(Int_t i=0; i<kNqualityFlags ; i++ ) if(fNh[i][ihs][ichip]) f->WriteObjectAny(fNh[i][ihs][ichip],"THnSparse",Form("h%i_hs%i_chip%i",i,ihs,ichip));
+      for(Int_t i=0; i<kNqualityFlags ; i++ ) {
+      if(fNh[i][ihs][ichip]) f->WriteObjectAny(fNh[i][ihs][ichip],"THnSparse",Form("h%i_hs%i_chip%i",i,ihs,ichip));
+      }
+      
     }
   }
   f->Close();
@@ -327,7 +334,7 @@ void AliITSOnlineSPDfoAnalyzer::GetCanvases(const THnSparse *hn,Int_t hs, Int_t
   //
   //
   
-  if(!hn) {printf("no thnsparse...exiting!"); return;} 
+  if(!hn) {printf("no thnsparse...exiting!\n"); return;} 
   
   gStyle->SetPalette(1);
   
@@ -392,7 +399,8 @@ TArrayI AliITSOnlineSPDfoAnalyzer::ChooseDACValues(Int_t hs, Int_t chip) const
   // closest value to the mean point in the n-dimensional histogram
   // is taken.
   
-  TH1D *h=0x0; 
+  TH1D *tmp[5];
+  if(fNdims > 5) printf("AliITSOnlineSPDfoAnalyzer::ChooseDACValues -> N. of dimensions are more than expected! Break! \n");
   TArrayI dacs(fNdims+1);
   
   for(Int_t i=0; i<fNdims+1; i++) dacs.AddAt(-1,i);
@@ -402,18 +410,18 @@ TArrayI AliITSOnlineSPDfoAnalyzer::ChooseDACValues(Int_t hs, Int_t chip) const
     if(fNh[iqual][hs][chip]->GetEntries()==0) continue;
     for(Int_t idim =0; idim<fNdims; idim++){
       if(dacs.At(idim)>=0) continue;
-      h = fNh[iqual][hs][chip]->Projection(idim); 
-      dacs.AddAt((Int_t)h->GetBinLowEdge(h->GetMaximumBin()+1),idim);
+      tmp[idim] = fNh[iqual][hs][chip]->Projection(idim);
+      dacs.AddAt((Int_t)tmp[idim]->GetBinLowEdge(tmp[idim]->GetMaximumBin()+1),idim);
       Int_t bin=-1;
-      if(fFOHandler->GetFOscanInfo()->GetDACindex(idim)==fFOHandler->kIdPreVTH && CorrectPreVTHChioce(h,bin)) {
-       dacs.AddAt((Int_t)h->GetBinLowEdge(bin+1),idim);
+      if(fFOHandler->GetFOscanInfo()->GetDACindex(idim)==fFOHandler->kIdPreVTH && CorrectPreVTHChioce(tmp[idim],bin)) {
+       dacs.AddAt((Int_t)tmp[idim]->GetBinLowEdge(bin+1),idim);
       }
       dacs.AddAt(iqual,fNdims);
     }//idim
   }//iqual
   
   if(!IsExisting(dacs,hs,chip)  && dacs.At(fNdims)>-1) {   
-    TArrayI centraldacs = GetCentralDACS(dacs.At(fNdims),hs,chip,h);
+   TArrayI centraldacs = GetCentralDACS(dacs.At(fNdims),hs,chip,tmp);
     dacs = centraldacs;
   }
   return dacs; 
@@ -437,7 +445,7 @@ Bool_t AliITSOnlineSPDfoAnalyzer::IsExisting(TArrayI dacs,Int_t hs, Int_t chip)
   return isOk; 
 }
 //-----------------------------------------------------------
-TArrayI AliITSOnlineSPDfoAnalyzer::GetCentralDACS(Int_t qualityflag, Int_t hs, Int_t chip, const TH1D *hd) const
+TArrayI AliITSOnlineSPDfoAnalyzer::GetCentralDACS(Int_t qualityflag, Int_t hs, Int_t chip, TH1D **hd) const
 {
   //
   // This method gets the DAC values which are closest to the mean point in the N-dim histogram
@@ -449,9 +457,9 @@ TArrayI AliITSOnlineSPDfoAnalyzer::GetCentralDACS(Int_t qualityflag, Int_t hs, I
    
   Double_t *mean=new Double_t[fNdims];
   Int_t *goodbins=new Int_t[fNdims];
-  Double_t distance = 99999;
-  for(Int_t i=0; i<fNdims ;i++){ 
-    mean[i]=hd->GetMean();
+  Double_t distance = 9999999;
+    for(Int_t i=0; i<fNdims ;i++){ 
+    mean[i]=hd[i]->GetMean();
     goodbins[i]=0;
     dacs.AddAt(-1,i);
   }
@@ -464,7 +472,7 @@ TArrayI AliITSOnlineSPDfoAnalyzer::GetCentralDACS(Int_t qualityflag, Int_t hs, I
     fNh[qualityflag][hs][chip]->GetBinContent(in,bins);
     Double_t r2 = 0;  
     for(Int_t j=0; j<fNdims; j++) {
-      val[j]=hd->GetBinCenter(bins[j]);
+     val[j] = hd[j]->GetBinCenter(bins[j]);
       r2+=TMath::Power(val[j]-mean[j],2);
     }
     
@@ -474,12 +482,14 @@ TArrayI AliITSOnlineSPDfoAnalyzer::GetCentralDACS(Int_t qualityflag, Int_t hs, I
     }    
   }
   
-  for(Int_t k=0; k<fNdims; k++) {
-    Int_t a = (Int_t)( hd->GetBinCenter(goodbins[k]) + 0.5 *hd->GetBinWidth(goodbins[k]) ); 
-    dacs.AddAt(a,k);  
+  
+  for(Int_t k=0; k<fNdims; k++) {  
+   dacs.AddAt((Int_t)(hd[k]->GetBinCenter(goodbins[k]) + 0.5*hd[k]->GetBinWidth(goodbins[k])),k);
   }
   dacs.AddAt(qualityflag,fNdims);
   
+  
   delete mean;
   delete goodbins;
   delete bins;
@@ -546,28 +556,24 @@ Bool_t AliITSOnlineSPDfoAnalyzer::CorrectPreVTHChioce(const TH1D *h,Int_t &bin)
   //
   
   
-  Int_t maxbin = (Int_t)h->GetMaximum();
+  Int_t maxbin = (Int_t)h->GetMaximumBin();
   Double_t maxentries = h->GetBinContent(maxbin);
   
-  Int_t counts =0;
-  Int_t bins[10]={0,0,0,0,0,0,0,0,0,0};
-  Int_t binindex=0;
+  Int_t binindex = -1;
   Bool_t check=kFALSE;
 
-  for(Int_t i=0; i<= h->GetNbinsX(); i++){    
+  for(Int_t i=0; i< h->GetNbinsX(); i++){    
      if(h->GetBinContent(i) == maxentries){
-      counts++;
-      bins[binindex]=i;
-      binindex++;
+      if(binindex <= i) binindex =i;
     }
   }
   
-  if(counts>0) {
-    bin=bins[binindex-1];
+  
+  if(binindex>-1) {
+    bin=binindex;
     check = kTRUE; 
   }
   
   
   return check; 
 }
-
index cf129d2..5261dd3 100644 (file)
@@ -49,6 +49,7 @@ class AliITSOnlineSPDfoAnalyzer {
   void GetCanvases(const THnSparse *hn, Int_t ihs, Int_t ichip,Int_t iqual) const;
   TArrayI ChooseDACValues(Int_t ihs, Int_t ichip) const;
   TArrayI GetCentralDACS(Int_t qualityflag, Int_t hs, Int_t chip, const TH1D *hd) const;
+  TArrayI GetCentralDACS(Int_t qualityflag, Int_t hs, Int_t chip, TH1D **hd) const;
   AliITSOnlineSPDfo * GetFOHandler() const {return fFOHandler;}
   
  private:
@@ -64,3 +65,4 @@ class AliITSOnlineSPDfoAnalyzer {
 };
 
 #endif
+
index 32fff62..7154e69 100644 (file)
 ////////////////////////////////////////////////////////////////
 
 #include "AliITSOnlineSPDfoInfo.h"
+#include "AliLog.h"
 
 ClassImp(AliITSOnlineSPDfoInfo)
   
 //_____________________________________________________________________
 AliITSOnlineSPDfoInfo::AliITSOnlineSPDfoInfo(): 
  fRunNumber(0), fRouter(999), fNumTriggers(0),
- fDBversion(0), fNumDACindex(0), fDACindex(0)
-{}
+ fDBversion(0), fNumDACindex(0), fDACindex(0),
+ fActiveChipsAndHS()
+{
+for(Int_t i=0; i<60; i++) fActiveChipsAndHS.SetBitNumber(i,kFALSE);
+}
 //_____________________________________________________________________
 AliITSOnlineSPDfoInfo::~AliITSOnlineSPDfoInfo() 
 {}
@@ -42,6 +46,7 @@ void AliITSOnlineSPDfoInfo::ClearThis() {
   fDBversion=0;
   fNumDACindex=0;
   fDACindex.Reset();
+  for(Int_t i=0; i<60; i++) fActiveChipsAndHS.SetBitNumber(i,kFALSE);
 }
 //_____________________________________________________________________
 void AliITSOnlineSPDfoInfo::AddDACindex(Short_t index) {
@@ -56,3 +61,19 @@ Short_t AliITSOnlineSPDfoInfo::GetDACindex(UShort_t id) const {
   if (id>=fNumDACindex) return -1;
   else                  return fDACindex.At(id);
 }
+//_____________________________________________________________________
+Bool_t AliITSOnlineSPDfoInfo::IsActiveHS(UInt_t hs) const {
+  Bool_t isHS =kFALSE;
+  for(Int_t iChip =0; iChip<10; iChip++) isHS = IsActiveChip(hs,iChip);
+  return isHS;
+}
+//_____________________________________________________________________
+Bool_t AliITSOnlineSPDfoInfo::IsActiveChip(UInt_t hs, UInt_t chip) const {
+  if(hs > 5 || chip > 9) {
+    AliError(Form("hs %i or  chip %i  is out of range [hs=0-5  chip=0=9]\n",hs,chip));
+  return kFALSE;
+  }
+  return fActiveChipsAndHS.TestBitNumber(10*hs+chip);
+}
+//_____________________________________________________________________
+
index ee3f1ff..2fc242d 100644 (file)
@@ -14,6 +14,7 @@
 
 #include <TObject.h>
 #include <TArrayS.h>
+#include <TBits.h>
 
 class AliITSOnlineSPDfoInfo :  public TObject {
 
@@ -29,6 +30,7 @@ class AliITSOnlineSPDfoInfo :  public TObject {
   virtual void SetRouter(UShort_t val)   {fRouter=val;}
   virtual void SetNumTriggers(UInt_t val){fNumTriggers=val;}
   virtual void SetDBversion(Int_t val)   {fDBversion=val;}
+  void SetActiveChipsAndHS(UInt_t hs, UInt_t chip) {fActiveChipsAndHS.SetBitNumber(10*hs+chip);}
 
   // GETTERS
   UInt_t   GetRunNumber() const     {return fRunNumber;}
@@ -41,6 +43,10 @@ class AliITSOnlineSPDfoInfo :  public TObject {
 
   TArrayS GetDACIndexArray() const  {return fDACindex;}
 
+  Bool_t IsActiveHS(UInt_t hs) const ;
+  Bool_t IsActiveChip(UInt_t hs, UInt_t chip) const;
+  TBits  GetActiveChipsAndHS() const {return fActiveChipsAndHS;}
+
  protected:
   UInt_t   fRunNumber;   // run number
   UShort_t fRouter;      // router number (should be same as eq number)
@@ -49,8 +55,9 @@ class AliITSOnlineSPDfoInfo :  public TObject {
                         
   UShort_t fNumDACindex; // number of DAC indices in TArrayI below
   TArrayS  fDACindex;    // list of DAC indices related to each DAC value
+  TBits    fActiveChipsAndHS;
 
-  ClassDef(AliITSOnlineSPDfoInfo,1)
+  ClassDef(AliITSOnlineSPDfoInfo,2)
 };
     
 #endif
index 501cbc3..dc5c0b8 100644 (file)
@@ -239,6 +239,7 @@ int main(int argc, char **argv) {
             for(Int_t ihs =0; ihs < 6; ihs++) { // needed in the header to access the HS and ChipId info (in data it is different)
              for(Int_t ich =0; ich < 10; ich++){
                if(!str->GetFOHchipPresent(ihs, ich)) continue;
+                  info[eqId]->SetActiveChipsAndHS(ihs,ich);
                  Short_t measure[4] = {str->GetFOHMatrixID(),str->GetFOHpixelRow(), str->GetFOHpixelCol(), str->GetFOHchipCount(ihs,ich)}; 
                   fomanager[eqId]->AddMeasurement(dacs,measure,ihs,ich);                                            
              } // chip loop      
@@ -302,6 +303,7 @@ int main(int argc, char **argv) {
           if(dacs.GetSize() == 0) continue;
           for(Int_t idac =0; idac < dacs.GetSize() - 1; idac++) { // -1 (the last one is the quality flag)
             if(dacs.At(idac) >=0 ) {
+            
               dcsfile << ((analyzer->GetFOHandler())->GetFOscanInfo())->GetDACindex(idac) << ",";
               dcsfile << iff << ",";
               dcsfile << hs << ",";