]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Update of DAQ DAs for trunk version
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Apr 2008 07:26:46 +0000 (07:26 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 4 Apr 2008 07:26:46 +0000 (07:26 +0000)
TRD/AliTRDCalibPadStatus.cxx
TRD/AliTRDCalibPadStatus.h
TRD/AliTRDCalibraFillHisto.cxx
TRD/AliTRDCalibraFillHisto.h

index 7ad6608fe8a45fb08aa4fef0d0b40c0774eb9aba..5b48c791061df35e68b37c0198d391d23aab8f12 100644 (file)
@@ -95,7 +95,7 @@ AliTRDCalibPadStatus::AliTRDCalibPadStatus() : /*FOLD00*/
   TObject(),
   fGeo(0),
   fAdcMin(0),
-  fAdcMax(20),
+  fAdcMax(21),
   fDetector(-1),
   fNumberOfTimeBins(0),
   fCalRocArrayMean(540),
@@ -202,8 +202,10 @@ Int_t AliTRDCalibPadStatus::UpdateHisto(const Int_t icdet, /*FOLD00*/
   // Attention: the entry counter of the histogram is not increased
   //            this means that e.g. the colz draw option gives an empty plot
   Int_t bin = 0;
-  if ( !(((Int_t)csignal>fAdcMax ) || ((Int_t)csignal<fAdcMin)) )
+  if ( !(((Int_t)csignal>=fAdcMax ) || ((Int_t)csignal<fAdcMin)) )
     bin = (nbchannel+1)*(fAdcMax-fAdcMin+2)+((Int_t)csignal-fAdcMin+1);
+
+  //GetHisto(icdet,kTRUE)->Fill(csignal,nbchannel);
   
   GetHisto(icdet,kTRUE)->GetArray()[bin]++;
   
@@ -237,7 +239,7 @@ Int_t AliTRDCalibPadStatus::ProcessEvent(AliTRDrawStreamBase *rawStream, Bool_t
       Int_t iCol       = rawStream->GetCol();                            //  current col
       
 
-      Int_t iADC       = 21-rawStream->GetADC();                            //  current ADC
+      Int_t iADC       = 21-rawStream->GetADC();                         //  current ADC
       Int_t col        = 0;
       if(iADC == 1) col = 1;
       else {
@@ -251,7 +253,6 @@ Int_t AliTRDCalibPadStatus::ProcessEvent(AliTRDrawStreamBase *rawStream, Bool_t
       //Bool_t shared = rawStream->IsCurrentPadShared();                  
       //printf("ADC %d, iCol %d, col %d, mcm %d, shared %d\n",iADC,iCol,col,mcm,(Int_t)shared);
 
-      Int_t iTimeBin   = rawStream->GetTimeBin();                        //  current time bin
       Int_t *signal    = rawStream->GetSignals();                        //  current ADC signal
       Int_t nbtimebin  = rawStream->GetNumberOfTimeBins();               //  number of time bins read from data
 
@@ -261,12 +262,8 @@ Int_t AliTRDCalibPadStatus::ProcessEvent(AliTRDrawStreamBase *rawStream, Bool_t
       }
       fNumberOfTimeBins = nbtimebin;
       
-      Int_t fin        = TMath::Min(nbtimebin,(iTimeBin+3));
-      Int_t n          = 0;
-      
-      for(Int_t k = iTimeBin; k < fin; k++){
-       if(signal[n]>0) UpdateHisto(idetector,iRow,iCol,signal[n],iRowMax,col,mcm);
-       n++;
+      for(Int_t k = 0; k < fNumberOfTimeBins; k++){
+       if(signal[k]>0) UpdateHisto(idetector,iRow,iCol,signal[k],iRowMax,col,mcm);
       }
       
       withInput = 2;
@@ -291,21 +288,17 @@ Int_t AliTRDCalibPadStatus::ProcessEvent(AliTRDrawStreamBase *rawStream, Bool_t
       if(col > 1) mcm -= 1;      
       if(col ==1) mcm += 1;
 
-      Int_t iTimeBin   = rawStream->GetTimeBin();                        //  current time bin
       Int_t *signal    = rawStream->GetSignals();                        //  current ADC signal
       Int_t nbtimebin = rawStream->GetNumberOfTimeBins();               //  number of time bins read from data
       
-      Int_t fin        = TMath::Min(nbtimebin,(iTimeBin+3));
-      Int_t n          = 0;
-     
+      
       //printf("det %d, row %d, signal[0] %d, signal[1] %d, signal [2] %d\n", idetector, iRow, signal[0], signal[1], signal[2]);
  
-      for(Int_t k = iTimeBin; k < fin; k++){
-       if(signal[n]>0) {
-         UpdateHisto(idetector,iRow,iCol,signal[n],iRowMax,col,mcm);
+      for(Int_t k = 0; k < nbtimebin; k++){
+       if(signal[k]>0) {
+         UpdateHisto(idetector,iRow,iCol,signal[k],iRowMax,col,mcm);
          //printf("Update with det %d, row %d, col %d, signal %d, rowmax %d, col %d, mcm %d\n",idetector,iRow,iCol,signal[n],iRowMax,col,mcm);
        }
-       n++;
       }
       
       withInput = 2;
@@ -363,7 +356,7 @@ Int_t AliTRDCalibPadStatus::ProcessEvent(
 }
 
 //_____________________________________________________________________
-Bool_t AliTRDCalibPadStatus::TestEventHisto(Int_t nevent, Int_t sm) /*FOLD00*/
+Bool_t AliTRDCalibPadStatus::TestEventHisto(Int_t nevent, Int_t sm, Int_t ch) /*FOLD00*/
 {
   //
   //  Test event loop
@@ -373,12 +366,12 @@ Bool_t AliTRDCalibPadStatus::TestEventHisto(Int_t nevent, Int_t sm) /*FOLD00*/
   gRandom->SetSeed(0);
 
     for (Int_t ism=sm; ism<sm+1; ism++){
-               for (Int_t ich=0; ich < 5; ich++){
+               for (Int_t ich=ch; ich < ch+1; ich++){
            for (Int_t ipl=0; ipl < 6; ipl++){
              for(Int_t irow = 0; irow < fGeo->GetRowMax(ipl,ich,ism); irow++){
                for(Int_t icol = 0; icol < fGeo->GetColMax(ipl); icol++){
                  for (Int_t iTimeBin=0; iTimeBin<(30*nevent); iTimeBin++){
-                   Int_t signal=(Int_t)(gRandom->Gaus(10.0,1.2));
+                   Int_t signal=TMath::Nint(gRandom->Gaus(10,1.5));
                    if ( signal>0 )UpdateHisto((ipl+ich*6+ism*6*5),irow,icol,signal,fGeo->GetRowMax(ipl,ich,ism),0,0);
                  }
                }
@@ -432,7 +425,7 @@ TH2F* AliTRDCalibPadStatus::GetHisto(Int_t det, Bool_t force) /*FOLD00*/
     // if force is true create a new histogram if it doesn't exist allready
     //
     TObjArray *arr = &fHistoArray;
-    return GetHisto(det, arr, fAdcMax-fAdcMin, fAdcMin, fAdcMax, "Pedestal", force);
+    return GetHisto(det, arr, fAdcMax-fAdcMin, fAdcMin-0.5, fAdcMax-0.5, "Pedestal", force);
 }
 
 //_____________________________________________________________________
@@ -504,7 +497,7 @@ void AliTRDCalibPadStatus::AnalyseHisto() /*FOLD00*/
 
     Int_t nbinsAdc = fAdcMax-fAdcMin;
 
-    TVectorD param(3);
+    TVectorD param(4);
     TMatrixD dummy(3,3);
 
     Float_t *arrayHP=0;
@@ -516,6 +509,8 @@ void AliTRDCalibPadStatus::AnalyseHisto() /*FOLD00*/
          continue;
        }
 
+        //printf("Entries for %d\n",idet);
+
        AliTRDCalROC *rocMean     = GetCalRocMean(idet,kTRUE);
        AliTRDCalROC *rocRMS      = GetCalRocRMS(idet,kTRUE);
 
@@ -524,8 +519,8 @@ void AliTRDCalibPadStatus::AnalyseHisto() /*FOLD00*/
 
        for (Int_t iChannel=0; iChannel<nChannels; iChannel++){
             Int_t offset = (nbinsAdc+2)*(iChannel+1)+1;
-           Double_t ret = AliMathBase::FitGaus(arrayHP+offset,nbinsAdc,fAdcMin,fAdcMax,&param,&dummy);
-            // if the fitting failed set noise and pedestal to 0
+           Double_t ret = AliMathBase::FitGaus(arrayHP+offset,nbinsAdc,fAdcMin-0.5,fAdcMax-0.5,&param,&dummy);
+           // if the fitting failed set noise and pedestal to 0
            if ((ret==-4) || (ret==-1) || (ret==-2)) {
                param[1]=0.0;
                param[2]=0.0;
@@ -547,7 +542,7 @@ void AliTRDCalibPadStatus::AnalyseHisto() /*FOLD00*/
 
        for (Int_t iChannel=shift; iChannel<total; iChannel++){
             Int_t offset = (nbinsAdc+2)*(iChannel+1)+1;
-           Double_t ret = AliMathBase::FitGaus(arrayHP+offset,nbinsAdc,fAdcMin,fAdcMax,&param,&dummy);
+           Double_t ret = AliMathBase::FitGaus(arrayHP+offset,nbinsAdc,fAdcMin-0.5,fAdcMax-0.5,&param,&dummy);
             // if the fitting failed set noise and pedestal to 0
            if ((ret==-4) || (ret==-1) || (ret==-2)) {
                param[1]=0.0;
index 8c5b589f9e4f71efae2a92ee528952ee51dc8d64..3628c88ad37a892d83bbbfd8f101f697d874ed5f 100644 (file)
@@ -70,7 +70,7 @@ public:
   void    SetRangeAdc (Int_t aMin, Int_t aMax){ fAdcMin=aMin; fAdcMax=aMax; }  // Set adc range 
 
 
-  Bool_t TestEventHisto(Int_t nevent, Int_t sm);  //test the fast approach to fill histograms  
+  Bool_t TestEventHisto(Int_t nevent, Int_t sm, Int_t ch);  //test the fast approach to fill histograms  
 
  private:
 
index 70e77b400195e5153955b3a8c38c7f2e12544d90..d7fd816af75d87aeb3503b2bbedb4ed64b61d693 100644 (file)
@@ -340,9 +340,11 @@ Bool_t AliTRDCalibraFillHisto::Init2Dhistos()
   }
 
   // Some parameters
-  fTimeMax = cal->GetNumberOfTimeBins();
-  fSf      = parCom->GetSamplingFrequency();
-  fRelativeScale = 20;
+  fTimeMax            = cal->GetNumberOfTimeBins();
+  fSf                 = parCom->GetSamplingFrequency();
+  fRelativeScale      = 20;
+  fNumberClustersf    = fTimeMax;
+  fNumberClusters     = (Int_t)(0.6*fTimeMax);
  
   //calib object from database used for reconstruction
   if(fCalDetGain) delete fCalDetGain;
@@ -545,7 +547,7 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistograms(AliTRDtrack *t)
     ///////////////////////////////////////
     Int_t row = cl->GetPadRow();
     Int_t col = cl->GetPadCol();
-    CheckGoodTracklet(detector,row,col);
+    CheckGoodTrackletV1(cl);
     Int_t     group[2] = {0,0};
     if(fCH2dOn)  group[0]  = CalculateCalibrationGroup(0,row,col);
     if(fPH2dOn)  group[1]  = CalculateCalibrationGroup(1,row,col);
@@ -650,7 +652,7 @@ Bool_t AliTRDCalibraFillHisto::UpdateHistogramsV1(AliTRDtrackV1 *t)
       // Store the info bis of the tracklet
       Int_t row = cl->GetPadRow();
       Int_t col = cl->GetPadCol();
-      CheckGoodTracklet(detector,row,col);
+      CheckGoodTrackletV1(cl);
       Int_t     group[2] = {0,0};
       if(fCH2dOn)  group[0]  = CalculateCalibrationGroup(0,row,col);
       if(fPH2dOn)  group[1]  = CalculateCalibrationGroup(1,row,col);
@@ -1598,7 +1600,18 @@ Bool_t AliTRDCalibraFillHisto::HandlePRFtrackletV1(const AliTRDseedV1 *tracklet,
 // Pad row col stuff: see if masked or not
 ///////////////////////////////////////////////////////////////////////////////////////
 //_____________________________________________________________________________
-void AliTRDCalibraFillHisto::CheckGoodTracklet(Int_t detector, Int_t row, Int_t col)
+void AliTRDCalibraFillHisto::CheckGoodTrackletV1(AliTRDcluster *cl)
+{
+  //
+  // See if we are not near a masked pad
+  //
+
+  if(cl->IsMasked()) fGoodTracklet = kFALSE;
+
+  
+}
+//_____________________________________________________________________________
+void AliTRDCalibraFillHisto::CheckGoodTrackletV0(Int_t detector, Int_t row, Int_t col)
 {
   //
   // See if we are not near a masked pad
@@ -2122,7 +2135,7 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
   fMCMPrevious           = -1;
   fROBPrevious           = -1;
   Int_t nbtimebin = 0;                                        
-  Int_t baseline  = 0;  
+  Int_t baseline  = 10;  
 
 
   if(!nocheck){
@@ -2134,7 +2147,9 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       Int_t idetector = rawStream->GetDet();                            //  current detector
       Int_t imcm      = rawStream->GetMCM();                            //  current MCM
       Int_t irob      = rawStream->GetROB();                            //  current ROB
-      
+
+      //printf("Detector %d\n",idetector);
+
       if((fDetectorPreviousTrack != idetector) && (fDetectorPreviousTrack != -1)){
        
        // Fill
@@ -2160,9 +2175,11 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       if((fTimeMax != 0) && (nbtimebin != fTimeMax)) return 0;
       fTimeMax          = nbtimebin;
 
-      baseline          = rawStream->GetCommonAdditive();                // common additive baseline
-     
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
+      //baseline          = rawStream->GetCommonAdditive();                // common additive baseline
+      fNumberClustersf    = fTimeMax;
+      fNumberClusters     = (Int_t)(0.6*fTimeMax);
+
+
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t  col        = rawStream->GetCol();
       Int_t row         = rawStream->GetRow();    
@@ -2171,11 +2188,8 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
      
                 
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       phvalue[row][col][itime] = signal[n]-baseline;
-       n++;
+      for(Int_t itime = 0; itime < nbtimebin; itime++){
+       phvalue[row][col][itime] = signal[itime]-baseline;
       }
     }
     
@@ -2204,6 +2218,8 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       Int_t imcm      = rawStream->GetMCM();                            //  current MCM
       Int_t irob      = rawStream->GetROB();                            //  current ROB
 
+      //printf("Detector %d\n",idetector);
+
       if((fDetectorPreviousTrack != idetector) && (fDetectorPreviousTrack != -1)){
 
        // Fill
@@ -2223,22 +2239,20 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQ(AliTRDrawStreamBase *rawStream, Bo
       fMCMPrevious           = imcm;
       fROBPrevious           = irob;
 
-      baseline          = rawStream->GetCommonAdditive();                //  common baseline
+      //baseline          = rawStream->GetCommonAdditive();                //  common baseline
       
       fTimeMax          = rawStream->GetNumberOfTimeBins();              //  number of time bins read from data
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
+      fNumberClustersf    = fTimeMax;
+      fNumberClusters     = (Int_t)(0.6*fTimeMax);
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t col         = rawStream->GetCol();
       Int_t row         = rawStream->GetRow();   
 
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-    
+       
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
       
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       phvalue[row][col][itime] = signal[n]-baseline;
-       n++;
+      for(Int_t itime = 0; itime < fTimeMax; itime++){
+       phvalue[row][col][itime] = signal[itime]-baseline;
       }
     }
     
@@ -2286,7 +2300,7 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQV1(AliTRDrawStreamBase *rawStream,
   fROBPrevious           = -1;
   Int_t row              = -1;
   Int_t nbtimebin = 0;                                        
-  Int_t baseline  = 0;  
+  Int_t baseline  = 10;  
 
 
   if(!nocheck){
@@ -2332,23 +2346,20 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQV1(AliTRDrawStreamBase *rawStream,
       if(nbtimebin == 0) return 0;
       if((fTimeMax != 0) && (nbtimebin != fTimeMax)) return 0;
       fTimeMax          = nbtimebin;
+      fNumberClustersf  = fTimeMax;
+      fNumberClusters   = (Int_t)(0.6*fTimeMax);
       param->SetTimeRange(0,fTimeMax);
 
-      baseline          = rawStream->GetCommonAdditive();                // common additive baseline
+      //baseline          = rawStream->GetCommonAdditive();                // common additive baseline
      
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t  adc        = rawStream->GetADC();
     
       
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
      
-                
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       mcm.SetADC(adc,itime,(signal[n]-baseline));
-       n++;
+      for(Int_t itime = 0; itime < nbtimebin; itime++){
+       mcm.SetADC(adc,itime,(signal[itime]-baseline));
       }
     }
     
@@ -2397,23 +2408,20 @@ Int_t AliTRDCalibraFillHisto::ProcessEventDAQV1(AliTRDrawStreamBase *rawStream,
       fMCMPrevious           = imcm;
       fROBPrevious           = irob;
 
-      baseline          = rawStream->GetCommonAdditive();                //  common baseline
+      //baseline          = rawStream->GetCommonAdditive();                //  common baseline
       
       fTimeMax          = rawStream->GetNumberOfTimeBins();              //  number of time bins read from data
+      fNumberClustersf  = fTimeMax;
+      fNumberClusters   = (Int_t)(0.6*fTimeMax);
       param->SetTimeRange(0,fTimeMax);
-      Int_t iTimeBin    = rawStream->GetTimeBin();                       //  current time bin
       Int_t *signal     = rawStream->GetSignals();                       //  current ADC signal
       Int_t adc         = rawStream->GetADC();
        
-
-      Int_t fin     = TMath::Min(fTimeMax,(iTimeBin+3));
-      Int_t n       = 0;
-    
+      
       //printf("detector %d, signal[0] %d, signal[1] %d, signal[2] %d, baseline %d\n",idetector,signal[0],signal[1],signal[2], baseline);
       
-      for(Int_t itime = iTimeBin; itime < fin; itime++){
-       mcm.SetADC(adc,itime,(signal[n]-baseline));
-       n++;
+      for(Int_t itime = 0; itime < fTimeMax; itime++){
+       mcm.SetADC(adc,itime,(signal[itime]-baseline));
       }
     }
     
@@ -2612,12 +2620,12 @@ Int_t AliTRDCalibraFillHisto::UpdateHistogramcm(AliTRDmcmTracklet *trk)
   
   Int_t used = 1;
 
-  fGoodTracklet = kTRUE;
+  //fGoodTracklet = kTRUE;
 
   // Localisation of the Xbins involved
   Int_t idect = trk->GetDetector();
   Int_t idectrue = trk->GetDetector();
-  idect = 0;
+  //idect = 0;
 
   Int_t nbclusters = trk->GetNclusters();
   
@@ -2646,7 +2654,7 @@ Int_t AliTRDCalibraFillHisto::UpdateHistogramcm(AliTRDmcmTracklet *trk)
     Int_t   time   = trk->GetClusterTime(icl);
     Int_t   col    = trk->GetClusterCol(icl);
     
-    CheckGoodTracklet(idect,row,col);
+    //CheckGoodTrackletV0(idect,row,col);
     
     amp[0] = trk->GetClusterADC(icl)[0] * correction;
     amp[1] = trk->GetClusterADC(icl)[1] * correction;
@@ -2729,13 +2737,14 @@ Int_t AliTRDCalibraFillHisto::FillDAQ(Double_t phvalue[16][144][36]){
 
 
   Int_t idect = fDetectorPreviousTrack;      
+  //printf("Enter Detector %d\n",fDetectorPreviousTrack);
   Double_t sum[36];
   for(Int_t tb = 0; tb < 36; tb++){
     sum[tb] = 0.0;
   }
 
-  fGoodTracklet = kTRUE;
-  fDetectorPreviousTrack = 0;
+  //fGoodTracklet = kTRUE;
+  //fDetectorPreviousTrack = 0;  
 
 
   ///////////////////////////
@@ -2778,8 +2787,8 @@ Int_t AliTRDCalibraFillHisto::FillDAQ(Double_t phvalue[16][144][36]){
   //printf("imaxRow %d, imaxCol %d, fTimeMax %d, integralMax %f\n",imaxRow,imaxCol,fTimeMax, integralMax);
 
   if((imaxRow == 0) || (imaxCol == 0)) used=1;
-  CheckGoodTracklet(fDetectorPreviousTrack,imaxRow,imaxCol);
-  if(!fGoodTracklet) used = 1;;
+  //CheckGoodTrackletV0(fDetectorPreviousTrack,imaxRow,imaxCol);
+  //if(!fGoodTracklet) used = 1;;
   
   //  /////////////////////////////////////////////////////
   // sum ober 2 row and 4 pad cols for each time bins
@@ -2856,6 +2865,8 @@ Int_t AliTRDCalibraFillHisto::FillDAQ(Double_t phvalue[16][144][36]){
    
     //((TH2I *)GetCH2d()->Fill(sumcharge/30.0,fDetectorPreviousTrack));
     used = 2;
+    //printf("Pass Detector %d\n",fDetectorPreviousTrack);
+
   }
  
   return used;
index 830e210a5ab07a8fcdf6b612ef20d72eb5e2f381..ff0906de6d92a1d8d53b01acbddf835cba0d5994 100644 (file)
@@ -263,7 +263,8 @@ AliTRDCalibraVector *GetCalibraVector() const                                { r
   // row col calibration groups stuff
           Bool_t   LocalisationDetectorXbins(Int_t detector);
          Int_t    CalculateTotalNumberOfBins(Int_t i);
-         void     CheckGoodTracklet(Int_t detector, Int_t row, Int_t col);
+         void     CheckGoodTrackletV0(Int_t detector, Int_t row, Int_t col);
+         void     CheckGoodTrackletV1(AliTRDcluster *cl);
          Int_t    CalculateCalibrationGroup(Int_t i, Int_t row, Int_t col) const;
  
   // LinearFitter