Modification for reduced number of timebins
authorcblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Sep 2011 06:39:43 +0000 (06:39 +0000)
committercblume <cblume@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 2 Sep 2011 06:39:43 +0000 (06:39 +0000)
TRD/AliTRDCalibraFit.cxx
TRD/AliTRDCalibraFit.h

index 448d20b..ba002ed 100644 (file)
@@ -569,7 +569,6 @@ Double_t AliTRDCalibraFit::AnalyseCHAllTogether(const TH2I *ch)
   projch->SetEntries(nentries);
   //printf("The number of entries for the group %d is %f\n",idect,nentries);
   if (nentries > 0) {
-    fNumberEnt++;
     mean /= nentries;
   }
   // This detector has not enough statistics or was off
@@ -585,7 +584,7 @@ Double_t AliTRDCalibraFit::AnalyseCHAllTogether(const TH2I *ch)
     case 1: FitMean((TH1 *) projch, nentries, mean); break;
     case 2: FitCH((TH1 *) projch, mean); break;
     case 3: FitBisCH((TH1 *) projch, mean); break;
-    default: return kFALSE;
+    default: return -100.0;
     }
   delete fDebugStreamer;
   fDebugStreamer = 0x0;
@@ -595,7 +594,7 @@ Double_t AliTRDCalibraFit::AnalyseCHAllTogether(const TH2I *ch)
   
 }
 //________________functions fit Online PH2d____________________________________
