]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCCalibTCF.cxx
Method added.
[u/mrichter/AliRoot.git] / TPC / AliTPCCalibTCF.cxx
index 491d62d7ea007cb3b8b1ce0c4613f187de2d09c9..5511e7ef98659f8efc78ec78877c65630b11e6b0 100644 (file)
@@ -33,6 +33,7 @@
 #include <TMinuit.h>
 #include <TH1F.h>
 #include <TH2F.h>
+#include <AliSysInfo.h>
 
 #include <TMath.h>
 #include <TNtuple.h>
@@ -51,7 +52,7 @@ ClassImp(AliTPCCalibTCF)
   
 AliTPCCalibTCF::AliTPCCalibTCF() :
   TNamed(),
-  fGateWidth(100),
+  fGateWidth(80),
   fSample(900),
   fPulseLength(500),
   fLowPulseLim(30),
@@ -150,10 +151,13 @@ void AliTPCCalibTCF::ProcessRawFile(const char *nameRawFile, const char *nameFil
 
   Int_t ievent=0;
   do {  
+    AliSysInfo::AddStamp(Form("start_event_%d",ievent), ievent,-1,-1);
     printf("Reading next event ... Nr: %d\n",ievent);
-    AliTPCRawStream rawStream(rawReader);
+    AliTPCRawStream *rawStream = new AliTPCRawStream(rawReader);
     rawReader->Select("TPC");
-    ProcessRawEvent(&rawStream, nameFileOut);
+    ProcessRawEvent(rawStream, nameFileOut);
+    delete rawStream;
+    AliSysInfo::AddStamp(Form("end_event_%d",ievent), ievent,-1,-1);
     ievent++;
   } while (rawReader->NextEvent());
 
@@ -197,6 +201,7 @@ void AliTPCCalibTCF::ProcessRawEvent(AliTPCRawStream *rawStream, const char *nam
     if (rawStream->IsNewRow()){ 
       sector = rawStream->GetSector();
       row    = rawStream->GetRow();
+      //  if (sector!=prevSec) AliSysInfo::AddStamp(Form("sector_%d_row_%d",sector,row), -1,sector,row);
     }
 
     Int_t pad = rawStream->GetPad();
@@ -230,7 +235,7 @@ void AliTPCCalibTCF::ProcessRawEvent(AliTPCRawStream *rawStream, const char *nam
        continue;
       } else {
        // still the same pad, save signal to temporary histogram
-       if (time<=fSample+fGateWidth && time>fGateWidth) {
+       if ( (time<=fSample+fGateWidth) && (time>=fGateWidth)) {
          tempHis->SetBinContent(time,signal);
        }
       }   
@@ -244,7 +249,7 @@ void AliTPCCalibTCF::ProcessRawEvent(AliTPCRawStream *rawStream, const char *nam
       Int_t maxpos =  tempHis->GetMaximumBin();
       
       Int_t first = (Int_t)TMath::Max(maxpos-10, 0);
-      Int_t last  = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample);
+      Int_t last  = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample+fGateWidth);
       
       // simple baseline substraction ? better one needed ? (pedestalsubstr.?)
       // and RMS calculation with timebins before the pulse and at the end of
@@ -286,7 +291,7 @@ void AliTPCCalibTCF::ProcessRawEvent(AliTPCRawStream *rawStream, const char *nam
       }
       
       // Decision if found pulse is a proper one according to given tresholds
-      if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && (intHist/intPulse)<fRatioIntLim && binRatio >= 0.1) {
+      if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && (intHist/intPulse)<fRatioIntLim && (binRatio >= 0.1) ) {
        char hname[100];
        sprintf(hname,"sec%drow%dpad%d",prevSec,prevRow,prevPad);
        
@@ -295,13 +300,13 @@ void AliTPCCalibTCF::ProcessRawEvent(AliTPCRawStream *rawStream, const char *nam
        if (!his ) { // new entry (pulse in new pad found)
          
          his = new TH1F(hname,hname, fPulseLength+4, 0, fPulseLength+4);
-         his->SetBinContent(1,1);       //  pulse counter (1st pulse)
+         his->SetBinContent(1,1);        //  pulse counter (1st pulse)
          his->SetBinContent(2,prevSec);  //  sector
          his->SetBinContent(3,prevRow);  //  row
          his->SetBinContent(4,prevPad);  //  pad         
        
          for (Int_t ipos=0; ipos<last-first; ipos++){
-           Int_t signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
+           signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
            his->SetBinContent(ipos+5,signal);
          }
          his->Write(hname);
@@ -311,7 +316,7 @@ void AliTPCCalibTCF::ProcessRawEvent(AliTPCRawStream *rawStream, const char *nam
        
          his->AddBinContent(1,1); //  pulse counter for each pad
          for (Int_t ipos=0; ipos<last-first; ipos++){
-           Int_t signal= (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
+           signal= (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
            his->AddBinContent(ipos+5,signal);
          }
          printf("adding ...  %s: Signal %d at bin %d \n", hname, max-(Int_t)baseline, maxpos+fGateWidth);
@@ -670,30 +675,30 @@ void AliTPCCalibTCF::TestTCFonRawFile(const char *nameRawFile, const char *nameF
   do {
 
     printf("Reading next event ... Nr:%d\n",ievent);
-    AliTPCRawStream rawStream(rawReader);
+    AliTPCRawStream *rawStream = new AliTPCRawStream(rawReader);
     rawReader->Select("TPC");
     ievent++;
 
-    Int_t sector = rawStream.GetSector();
-    Int_t row    = rawStream.GetRow();
+    Int_t sector = rawStream->GetSector();
+    Int_t row    = rawStream->GetRow();
 
     Int_t prevSec  = 999999;
     Int_t prevRow  = 999999;
     Int_t prevPad  = 999999;
     Int_t prevTime = 999999;
 
-    while (rawStream.Next()) {
+    while (rawStream->Next()) {
     
-      if (rawStream.IsNewRow()){
-       sector = rawStream.GetSector();
-       row    = rawStream.GetRow();
+      if (rawStream->IsNewRow()){
+       sector = rawStream->GetSector();
+       row    = rawStream->GetRow();
       }
       
-      Int_t pad = rawStream.GetPad();
-      Int_t time = rawStream.GetTime();
-      Int_t signal = rawStream.GetSignal();
+      Int_t pad = rawStream->GetPad();
+      Int_t time = rawStream->GetTime();
+      Int_t signal = rawStream->GetSignal();
       
-      if (!rawStream.IsNewPad()) { // Reading signal from one Pad 
+      if (!rawStream->IsNewPad()) { // Reading signal from one Pad 
 
        // this pad always gave a useless signal, probably induced by the supply
        // voltage of the gate signal (date:2008-Aug-07)
@@ -713,7 +718,7 @@ void AliTPCCalibTCF::TestTCFonRawFile(const char *nameRawFile, const char *nameF
        }
 
        if (time>prevTime) {
-         //      printf("Wrong time: %d %d\n",rawStream.GetTime(),prevTime);
+         //      printf("Wrong time: %d %d\n",rawStream->GetTime(),prevTime);
          continue;
        } else {
          // still the same pad, save signal to temporary histogram
@@ -727,7 +732,7 @@ void AliTPCCalibTCF::TestTCFonRawFile(const char *nameRawFile, const char *nameF
        Int_t maxpos =  tempHis->GetMaximumBin();
        
        Int_t first = (Int_t)TMath::Max(maxpos-10, 0);
-       Int_t last  = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample);
+       Int_t last  = TMath::Min((Int_t)maxpos+fPulseLength-10, fSample+fGateWidth);
        
 
        // simple baseline substraction ? better one needed ? (pedestalsubstr.?)
@@ -770,7 +775,7 @@ void AliTPCCalibTCF::TestTCFonRawFile(const char *nameRawFile, const char *nameF
 
 
        // Decision if found pulse is a proper one according to given tresholds
-       if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && intHist/intPulse<fRatioIntLim && binRatio >= 0.1){
+       if (max>lowLim && max<upLim && !((last-first)<fPulseLength) && rms<fRMSLim && intHist/intPulse<fRatioIntLim && (binRatio >= 0.1) ){
          // note:
          // assuming that lowLim is higher than the pedestal value!
          char hname[100];
@@ -782,7 +787,7 @@ void AliTPCCalibTCF::TestTCFonRawFile(const char *nameRawFile, const char *nameF
           his->SetBinContent(4,prevPad);  //  pad
 
          for (Int_t ipos=0; ipos<last-first; ipos++){
-          Int_t signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
+          signal = (Int_t)(tempHis->GetBinContent(ipos+first)-baseline);
           his->SetBinContent(ipos+5,signal);
          }
            
@@ -810,7 +815,10 @@ void AliTPCCalibTCF::TestTCFonRawFile(const char *nameRawFile, const char *nameF
 
     printf("Finished to read event ... \n");   
 
-} while (rawReader->NextEvent()); // event loop
+    delete rawStream;
+
+
+  } while (rawReader->NextEvent()); // event loop
 
   printf("Finished to read file - close output file ... \n");
   
@@ -841,9 +849,12 @@ TH2F *AliTPCCalibTCF::PlotOccupSummary2Dhist(const char *nameFileIn, Int_t side)
   TIter next(fileIn.GetListOfKeys());
 
   TH2F * his2D = new TH2F("his2D","his2D", 250,-250,250,250,-250,250);
+
   AliTPCROC * roc  = AliTPCROC::Instance();
 
   Int_t nHist=fileIn.GetNkeys();
+  if (!nHist) { return 0; }
+
   Int_t iHist = 0;
   Float_t xyz[3];
 
@@ -856,7 +867,7 @@ TH2F *AliTPCCalibTCF::PlotOccupSummary2Dhist(const char *nameFileIn, Int_t side)
   Int_t pad = 0;
 
   while ((key = (TKey *) next())) { // loop over histograms within the file
-    iHist+=1;
+    iHist++;
     his = (TH1F*)fileIn.Get(key->GetName()); // copy object to memory
 
     npulse = (Int_t)his->GetBinContent(1);
@@ -864,14 +875,14 @@ TH2F *AliTPCCalibTCF::PlotOccupSummary2Dhist(const char *nameFileIn, Int_t side)
     row = (Int_t)his->GetBinContent(3);
     pad = (Int_t)his->GetBinContent(4);
 
-    if (side==0 && sec%36>=18) continue;
-    if (side>0 && sec%36<18) continue;
+    if ( (side==0) && (sec%36>=18) ) continue;
+    if ( (side>0) && (sec%36<18) ) continue;
 
-    if (row==-1 & pad==-1) { // summed pulses per sector
+    if ( (row==-1) && (pad==-1) ) { // summed pulses per sector
       // fill all pad with this values
-      for (UInt_t row=0; row<roc->GetNRows(sec); row++) {
-        for (UInt_t pad=0; pad<roc->GetNPads(sec,row); pad++) {
-          roc->GetPositionGlobal(sec,row,pad,xyz);
+      for (UInt_t rowi=0; rowi<roc->GetNRows(sec); rowi++) {
+        for (UInt_t padi=0; padi<roc->GetNPads(sec,rowi); padi++) {
+          roc->GetPositionGlobal(sec,rowi,padi,xyz);
           binx = 1+TMath::Nint((xyz[0]+250.)*0.5);
           biny = 1+TMath::Nint((xyz[1]+250.)*0.5);
           his2D->SetBinContent(binx,biny,npulse);
@@ -888,6 +899,9 @@ TH2F *AliTPCCalibTCF::PlotOccupSummary2Dhist(const char *nameFileIn, Int_t side)
   }
   his2D->SetXTitle("x (cm)");
   his2D->SetYTitle("y (cm)");
+  his2D->SetStats(0);
+
+  his2D->DrawCopy("colz");
 
   if (!side) {
     gPad->SetTitle("A side");
@@ -895,7 +909,6 @@ TH2F *AliTPCCalibTCF::PlotOccupSummary2Dhist(const char *nameFileIn, Int_t side)
     gPad->SetTitle("C side");
   }
 
-  his2D->DrawCopy("colz");
   return his2D;
 }
 
@@ -909,7 +922,6 @@ void AliTPCCalibTCF::PlotOccupSummary(const char *nameFile, Int_t side, Int_t nP
   //
 
   TFile *file = new TFile(nameFile,"READ");
-
   TH1F *his;
   TKey *key;
   TIter next( file->GetListOfKeys() );
@@ -918,27 +930,28 @@ void AliTPCCalibTCF::PlotOccupSummary(const char *nameFile, Int_t side, Int_t nP
   char nameFileOut[100];
   sprintf(nameFileOut,"Occup-%s",nameFile);
   TFile fileOut(nameFileOut,"RECREATE");
-  fileOut.cd();
+  // fileOut.cd();
 
   TNtuple *ntuple = new TNtuple("ntuple","ntuple","x:y:z:npulse");
-  //  ntuple->SetDirectory(0); // force to be memory resistent
+  // ntuple->SetDirectory(0); // force to be memory resistent
 
   Int_t nHist=file->GetNkeys();
+  if (!nHist) { return; }
   Int_t iHist = 0;
+
+  Int_t secWise = 0;
+
   while ((key = (TKey *) next())) { // loop over histograms within the file
-    iHist+=1;
     his = (TH1F*)file->Get(key->GetName()); // copy object to memory
-
+    iHist++;
     Int_t npulse = (Int_t)his->GetBinContent(1);
     Int_t sec = (Int_t)his->GetBinContent(2);
     Int_t row = (Int_t)his->GetBinContent(3);
     Int_t pad = (Int_t)his->GetBinContent(4);
 
-    //    if (side==0 && sec%36>=18) continue;
-    //    if (side>0 && sec%36<18) continue;
-
-    if (row==-1 & pad==-1) { // summed pulses per sector
+    if ( (row==-1) && (pad==-1) ) { // summed pulses per sector
       row = 40; pad = 40;    // set to approx middle row for better plot
+      secWise=1;
     }
 
     Float_t *pos = new Float_t[3];
@@ -950,9 +963,8 @@ void AliTPCCalibTCF::PlotOccupSummary(const char *nameFile, Int_t side, Int_t nP
     }
     pos->~Float_t();
   }
 
-  if (iHist<72) { // pulse per sector
+  if (secWise) { // pulse per sector
     ntuple->SetMarkerStyle(8);
     ntuple->SetMarkerSize(4);
   } else {        // pulse per Pad
@@ -963,13 +975,18 @@ void AliTPCCalibTCF::PlotOccupSummary(const char *nameFile, Int_t side, Int_t nP
   if (!side) {
     sprintf(cSel,"z>0&&npulse>=%d",nPulseMin);
     ntuple->Draw("y:x:npulse",cSel,"colz");
-    gPad->SetTitle("A side");
   } else {
     sprintf(cSel,"z<0&&npulse>=%d",nPulseMin);
     ntuple->Draw("y:x:npulse",cSel,"colz");
+  }
+
+  if (!side) {
+    gPad->SetTitle("A side");
+  } else {
     gPad->SetTitle("C side");
   }
 
+
   ntuple->Write();
   fileOut.Close();
   file->Close();
@@ -1010,12 +1027,12 @@ void AliTPCCalibTCF::PlotQualitySummary(const char *nameFileQuality, const char
   gStyle->SetLabelOffset(-0.01,"Y");
   gStyle->SetLabelOffset(-0.03,"Z");
 
-  gPad->SetPhi(0.1);gPad->SetTheta(90);
-
   his2D->GetXaxis()->SetTitle("max. undershot [ADC]");
   his2D->GetYaxis()->SetTitle("width Reduction [%]");
 
   his2D->DrawCopy(pOpt);
+
+  gPad->SetPhi(0.1);gPad->SetTheta(90);
   
   his2D->~TH2F();
   
@@ -1028,19 +1045,18 @@ Int_t AliTPCCalibTCF::FitPulse(TNtuple *dataTuple, Double_t *coefZ, Double_t *co
   //
  
   // initialize TMinuit with a maximum of 8 params
-  TMinuit *gMinuit = new
- TMinuit(8);
-  gMinuit->mncler();                    // Reset Minuit's list of paramters
-  gMinuit->SetPrintLevel(-1);           // No Printout
-  gMinuit->SetFCN(AliTPCCalibTCF::FitFcn); // To set the address of the 
+  TMinuit *minuitFit = new TMinuit(8);
+  minuitFit->mncler();                    // Reset Minuit's list of paramters
+  minuitFit->SetPrintLevel(-1);           // No Printout
+  minuitFit->SetFCN(AliTPCCalibTCF::FitFcn); // To set the address of the 
                                            // minimization function  
-  gMinuit->SetObjectFit(dataTuple);
+  minuitFit->SetObjectFit(dataTuple);
   
   Double_t arglist[10];
   Int_t ierflg = 0;
   
   arglist[0] = 1;
-  gMinuit->mnexcm("SET ERR", arglist ,1,ierflg);
+  minuitFit->mnexcm("SET ERR", arglist ,1,ierflg);
   
   // Set standard starting values and step sizes for each parameter
   // upper and lower limit (in a reasonable range) are set to improve 
@@ -1050,31 +1066,31 @@ Int_t AliTPCCalibTCF::FitPulse(TNtuple *dataTuple, Double_t *coefZ, Double_t *co
   static Double_t min[8]    = {100,  3.,  0.1, 0.2,  3.,  60.,  0.,  2.0};
   static Double_t max[8]    = {200, 20.,   5.,  3., 30., 300., 20., 2.5};
   
-  gMinuit->mnparm(0, "A1", vstart[0], step[0], min[0], max[0], ierflg);
-  gMinuit->mnparm(1, "A2", vstart[1], step[1], min[1], max[1], ierflg);
-  gMinuit->mnparm(2, "A3", vstart[2], step[2], min[2], max[2], ierflg);
-  gMinuit->mnparm(3, "T1", vstart[3], step[3], min[3], max[3], ierflg);
-  gMinuit->mnparm(4, "T2", vstart[4], step[4], min[4], max[4], ierflg);
-  gMinuit->mnparm(5, "T3", vstart[5], step[5], min[5], max[5], ierflg);
-  gMinuit->mnparm(6, "T0", vstart[6], step[6], min[6], max[6], ierflg);
-  gMinuit->mnparm(7, "TTP", vstart[7], step[7], min[7], max[7],ierflg);
-  gMinuit->FixParameter(7); // 2.24 ... out of pulserRun Fit (->IRF)
+  minuitFit->mnparm(0, "A1", vstart[0], step[0], min[0], max[0], ierflg);
+  minuitFit->mnparm(1, "A2", vstart[1], step[1], min[1], max[1], ierflg);
+  minuitFit->mnparm(2, "A3", vstart[2], step[2], min[2], max[2], ierflg);
+  minuitFit->mnparm(3, "T1", vstart[3], step[3], min[3], max[3], ierflg);
+  minuitFit->mnparm(4, "T2", vstart[4], step[4], min[4], max[4], ierflg);
+  minuitFit->mnparm(5, "T3", vstart[5], step[5], min[5], max[5], ierflg);
+  minuitFit->mnparm(6, "T0", vstart[6], step[6], min[6], max[6], ierflg);
+  minuitFit->mnparm(7, "TTP", vstart[7], step[7], min[7], max[7],ierflg);
+  minuitFit->FixParameter(7); // 2.24 ... out of pulserRun Fit (->IRF)
 
   // Now ready for minimization step
   arglist[0] = 2000;   // max num of iterations
   arglist[1] = 0.1;    // tolerance
 
-  gMinuit->mnexcm("MIGRAD", arglist ,2,ierflg);
+  minuitFit->mnexcm("MIGRAD", arglist ,2,ierflg);
   
   Double_t p1 = 0.0 ;
-  gMinuit->mnexcm("SET NOW", &p1 , 0, ierflg) ;  // No Warnings
+  minuitFit->mnexcm("SET NOW", &p1 , 0, ierflg) ;  // No Warnings
   
   if (ierflg == 4) { // Fit failed
     for (Int_t i=0;i<3;i++) { 
       coefP[i] = 0; 
       coefZ[i] = 0; 
     }
-    gMinuit->~TMinuit();
+    minuitFit->~TMinuit();
     return 0;
   } else { // Fit successfull
 
@@ -1083,7 +1099,7 @@ Int_t AliTPCCalibTCF::FitPulse(TNtuple *dataTuple, Double_t *coefZ, Double_t *co
     for (Int_t i=0;i<6;i++) {
       Double_t err = 0;
       Double_t val = 0;
-      gMinuit->GetParameter(i,val,err);
+      minuitFit->GetParameter(i,val,err);
       fitParam[i] = val;
     } 
     
@@ -1099,7 +1115,7 @@ Int_t AliTPCCalibTCF::FitPulse(TNtuple *dataTuple, Double_t *coefZ, Double_t *co
    
     fitParam->~Double_t();
     valuePZ->~Double_t();
-    gMinuit->~TMinuit();
+    minuitFit->~TMinuit();
 
     return 1;
 
@@ -1176,7 +1192,7 @@ Double_t* AliTPCCalibTCF::ExtractPZValues(Double_t *param) {
   if (param[3]==param[4]) {param[3]=param[3]+0.0001;}
   if (param[5]==param[4]) {param[5]=param[5]+0.0001;}
   
-  if ((param[5]>param[4])&(param[5]>param[3])) {
+  if ((param[5]>param[4])&&(param[5]>param[3])) {
     if (param[4]>=param[3]) {
       vA1 = param[0];  vA2 = param[1];  vA3 = param[2];
       vTT1 = param[3]; vTT2 = param[4]; vTT3 = param[5];
@@ -1184,7 +1200,7 @@ Double_t* AliTPCCalibTCF::ExtractPZValues(Double_t *param) {
       vA1 = param[1];  vA2 = param[0];  vA3 = param[2];
       vTT1 = param[4]; vTT2 = param[3]; vTT3 = param[5];
     }
-  } else if ((param[4]>param[5])&(param[4]>param[3])) {
+  } else if ((param[4]>param[5])&&(param[4]>param[3])) {
     if (param[5]>=param[3]) {
       vA1 = param[0];  vA2 = param[2];  vA3 = param[1];
       vTT1 = param[3]; vTT2 = param[5]; vTT3 = param[4];
@@ -1192,7 +1208,7 @@ Double_t* AliTPCCalibTCF::ExtractPZValues(Double_t *param) {
       vA1 = param[2];  vA2 = param[0];  vA3 = param[1];
       vTT1 = param[5]; vTT2 = param[3]; vTT3 = param[4];
     }
-  } else if ((param[3]>param[4])&(param[3]>param[5])) {
+  } else if ((param[3]>param[4])&&(param[3]>param[5])) {
     if (param[5]>=param[4]) {
       vA1 = param[1];  vA2 = param[2];  vA3 = param[0];
       vTT1 = param[4]; vTT2 = param[5]; vTT3 = param[3];
@@ -1727,8 +1743,8 @@ void AliTPCCalibTCF::MergeToOneFile(const char *nameFileSum) {
   TKey *key;
 
   // just delete the file entries ...
-  TFile fileSum(nameFileSum,"RECREATE");
-  fileSum.Close();
+  TFile fileSumD(nameFileSum,"RECREATE");
+  fileSumD.Close();
 
   char nameFileSumSec[100];
 
@@ -1747,7 +1763,7 @@ void AliTPCCalibTCF::MergeToOneFile(const char *nameFileSum) {
 
       printf("Sector file %s found\n",nameFileSumSec);
       TIter next(fileSumSec->GetListOfKeys());
-      while(key=(TKey*)next()) {
+      while( (key=(TKey*)next()) ) {
         const char *hisName = key->GetName();
 
         hisIn=(TH1F*)fileSumSec->Get(hisName);