-Bool_t AliTRDCalibraFit::AnalysePH(const TProfile2D *ph)
+Double_t AliTRDCalibraFit::AnalysePHAllTogether(const TProfile2D *ph)
 {
   //
   // Take the 1D profiles (average pulse height), projections of the 2D PH
@@ -604,72 +603,108 @@ Bool_t AliTRDCalibraFit::AnalysePH(const TProfile2D *ph)
   // A first calibration of T0 is also made  using the same method
   //
 
-  // Set the calibration mode
-  //const char *name = ph->GetTitle();
-  TString name = ph->GetTitle();
-  if(!SetModeCalibration(name,1)) return kFALSE;
-  
-  //printf("Mode calibration set\n");
-
   // Number of Xbins (detectors or groups of pads)
   Int_t    nbins   = ph->GetNbinsX();// time
   Int_t    nybins  = ph->GetNbinsY();// calibration group
-  if (!InitFit(nybins,1)) {
-    return kFALSE;
+  // Take the histo
+  TH1D *projph = (TH1D *) ph->ProjectionX("projph",1,nybins+1,(Option_t *) "e");
+  projph->SetDirectory(0); 
+  // Number of entries for this calibration group
+  Double_t nentries = 0;
+  for(Int_t idect = 0; idect < nybins; idect++){
+    for (Int_t k = 0; k < nbins; k++) {
+      Int_t binnb = (nbins+2)*(idect+1)+(k+1);
+      nentries += ph->GetBinEntries(binnb);
+    }
   }
+  //printf("AnalysePHAllTogether:: the number of entries is %f\n",nentries);
+  // This detector has not enough statistics or was off
+  if (nentries  <= fMinEntries) {
+    AliInfo(Form("There are %d entries for all together, it is not enough (%d)",(Int_t) nentries, fMinEntries));
+    if (fDebugLevel != 1) {
+      delete projph;
+    }
+    return -100.0;
+  }
+  //Method choosen
+  //printf("Method\n");
+  switch(fMethod)
+    {
+    case 0: FitLagrangePoly((TH1 *) projph); break;
+    case 1: FitPente((TH1 *) projph); break;
+    case 2: FitPH((TH1 *) projph,0); break;
+    default: return -100.0;
+    }
+  // Memory!!!
+  if (fDebugLevel != 1) {
+    delete projph;
+  }
+  delete fDebugStreamer;
+  fDebugStreamer = 0x0;
+  
+  if(fCurrentCoef[0] > 0.0) return fCurrentCoef[0];
+  else return -100.0;
+  
+}
+//____________Functions fit Online PH2d________________________________________
+Bool_t AliTRDCalibraFit::AnalysePH(AliTRDCalibraVector *calvect)
+{
+  //
+  // Reconstruct the average pulse height from the vectorPH for each
+  // calibration group
+  // Reconstruct a drift velocity
+  // A first calibration of T0 is also made  using the same method (slope method)
+  //
 
-  //printf("Init fit\n");
+  // Set the calibration mode
+  //const char *name = calvect->GetNamePH();
+  TString name = calvect->GetNamePH();
+  if(!SetModeCalibration(name,1)) return kFALSE;
 
+  // Number of Xbins (detectors or groups of pads)
+  if (!InitFit((432*calvect->GetDetCha0(1)+108*calvect->GetDetCha2(1)),1)) {
+    return kFALSE;
+  }
   if (!InitFitPH()) {
     return kFALSE;
   }
-
-  //printf("Init fit PH\n");
-
   fStatisticMean        = 0.0;
   fNumberFit            = 0;
   fNumberFitSuccess     = 0;
   fNumberEnt            = 0;
   // Init fCountDet and fCount
   InitfCountDetAndfCount(1);
-  //printf("Init Count Det and fCount %d, %d\n",fDect1,fDect2);
-
   // Beginning of the loop
   for (Int_t idect = fDect1; idect < fDect2; idect++) {
-    //printf("idect = %d\n",idect);
-    // Determination of fNnZ, fNnRphi, fNfragZ and fNfragRphi.......
+    // Determination of fNnZ, fNnRphi, fNfragZ and fNfragRphi...........
     UpdatefCountDetAndfCount(idect,1);
     ReconstructFitRowMinRowMax(idect,1);
     // Take the histo
-    TH1D *projph = (TH1D *) ph->ProjectionX("projph",idect+1,idect+1,(Option_t *) "e");
-    projph->SetDirectory(0); 
-    // Number of entries for this calibration group
-    Double_t nentries = 0;
-    for (Int_t k = 0; k < nbins; k++) {
-      Int_t binnb = (nbins+2)*(idect+1)+(k+1);
-      nentries += ph->GetBinEntries(binnb);
+    fEntriesCurrent = 0;
+    if(!calvect->GetPHEntries(fCountDet)) {
+      NotEnoughStatisticPH(idect,fEntriesCurrent);
+      continue;
     }
-    if (nentries > 0) {
-      fNumberEnt++;
-    }  
-    //printf("The number of entries for the group %d is %f\n",idect,nentries);
+    TString tname("PH");
+    tname += idect;
+    TH1F *projph  = calvect->CorrectTheError((TGraphErrors *) (calvect->ConvertVectorPHTGraphErrors(fCountDet,(idect-(fCount-(fCalibraMode->GetNfragZ(1)*fCalibraMode->GetNfragRphi(1)))),(const char *) tname)),fEntriesCurrent);
+    projph->SetDirectory(0);
+    if(fEntriesCurrent > 0) fNumberEnt++;
+    //printf("The number of entries for the group %d is %d\n",idect,fEntriesCurrent);
     // This detector has not enough statistics or was off
-    if (nentries  <= fMinEntries) {
-      //printf("Not enough statistic!\n");
-      NotEnoughStatisticPH(idect,nentries);     
-      if (fDebugLevel != 1) {
-       delete projph;
-      }
+    if (fEntriesCurrent <=  fMinEntries) {
+      //printf("Not enough stat!\n");
+      NotEnoughStatisticPH(idect,fEntriesCurrent);
       continue;
     }
-    // Statistics of the histos fitted
+    // Statistic of the histos fitted
     fNumberFit++;
-    fStatisticMean += nentries;
+    fStatisticMean += fEntriesCurrent;
     // Calcul of "real" coef
     CalculVdriftCoefMean();
     CalculT0CoefMean();
     //Method choosen
-    //printf("Method\n");
     switch(fMethod)
       {
       case 0: FitLagrangePoly((TH1 *) projph); break;
@@ -678,12 +713,9 @@ Bool_t AliTRDCalibraFit::AnalysePH(const TProfile2D *ph)
       default: return kFALSE;
       }
     // Fill the tree if end of a detector or only the pointer to the branch!!!
-    FillInfosFitPH(idect,nentries);
-    // Memory!!!
-    if (fDebugLevel != 1) {
-      delete projph;
-    }
+    FillInfosFitPH(idect,fEntriesCurrent);
   } // Boucle object
+  
   // Mean Statistic
   if (fNumberFit > 0) {
     AliInfo(Form("There are %d with at least one entries. %d fits have been proceeded (sucessfully or not...). There is a mean statistic of: %d over these fitted histograms and %d successfulled fits",fNumberEnt, fNumberFit, (Int_t) fStatisticMean/fNumberFit,fNumberFitSuccess));
@@ -696,64 +728,82 @@ Bool_t AliTRDCalibraFit::AnalysePH(const TProfile2D *ph)
   fDebugStreamer = 0x0;
   return kTRUE;
 }
-//____________Functions fit Online PH2d________________________________________
-Bool_t AliTRDCalibraFit::AnalysePH(AliTRDCalibraVector *calvect)
+//________________functions fit Online PH2d____________________________________
+Bool_t AliTRDCalibraFit::AnalysePH(const TProfile2D *ph)
 {
   //
-  // Reconstruct the average pulse height from the vectorPH for each
-  // calibration group
+  // Take the 1D profiles (average pulse height), projections of the 2D PH
+  // on the Xaxis, for each calibration group
   // Reconstruct a drift velocity
-  // A first calibration of T0 is also made  using the same method (slope method)
+  // A first calibration of T0 is also made  using the same method
   //
 
   // Set the calibration mode
-  //const char *name = calvect->GetNamePH();
-  TString name = calvect->GetNamePH();
+  //const char *name = ph->GetTitle();
+  TString name = ph->GetTitle();
   if(!SetModeCalibration(name,1)) return kFALSE;
+  
+  //printf("Mode calibration set\n");
 
   // Number of Xbins (detectors or groups of pads)
-  if (!InitFit((432*calvect->GetDetCha0(1)+108*calvect->GetDetCha2(1)),1)) {
+  Int_t    nbins   = ph->GetNbinsX();// time
+  Int_t    nybins  = ph->GetNbinsY();// calibration group
+  if (!InitFit(nybins,1)) {
     return kFALSE;
   }
+
+  //printf("Init fit\n");
+
   if (!InitFitPH()) {
     return kFALSE;
   }
+
+  //printf("Init fit PH\n");
+
   fStatisticMean        = 0.0;
   fNumberFit            = 0;
   fNumberFitSuccess     = 0;
   fNumberEnt            = 0;
   // Init fCountDet and fCount
   InitfCountDetAndfCount(1);
+  //printf("Init Count Det and fCount %d, %d\n",fDect1,fDect2);
+
   // Beginning of the loop
   for (Int_t idect = fDect1; idect < fDect2; idect++) {
-    // Determination of fNnZ, fNnRphi, fNfragZ and fNfragRphi...........
+    //printf("idect = %d\n",idect);
+    // Determination of fNnZ, fNnRphi, fNfragZ and fNfragRphi.......
     UpdatefCountDetAndfCount(idect,1);
     ReconstructFitRowMinRowMax(idect,1);
     // Take the histo
-    fEntriesCurrent = 0;
-    if(!calvect->GetPHEntries(fCountDet)) {
-      NotEnoughStatisticPH(idect,fEntriesCurrent);
-      continue;
+    TH1D *projph = (TH1D *) ph->ProjectionX("projph",idect+1,idect+1,(Option_t *) "e");
+    projph->SetDirectory(0); 
+    // Number of entries for this calibration group
+    Double_t nentries = 0;
+    for (Int_t k = 0; k < nbins; k++) {
+      Int_t binnb = (nbins+2)*(idect+1)+(k+1);
+      nentries += ph->GetBinEntries(binnb);
     }
-    TString tname("PH");
-    tname += idect;
-    TH1F *projph  = calvect->CorrectTheError((TGraphErrors *) (calvect->ConvertVectorPHTGraphErrors(fCountDet,(idect-(fCount-(fCalibraMode->GetNfragZ(1)*fCalibraMode->GetNfragRphi(1)))),(const char *) tname)),fEntriesCurrent);
-    projph->SetDirectory(0);
-    if(fEntriesCurrent > 0) fNumberEnt++;
-    //printf("The number of entries for the group %d is %d\n",idect,fEntriesCurrent);
+    if (nentries > 0) {
+      fNumberEnt++;
+    }  
+    //printf("The number of entries for the group %d is %f\n",idect,nentries);
     // This detector has not enough statistics or was off
-    if (fEntriesCurrent <=  fMinEntries) {
-      //printf("Not enough stat!\n");
-      NotEnoughStatisticPH(idect,fEntriesCurrent);
+    if (nentries  <= fMinEntries) {
+      //printf("Not enough statistic!\n");
+      NotEnoughStatisticPH(idect,nentries);     
+      if (fDebugLevel != 1) {
+       delete projph;
+      }
       continue;
     }
-    // Statistic of the histos fitted
+    // Statistics of the histos fitted
     fNumberFit++;
-    fStatisticMean += fEntriesCurrent;
+    fStatisticMean += nentries;
     // Calcul of "real" coef
     CalculVdriftCoefMean();
     CalculT0CoefMean();
     //Method choosen
+    //printf("Method\n");
     switch(fMethod)
       {
       case 0: FitLagrangePoly((TH1 *) projph); break;
@@ -762,9 +812,12 @@ Bool_t AliTRDCalibraFit::AnalysePH(AliTRDCalibraVector *calvect)
       default: return kFALSE;
       }
     // Fill the tree if end of a detector or only the pointer to the branch!!!
-    FillInfosFitPH(idect,fEntriesCurrent);
+    FillInfosFitPH(idect,nentries);
+    // Memory!!!
+    if (fDebugLevel != 1) {
+      delete projph;
+    }
   } // Boucle object
-  
   // Mean Statistic
   if (fNumberFit > 0) {
     AliInfo(Form("There are %d with at least one entries. %d fits have been proceeded (sucessfully or not...). There is a mean statistic of: %d over these fitted histograms and %d successfulled fits",fNumberEnt, fNumberFit, (Int_t) fStatisticMean/fNumberFit,fNumberFitSuccess));
@@ -1276,7 +1329,8 @@ Double_t AliTRDCalibraFit::AnalyseLinearFittersAllTogether(AliTRDCalibraVdriftLi
     }
   }
       
-      //printf("Find %d entries for the detector %d\n",arrayI[cb],cb);
+  //printf("AnalyseLinearFittersAllTogether::Find %d entries\n",entries);
+  //printf("Minstats %d\n",fMinEntries);
 
       // Eval the linear fitter
   if(entries > fMinEntries){
@@ -1286,7 +1340,7 @@ Double_t AliTRDCalibraFit::AnalyseLinearFittersAllTogether(AliTRDCalibraVdriftLi
       //printf("Take the param\n");
       linearfitter.GetParameters(par);
       //printf("Done\n");
-      //par.Print();
+      par.Print();
       //printf("Finish\n");
       // Put the fCurrentCoef
       fCurrentCoef[0]  = -par[1];
@@ -1696,7 +1750,10 @@ void AliTRDCalibraFit::RemoveOutliers2(Bool_t perdetector){
     for (Int_t row = 0; row < rowMax; row++) {
       for (Int_t col = 0; col < colMax; col++) {
        value = coef[(Int_t)(col*rowMax+row)];
-       if((value < 70.0) && (rmsAll > 0.0) && (TMath::Abs(value-meanAll) > (2.5*rmsAll))) coef[(Int_t)(col*rowMax+row)] = 100.0;
+       if((value < 70.0) && (rmsAll > 0.0) && (TMath::Abs(value-meanAll) > (2.5*rmsAll))) {
+         //printf("value outlier %f\n",value);
+         coef[(Int_t)(col*rowMax+row)] = 100.0;
+       }
       } // Col
     } // Row
   }
@@ -2108,6 +2165,7 @@ AliTRDCalDet *AliTRDCalibraFit::CreateDetObjectT0(const TObjArray *vectorFit, Bo
     Float_t min  = 100.0;
     if(perdetector){
       value = ((AliTRDFitInfo *) vectorFit->At(k))->GetCoef()[0];
+      //printf("Create det object %f for %d\n",value,k);
       // check successful
       if(value > 70.0) value = value-100.0;
       //
@@ -4402,7 +4460,7 @@ void AliTRDCalibraFit::FitPente(TH1* projPH)
 
     if (fPhdt0 >= 0.0) {
       fCurrentCoef2[0] = (fPhdt0 - t0Shift) / widbins;
-      if (fCurrentCoef2[0] < -1.0) {
+      if (fCurrentCoef2[0] < -3.0) {
         fCurrentCoef2[0] = fCurrentCoef2[1] + 100.0;
       }
     }
@@ -4977,7 +5035,8 @@ void AliTRDCalibraFit::FitLagrangePoly(TH1* projPH)
     else fNumberFitSuccess++;
     if (fPhdt0 >= 0.0) {
       fCurrentCoef2[0] = (fPhdt0 - t0Shift) / widbins;
-      if (fCurrentCoef2[0] < -1.0) {
+      //printf("Value of timeoffset %f\n",fCurrentCoef2[0]);
+      if (fCurrentCoef2[0] < -3.0) {
         fCurrentCoef2[0] = fCurrentCoef2[1] + 100.0;
       }
     }
@@ -4986,14 +5045,14 @@ void AliTRDCalibraFit::FitLagrangePoly(TH1* projPH)
     }
   }
   else {
-    //printf("Put default %f\n",-TMath::Abs(fCurrentCoef[1]));
+    ////printf("Put default %f\n",-TMath::Abs(fCurrentCoef[1]));
     fCurrentCoef[0]      = -TMath::Abs(fCurrentCoef[1]);
     
     if((fPhd[1] > fPhd[0]) &&
        (put)) {
       if (fPhdt0 >= 0.0) {
        fCurrentCoef2[0] = (fPhdt0 - t0Shift) / widbins;
-       if (fCurrentCoef2[0] < -1.0) {
+       if (fCurrentCoef2[0] < -3.0) {
          fCurrentCoef2[0] = fCurrentCoef2[1] + 100.0;
        }
       }
@@ -5041,7 +5100,7 @@ void AliTRDCalibraFit::FitLagrangePoly(TH1* projPH)
   //Provisoire
   //if(fCurrentCoef[0] > 1.7) fCurrentCoef[0] = -TMath::Abs(fCurrentCoef[1]);
   //if((fCurrentCoef2[0] > 2.6) || (fCurrentCoef2[0] < 2.1)) fCurrentCoef2[0] = fCurrentCoef2[1] + 100.0;
-  
+  //printf("Value of timeoffset final %f\n",fCurrentCoef2[0]);
   projPH->SetDirectory(0);
 
 }
index 177a29b..4c27c5f 100644 (file)
@@ -65,6 +65,7 @@ class AliTRDCalibraFit : public TObject {
   // Functions fit for PH       
   Bool_t   AnalysePH(const TProfile2D *ph);
   Bool_t   AnalysePH(AliTRDCalibraVector *calvect);
+  Double_t AnalysePHAllTogether(const TProfile2D *ph);
   
   // Functions fit for PRF
   Bool_t   AnalysePRF(const TProfile2D *prf);