]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TPC/AliTPCMonitor.cxx
skim task first usable version
[u/mrichter/AliRoot.git] / TPC / AliTPCMonitor.cxx
index 268e38672648598d5e838452e4a5ba5c2d1b1f34..31afb15d1fcc72d881f71fdf92ec66ad97e22d07 100755 (executable)
@@ -43,7 +43,7 @@ New TPC monitoring package from Stefan Kniege. The monitoring package can be sta
 //// e.g baseline and baseline rms are calculated and stored. 
 //// 
 //// Author: Stefan Kniege, IKF, Frankfurt
-////       
+////         Jens Wiechula, Uni Tuebingen (Jens.Wiechula@cern.ch)
 ////
 /////////////////////////////////////////////////////////////////////////
 
@@ -54,6 +54,8 @@ New TPC monitoring package from Stefan Kniege. The monitoring package can be sta
 #include "AliTPCMonitorMappingHandler.h"
 #include "AliTPCMonitorFFT.h"
 #include "AliRawReader.h"
+#include "AliRawReaderDateOnline.h"
+#include "AliRawReaderRoot.h"
 #include "AliRawEventHeaderBase.h"
 #include "AliAltroRawStreamV3.h"
 #include "TH2F.h" 
@@ -65,6 +67,7 @@ New TPC monitoring package from Stefan Kniege. The monitoring package can be sta
 #include "TROOT.h" 
 #include "TDirectory.h"
 #include "TSystem.h"
+#include "TString.h"
 #include "TPaveText.h"   
 #include "TFile.h"
 #include <Riostream.h>
@@ -79,7 +82,7 @@ const Int_t AliTPCMonitor::fgkHwMaskAltroChip        = 0x0070;
 const Int_t AliTPCMonitor::fgkHwMaskRCU              = 0x7000;                          
 
 //____________________________________________________________________________
-AliTPCMonitor::AliTPCMonitor(char* name, char* title) : 
+AliTPCMonitor::AliTPCMonitor(const char* name, const char* title) : 
 AliTPCMonitorConfig(name,title),
 fPad(new Int_t*[GetMaxHwAddr()]),
 fPadMapHw(new Float_t[GetMaxHwAddr()]),
@@ -149,7 +152,12 @@ fMapEqidsRcu(new Int_t[1000]),
 fMirror(1),
 fChannelIter(0),
 fMapHand(0),
-fRawReader(0)
+fRawReader(0),
+fkMonTable(0x0),
+fMonTableString(""),
+fMonTableArray(0x0),
+fMonTableChanged(kFALSE)
+
 {
   // Constructor
   
@@ -246,7 +254,11 @@ fMapEqidsRcu(new Int_t[1000]),
 fMirror(monitor.fMirror),
 fChannelIter(monitor.fChannelIter),
 fMapHand(monitor.fMapHand),
-fRawReader(monitor.fRawReader)
+fRawReader(monitor.fRawReader),
+fkMonTable(0x0),
+fMonTableString(""),
+fMonTableArray(0x0),
+fMonTableChanged(kFALSE)
 {
   // copy constructor
   
@@ -358,7 +370,10 @@ AliTPCMonitor &AliTPCMonitor:: operator= (const AliTPCMonitor& monitor)
     fLdcIdOld=monitor.fLdcIdOld;
     fMapHand=monitor.fMapHand;
     fRawReader=monitor.fRawReader;
-    
+    fkMonTable=0x0;
+    fMonTableString="";
+    fMonTableArray=0x0;
+    fMonTableChanged=kFALSE;
     
     fHistList = new TObjArray();
     fHistIROC=(TH2F*)monitor.fHistIROC->Clone(); fHistList->Add(fHistIROC);
@@ -547,14 +562,20 @@ Int_t AliTPCMonitor::ReadDataNew(Int_t secid)
   // Read Data File/Stream  for specified Format.
   // Payload will be extracted from either ROOT or DATE format
   // and passed to FillHistsDecode for decoding of the adc information
+
+  if (TString(GetLastProcFile())!=GetFile() || fMonTableChanged) {
+    delete fRawReader;
+    fRawReader=0x0;
+  }
   
   if (!fRawReader){
-    fRawReader = AliRawReader::Create(GetFile());
-    SetLastProcFile(GetFile());
-  } else if (strcmp(GetLastProcFile(),GetFile())!=0){
-    delete fRawReader;
-    fRawReader = AliRawReader::Create(GetFile());
-//     printf("New file!!!\n");
+    TString file(GetFile());
+    if (file.BeginsWith("mem://")){
+      file.ReplaceAll("mem://","");
+      fRawReader = new AliRawReaderDateOnline(file.Data(),fkMonTable);
+    }else{
+      fRawReader = AliRawReader::Create(GetFile());
+    }
     SetLastProcFile(GetFile());
   }
   
@@ -567,7 +588,10 @@ Int_t AliTPCMonitor::ReadDataNew(Int_t secid)
   while(skip && GetProcNextEvent())
   {
     if(fVerb) cout << "AliTPCMonitor::ReadDataNew get event " << endl;
-    if(!fRawReader->NextEvent()) { AliError("Could not get next Event"); return 11 ;}
+    if(fRawReader->IsA()==AliRawReaderRoot::Class()){
+      AliInfo(Form("Root, NextEvent: %d\n",GetEventID()));
+      if (!fRawReader->GotoEvent(GetEventID())){AliError("Could not get next Event"); return 11 ;}
+    } else if(!fRawReader->NextEvent()) { AliError("Could not get next Event"); return 11 ;}
     // skip all events but physics, calibration and software trigger events!
     UInt_t eventType=fRawReader->GetType();
     if ( !(eventType==AliRawEventHeaderBase::kPhysicsEvent ||
@@ -575,18 +599,36 @@ Int_t AliTPCMonitor::ReadDataNew(Int_t secid)
            eventType==AliRawEventHeaderBase::kSystemSoftwareTriggerEvent ||
            eventType==AliRawEventHeaderBase::kDetectorSoftwareTriggerEvent) ) {
              if (fVerb) cout<< "Skipping event! Its neither of 'physics, calibration and software trigger event'" << endl;
+             if(fRawReader->IsA()==AliRawReaderRoot::Class()){
+               if (fEventNumber<fRawReader->GetNumberOfEvents()-1) ++fEventNumber;
+               else {AliError("No more events");return 11;}
+             }
              continue;
            }
     skip=kFALSE;
     //test if the TPC has data
     UChar_t *data=0;
     fRawReader->Select("TPC");
-    if (!fRawReader->ReadNextData(data)) skip=kTRUE;
-    fEventNumber = fRawReader->GetEventIndex();
-    fEventNumberOld = fRawReader->GetEventIndex();
+    Int_t eventNr=fRawReader->GetEventIndex();
+    if (!fRawReader->ReadNextData(data)) {
+      skip=kTRUE;
+      AliInfo(Form("%d / %d",fEventNumber,fRawReader->GetNumberOfEvents()));
+      if(fRawReader->IsA()==AliRawReaderRoot::Class()){
+        if (fEventNumber<fRawReader->GetNumberOfEvents()-1){
+          ++eventNr;
+//           printf("inc conter\n");
+        }
+        else {
+          AliError("No more events");
+          return 11;
+        }
+      }
+    }
+    fEventNumber = eventNr;
+    fEventNumberOld = eventNr;
   }
   
-//   printf("secid: %d\n",secid);
+  AliInfo(Form("secid: %d",secid));
   
   //========================== Histogram filling ======================
   ResetHistos() ;
@@ -612,23 +654,29 @@ Int_t AliTPCMonitor::ReadDataNew(Int_t secid)
     rcupatch      = GetRCUPatch(fRunId, fEqId);
     Int_t rcupatchSector=rcupatch%6;
     lastrcuid     = (rcupatch+1000);
-//     printf("RCU patch: %d, LDC: %d, EqId: %d\n",rcupatch, fLdcId, fEqId);
+
+    Int_t currentSector=rcupatch/6;
+    
     if(fLdcIdOld!=fLdcId &&  fChannelIter!=0) {
       if(secid==-1)
       {
         FillGlobal(GetLastSector());
         ResetArrays();
-//         printf("filled sector: %d\n",GetLastSector());
+        if (fVerb) printf("filled sector: %d\n",GetLastSector());
         fChannelIter =0;
       }
-      else
-      {
-        return lastrcuid;
+//       else
+//       {
+//         printf("RET: filled sector: %d\n",GetLastSector());
+//         return lastrcuid;
 //         if (rcupatch/6!=secid) continue;
-      }
+//       }
 //       fChannelIter=0;
     }
+    
     if (!CheckEqId(secid,fEqId)) continue;
+    if (fVerb) printf("Sector: %d, RCU patch: %d, LDC: %d, EqId: %d\n",currentSector,rcupatch, fLdcId, fEqId);
+    
     while ( altro->NextChannel() ){
       hw=altro->GetHWAddress();
       nextHwAddress         = ( hw + (rcupatchSector<<12) );
@@ -808,8 +856,8 @@ void AliTPCMonitor::ResetHistos()
   // Reset all but
   for(Int_t i =0; i<fHistList->GetEntries(); i++)
   {
-    if(GetProcNextEvent()==0 && strcmp(((TH1*)fHistList->At(i))->GetName(),"SIDE A")==0) continue;
-    if(GetProcNextEvent()==0 && strcmp(((TH1*)fHistList->At(i))->GetName(),"SIDE C")==0) continue;
+    TString name=fHistList->At(i)->GetName();
+    if(GetProcNextEvent()==0 && (name=="SIDE A" || name=="SIDE C")) continue;
     ((TH1*)fHistList->At(i))->Reset();
   }
   ResetArrays();
@@ -840,24 +888,24 @@ Int_t AliTPCMonitor::CheckEqId(Int_t secid,Int_t eqid)
   //skip all eqids which do not belong to the TPC
   if ( eqid<768||eqid>983 ) return 0;
   //
-  if(fRunId<704 && 0) // commented out --> runs with runid < 704 in 2006 are not recognized anymore
-  {
-    if( (secid>-1) && (secid<36) )   // if ( secid is in range) { take only specific eqids}  else { take all }
-    {
-      if(      (secid==13) && ( eqid!=408 && eqid!=409  &&  eqid!=509 && eqid!=512  && eqid!=513 && eqid!=517 )) {passed=0;}
-      else if( (secid==4)  && ( eqid!=404 && eqid!=504  &&  eqid!=407 && eqid!=503  && eqid!=508 && eqid!=506 )) {passed=0;}
-    }
-    else                                                                   {if(fVerb) cout << "passed check "<< endl; }
-  }
-  else
-  {
+//   if(fRunId<704 && 0) // commented out --> runs with runid < 704 in 2006 are not recognized anymore
+//   {
+//     if( (secid>-1) && (secid<36) )   // if ( secid is in range) { take only specific eqids}  else { take all }
+//     {
+//       if(      (secid==13) && ( eqid!=408 && eqid!=409  &&  eqid!=509 && eqid!=512  && eqid!=513 && eqid!=517 )) {passed=0;}
+//       else if( (secid==4)  && ( eqid!=404 && eqid!=504  &&  eqid!=407 && eqid!=503  && eqid!=508 && eqid!=506 )) {passed=0;}
+//     }
+//     else                                                                   {if(fVerb) cout << "passed check "<< endl; }
+//   }
+//   else
+//   {
     if( (secid>-1) && (secid<36) )   // if ( secid is in range) { take only specific eqids}  else { take all }
     {
       if(eqid!=fMapEqidsSec[secid][0] && eqid!= fMapEqidsSec[secid][1] && eqid!=fMapEqidsSec[secid][2] &&
          eqid!=fMapEqidsSec[secid][3] && eqid!= fMapEqidsSec[secid][4] && eqid!=fMapEqidsSec[secid][5] )  {passed=0;}
     }
     else                                                                   {if(fVerb) cout << "passed check "<< endl;}
-  }
+//   }
   
   return passed;
 }
@@ -922,6 +970,7 @@ void AliTPCMonitor::FillGlobal(Int_t sector)
     {
       pad    = fMapHand->GetPad(   hw);
       row    = fMapHand->GetPadRow(hw);
+      if (row==-1) continue;
       padmax = fMapHand->GetNumofPads(row);
       if (sector%36>17) fMirror=-1;
       else fMirror=1;
@@ -995,20 +1044,20 @@ void AliTPCMonitor::DrawHists(Int_t histos)
   
   
   if(fVerb)    cout << " Draw histos " << endl;
-  Char_t cside[10];
-  if(GetLastSector()/18==0 ) sprintf(cside,"A");
-  else                       sprintf(cside,"C");
+  TString cside;
+  if(GetLastSector()/18==0 ) cside="A";
+  else                       cside="C";
   
-  Char_t titleSEC[256];   sprintf(titleSEC   ,"Sector %i Side %s Run : %05i EventID %i "       ,GetLastSector()%18,cside,fRunId, fEventNumber);
-  Char_t titleEvent[256]; sprintf(titleEvent ,"Time <-> Channles  %s"                          ,titleSEC);
-  Char_t titleIROC[256];  sprintf(titleIROC  ,"IROC %s"                                        ,titleSEC);
-  Char_t titleOROC[256];  sprintf(titleOROC  ,"OROC %s"                                        ,titleSEC);
+  TString titleSEC  = Form("Sector %i Side %s Run : %05i EventID %i "       ,GetLastSector()%18,cside.Data(),fRunId, fEventNumber);
+  TString titleEvent= Form("Time <-> Channles  %s"                          ,titleSEC.Data());
+  TString titleIROC = Form("IROC %s"                                        ,titleSEC.Data());
+  TString titleOROC = Form("OROC %s"                                        ,titleSEC.Data());
   
-  Char_t titleMAX[256];   sprintf(titleMAX   ,"Max (timebin: %i,%i) %s"                        ,GetRangeMaxAdcMin(),GetRangeMaxAdcMax(),titleSEC);
-  Char_t titleSUM[256];   sprintf(titleSUM   ,"Sum (timebin: %i,%i) %s"                        ,GetRangeSumMin()   ,GetRangeSumMax()   ,titleSEC);
-  Char_t titleBASE[256];  sprintf(titleBASE  ,"Baseline RMS<->Mean  (timebin: %i-%i) %s"       ,GetRangeBaseMin()  ,GetRangeBaseMax()  ,titleSEC);
-  Char_t titleMEAN[256];  sprintf(titleMEAN  ,"Baseline Mean (timebin: %i-%i) %s"              ,GetRangeBaseMin()  ,GetRangeBaseMax()  ,titleSEC);
-  Char_t titleRMS[256] ;  sprintf(titleRMS   ,"Baseline RMS (timebin: %i-%i) %s"               ,GetRangeBaseMin()  ,GetRangeBaseMax()  ,titleSEC);
+  TString titleMAX  = Form("Max (timebin: %i,%i) %s"                        ,GetRangeMaxAdcMin(),GetRangeMaxAdcMax(),titleSEC.Data());
+  TString titleSUM  = Form("Sum (timebin: %i,%i) %s"                        ,GetRangeSumMin()   ,GetRangeSumMax()   ,titleSEC.Data());
+  TString titleBASE = Form("Baseline RMS<->Mean  (timebin: %i-%i) %s"       ,GetRangeBaseMin()  ,GetRangeBaseMax()  ,titleSEC.Data());
+  TString titleMEAN = Form("Baseline Mean (timebin: %i-%i) %s"              ,GetRangeBaseMin()  ,GetRangeBaseMax()  ,titleSEC.Data());
+  TString titleRMS  = Form("Baseline RMS (timebin: %i-%i) %s"               ,GetRangeBaseMin()  ,GetRangeBaseMax()  ,titleSEC.Data());
   
   if(histos==1)
   {
@@ -1026,14 +1075,14 @@ void AliTPCMonitor::DrawHists(Int_t histos)
     fHistIROC->SetYTitle("pad");
     if(GetPedestals()) fHistIROC->SetZTitle("max ADC (baseline sub)");
     else               fHistIROC->SetZTitle("max ADC ");
-    fHistIROC->SetTitle(titleIROC);
+    fHistIROC->SetTitle(titleIROC.Data());
     fHistIROC->SetMinimum(0.01);
     fHistIROC->Draw("COLZ");
     ciroc->UseCurrentStyle();
     
     
-    fHistIROCTime->SetXTitle("row"); fHistIROCTime->SetZTitle("peak time (fit)");       fHistIROCTime->SetYTitle("pad");      fHistIROCTime->SetTitle(titleIROC);
-    fHistIROCRMS->SetXTitle("row");  fHistIROCRMS->SetZTitle( "baseline rms (ADC)");    fHistIROCRMS->SetYTitle("pad");       fHistIROCRMS->SetTitle(titleIROC);
+    fHistIROCTime->SetXTitle("row"); fHistIROCTime->SetZTitle("peak time (fit)");       fHistIROCTime->SetYTitle("pad");      fHistIROCTime->SetTitle(titleIROC.Data());
+    fHistIROCRMS->SetXTitle("row");  fHistIROCRMS->SetZTitle( "baseline rms (ADC)");    fHistIROCRMS->SetYTitle("pad");       fHistIROCRMS->SetTitle(titleIROC.Data());
     
       // OROC
     TCanvas* coroc = 0;
@@ -1048,24 +1097,38 @@ void AliTPCMonitor::DrawHists(Int_t histos)
     fHistOROC->SetYTitle("pad");
     if(GetPedestals()) fHistOROC->SetZTitle("max ADC (baseline sub)");
     else               fHistOROC->SetZTitle("max ADC ");
-    fHistOROC->SetTitle(titleOROC);
+    fHistOROC->SetTitle(titleOROC.Data());
     fHistOROC->SetMinimum(0.01);
     fHistOROC->Draw("COLZ");
     coroc->UseCurrentStyle();
     
     
-    fHistOROCTime->SetXTitle("row"); fHistOROCTime->SetZTitle("peak time (fit) (timebins)"); fHistOROCTime->SetYTitle("pad"); fHistOROCTime->SetTitle(titleOROC);
-    fHistOROCRMS->SetXTitle("row");  fHistOROCRMS->SetZTitle("baseline rms (ADC)");          fHistOROCRMS->SetYTitle("pad");  fHistOROCRMS->SetTitle(titleOROC);
+    fHistOROCTime->SetXTitle("row"); fHistOROCTime->SetZTitle("peak time (fit) (timebins)"); fHistOROCTime->SetYTitle("pad"); fHistOROCTime->SetTitle(titleOROC.Data());
+    fHistOROCRMS->SetXTitle("row");  fHistOROCRMS->SetZTitle("baseline rms (ADC)");          fHistOROCRMS->SetYTitle("pad");  fHistOROCRMS->SetTitle(titleOROC.Data());
+    
+    // SUM
+    TString namesum=Form("ADC sum (bins: %i, %i)",GetRangeSumMin() ,GetRangeSumMax() );
+    fHistIROCSUM->SetXTitle("row");
+    fHistIROCSUM->SetZTitle(namesum.Data());
+    fHistIROCSUM->SetYTitle("pad");
+    fHistIROCSUM->SetTitle(titleIROC.Data());
+    
+    fHistOROCSUM->SetXTitle("row");
+    fHistOROCSUM->SetZTitle(namesum);
+    fHistOROCSUM->SetYTitle("pad");
+    fHistOROCSUM->SetTitle(titleOROC.Data());
     
-      // SUM
-    Char_t namesum[256] ; sprintf(namesum,"ADC sum (bins: %i, %i)",GetRangeSumMin() ,GetRangeSumMax() );
-    fHistIROCSUM->SetXTitle("row");      fHistIROCSUM->SetZTitle(namesum);      fHistIROCSUM->SetYTitle("pad");      fHistIROCSUM->SetTitle(titleIROC);
-    fHistOROCSUM->SetXTitle("row");      fHistOROCSUM->SetZTitle(namesum);      fHistOROCSUM->SetYTitle("pad");      fHistOROCSUM->SetTitle(titleOROC);
+    // BASE
+    TString namebase=Form("base mean (timbebin: %i, %i )",GetRangeBaseMin(),GetRangeBaseMax());
+    fHistIROCBASE->SetXTitle("row");
+    fHistIROCBASE->SetZTitle(namebase.Data());
+    fHistIROCBASE->SetYTitle("pad");
+    fHistIROCBASE->SetTitle(titleIROC.Data());
     
-      // BASE
-    Char_t namebase[256] ; sprintf(namebase ,"base mean (timbebin: %i, %i )",GetRangeBaseMin(),GetRangeBaseMax());
-    fHistIROCBASE->SetXTitle("row"); fHistIROCBASE->SetZTitle(namebase);  fHistIROCBASE->SetYTitle("pad");      fHistIROCBASE->SetTitle(titleIROC);
-    fHistOROCBASE->SetXTitle("row"); fHistOROCBASE->SetZTitle(namebase);  fHistOROCBASE->SetYTitle("pad");      fHistOROCBASE->SetTitle(titleOROC);
+    fHistOROCBASE->SetXTitle("row");
+    fHistOROCBASE->SetZTitle(namebase);
+    fHistOROCBASE->SetYTitle("pad");
+    fHistOROCBASE->SetTitle(titleOROC.Data());
     
     if(fHistIROCClone) fHistIROCClone->Delete();
     if(fHistOROCClone) fHistOROCClone->Delete();
@@ -1075,15 +1138,13 @@ void AliTPCMonitor::DrawHists(Int_t histos)
       // Executables
     if(fExecPlaneMax==0)
     {
-      Char_t carry1[100];
-      sprintf(carry1,".x %s/TPC/AliTPCMonitorExec.C(1)",gSystem->Getenv("ALICE_ROOT"));
-      ciroc->AddExec("pad",carry1);
-      coroc->AddExec("pad",carry1);
+      TString carry1=Form(".x %s/TPC/AliTPCMonitorExec.C(1)",gSystem->Getenv("ALICE_ROOT"));
+      ciroc->AddExec("pad",carry1.Data());
+      coroc->AddExec("pad",carry1.Data());
       
-      Char_t carry2[100];
-      sprintf(carry2,".x %s/TPC/AliTPCMonitorExec.C(2)",gSystem->Getenv("ALICE_ROOT"));
-      ciroc->AddExec("row",carry2);
-      coroc->AddExec("row",carry2);
+      TString carry2=Form(".x %s/TPC/AliTPCMonitorExec.C(2)",gSystem->Getenv("ALICE_ROOT"));
+      ciroc->AddExec("row",carry2.Data());
+      coroc->AddExec("row",carry2.Data());
       fExecPlaneMax=1;
     }
     coroc->Update();
@@ -1100,7 +1161,7 @@ void AliTPCMonitor::DrawHists(Int_t histos)
     fHistDistrMaxIROC->GetXaxis()->SetRangeUser(0.0,1000.0);
     fHistDistrMaxIROC->SetXTitle("max ADC (ADC)");
     fHistDistrMaxIROC->SetYTitle("counts");
-    fHistDistrMaxIROC->SetTitle(titleMAX);
+    fHistDistrMaxIROC->SetTitle(titleMAX.Data());
     fHistDistrMaxIROC->Draw("");
     fHistDistrMaxOROC->SetLineColor(2);
     fHistDistrMaxOROC->Draw("same");
@@ -1121,7 +1182,7 @@ void AliTPCMonitor::DrawHists(Int_t histos)
     
     fHistDistrSumIROC->SetXTitle("sum ADC (ADC)");
     fHistDistrSumIROC->SetYTitle("counts");
-    fHistDistrSumIROC->SetTitle(titleSUM);
+    fHistDistrSumIROC->SetTitle(titleSUM.Data());
     fHistDistrSumIROC->Draw("");
     fHistDistrSumOROC->SetLineColor(2);
     fHistDistrSumOROC->Draw("same");
@@ -1137,7 +1198,7 @@ void AliTPCMonitor::DrawHists(Int_t histos)
     fHistDistrBaseMeanIROC = fHistDistrBase2dIROC->ProjectionX("fHistDistrBaseMeanIROC");
     fHistDistrBaseMeanIROC->SetXTitle("base mean (ADC)");
     fHistDistrBaseMeanIROC->SetYTitle("counts");
-    fHistDistrBaseMeanIROC->SetTitle(titleMEAN);
+    fHistDistrBaseMeanIROC->SetTitle(titleMEAN.Data());
     fHistDistrBaseMeanIROC->Draw("");
     
     fHistDistrBaseMeanOROC = fHistDistrBase2dOROC->ProjectionX("fHistDistrBaseMeanOROC");
@@ -1155,7 +1216,7 @@ void AliTPCMonitor::DrawHists(Int_t histos)
     fHistDistrBaseRmsIROC = fHistDistrBase2dIROC->ProjectionY("fHistDistrBaseRmsIROC");
     fHistDistrBaseRmsIROC->SetXTitle("base rms (ADC)");
     fHistDistrBaseRmsIROC->SetYTitle("counts");
-    fHistDistrBaseRmsIROC->SetTitle(titleRMS);
+    fHistDistrBaseRmsIROC->SetTitle(titleRMS.Data());
     fHistDistrBaseRmsIROC->Draw("");
     
     fHistDistrBaseRmsOROC = fHistDistrBase2dOROC->ProjectionY("fHistDistrBaseRmsOROC");
@@ -1180,11 +1241,11 @@ void AliTPCMonitor::DrawHists(Int_t histos)
       if(!(cglobC=(TCanvas*)gROOT->GetListOfCanvases()->FindObject("SIDE C all"))) cglobC = CreateCanvas("SIDE C all");
       if(!(cglobA=(TCanvas*)gROOT->GetListOfCanvases()->FindObject("SIDE A all"))) cglobA = CreateCanvas("SIDE A all");
       
-      Char_t globtitle1[256]; sprintf(globtitle1,"SIDE A Run %05i (EventID %i)",fRunId,fEventNumber);
-      Char_t globtitle2[256]; sprintf(globtitle2,"SIDE C Run %05i (EventID %i)",fRunId,fEventNumber);
+      TString globtitle1=Form("SIDE A Run %05i (EventID %i)",fRunId,fEventNumber);
+      TString globtitle2=Form("SIDE C Run %05i (EventID %i)",fRunId,fEventNumber);
       
-      fHistGlobalMaxA->SetTitle(globtitle1);
-      fHistGlobalMaxC->SetTitle(globtitle2);
+      fHistGlobalMaxA->SetTitle(globtitle1.Data());
+      fHistGlobalMaxC->SetTitle(globtitle2.Data());
       fHistGlobalMaxA->SetXTitle("x/mm");
       fHistGlobalMaxA->SetYTitle("y/mm");
       fHistGlobalMaxC->SetXTitle("x/mm");
@@ -1199,14 +1260,13 @@ void AliTPCMonitor::DrawHists(Int_t histos)
       cglobC->cd() ; fHistGlobalMaxC->Draw("COLZ");
       cglobA->cd() ; fHistGlobalMaxA->Draw("COLZ");
       
-      Char_t nameom[256];
-      sprintf(nameom,".x  %s/TPC/AliTPCMonitorExec.C(3)",gSystem->Getenv("ALICE_ROOT"));
+      TString nameom=Form(".x  %s/TPC/AliTPCMonitorExec.C(3)",gSystem->Getenv("ALICE_ROOT"));
       
       if(fExecGlob==0)
       {
-        if(fVerb)cout << " set exec " << nameom << endl;
-        cglobC->AddExec("glob",nameom);
-        cglobA->AddExec("glob",nameom);
+        if(fVerb)cout << " set exec " << nameom.Data() << endl;
+        cglobC->AddExec("glob",nameom.Data());
+        cglobA->AddExec("glob",nameom.Data());
         fExecGlob = 1;
       }
       else
@@ -1214,9 +1274,9 @@ void AliTPCMonitor::DrawHists(Int_t histos)
         cglobC->DeleteExec("glob");
         cglobA->DeleteExec("glob");
         
-        if(fVerb)  cout << " set exec " << nameom << endl;
-        cglobC->AddExec("glob",nameom);
-        cglobA->AddExec("glob",nameom);
+        if(fVerb)  cout << " set exec " << nameom.Data() << endl;
+        cglobC->AddExec("glob",nameom.Data());
+        cglobA->AddExec("glob",nameom.Data());
         
       }
       cglobC->Update();
@@ -1242,20 +1302,20 @@ void AliTPCMonitor::DrawRMSMap()
   crmsiroc->cd();  fHistIROCRMS->Draw("COLZ");
   crmsoroc->cd();  fHistOROCRMS->Draw("COLZ");
   
-  Char_t carry1[100];  sprintf(carry1,".x %s/TPC/AliTPCMonitorExec.C(1)",gSystem->Getenv("ALICE_ROOT"));
-  Char_t carry2[100];  sprintf(carry2,".x %s/TPC/AliTPCMonitorExec.C(2)",gSystem->Getenv("ALICE_ROOT"));
+  TString carry1=Form(".x %s/TPC/AliTPCMonitorExec.C(1)",gSystem->Getenv("ALICE_ROOT"));
+  TString carry2=Form(".x %s/TPC/AliTPCMonitorExec.C(2)",gSystem->Getenv("ALICE_ROOT"));
   
   if(fExecPadIrocRms==0)
   {
-    crmsiroc->AddExec("pad",carry1);
-    crmsiroc->AddExec("row",carry2);
+    crmsiroc->AddExec("pad",carry1.Data());
+    crmsiroc->AddExec("row",carry2.Data());
     fExecPadIrocRms=1;
   }
   
   if(fExecPadOrocRms==0)
   {
-    crmsoroc->AddExec("pad",carry1);
-    crmsoroc->AddExec("row",carry2);
+    crmsoroc->AddExec("pad",carry1.Data());
+    crmsoroc->AddExec("row",carry2.Data());
     fExecPadOrocRms=1;
   }
   
@@ -1293,9 +1353,9 @@ void AliTPCMonitor::ExecPad()
   
   TCanvas* cpad      = 0;
   //  Char_t   namehist[50];
-  Char_t   projhist[60];
-  Char_t   namesel[256];
-  Char_t   namecanv[256];
+  TString   projhist;
+  TString   namesel;
+  TString   namecanv;
   
   Int_t    xbinmin  = 0;
   Int_t    xbinmax  = 0;
@@ -1304,21 +1364,21 @@ void AliTPCMonitor::ExecPad()
   Int_t    rocid     = 0;
   // Check wich Canvas executed the event
   TH2S* fHistIndex=0;
-  sprintf(namesel,select->GetName());
-  if(strcmp(namesel,"fHistOROC")==0 || strcmp(namesel,"fHistOROCRMS")==0 || strcmp(namesel,"fHistOROCTime")==0 )
+  namesel=select->GetName();
+  if(namesel=="fHistOROC" || namesel=="fHistOROCRMS" || namesel=="fHistOROCTime" )
   {
     rocid = 1;
     fPadUsedRoc =1;
-    sprintf(projhist,"ProjectionOROC");
-    sprintf(namecanv,"coroc_ch");
+    projhist=Form("ProjectionOROC");
+    namecanv=Form("coroc_ch");
     fHistIndex = fHistOROCIndex;
   }
-  if(strcmp(namesel,"fHistIROC")==0 || strcmp(namesel,"fHistIROCRMS")==0 || strcmp(namesel,"fHistIROCTime")==0 )
+  if(namesel=="fHistIROC" || namesel=="fHistIROCRMS" || namesel=="fHistIROCTime" )
   {
     rocid = 0;
     fPadUsedRoc=0;
-    sprintf(projhist,"ProjectionIROC");
-    sprintf(namecanv,"ciroc_ch");
+    projhist=Form("ProjectionIROC");
+    namecanv=Form("ciroc_ch");
     fHistIndex = fHistIROCIndex;
   }
   
@@ -1343,6 +1403,7 @@ void AliTPCMonitor::ExecPad()
   }
   
   // Get Bin
+  if (!fHistIndex) return;
   Int_t testy = fHistIndex->GetYaxis()->FindBin(y);
   Int_t testx = fHistIndex->GetXaxis()->FindBin(x);
   Int_t binchannel = (Int_t)fHistIndex->GetCellContent(testx,testy);
@@ -1362,7 +1423,6 @@ void AliTPCMonitor::ExecPad()
 //   return;
   
   // Make title and Pave for channel Info
-  Char_t title[256];
   Int_t npadRow , npad  , nhw , nmax , hwadd;
   
   hwadd   = (Int_t)fHistChannelTime->GetCellContent(binchannel,0);
@@ -1390,27 +1450,20 @@ void AliTPCMonitor::ExecPad()
   Short_t fecget      = (hwadd & fgkHwMaskFEC)   >> 7;
   Short_t branchget   = (hwadd & fgkHwMaskBranch)>> 11;
   
+  legstat->AddText(Form("Branch (map) \t %i (%i) \n",branchget,branch));
+  legstat->AddText(Form("Fec in patch \t %i \n",fecloc));
+  legstat->AddText(Form("Fec in branch (map)\t %i (%i)\n",fecget,feclocbran));
+  legstat->AddText(Form("Connector  \t %i \n",connector));
+  legstat->AddText(Form("Fec No.   \t %i \n",fecnr));
+  legstat->AddText(Form("Fec chan  \t %i \n",fecch));
+  legstat->AddText(Form("Altro chip\t %i \n",altrochip));
+  legstat->AddText(Form("Altro chan\t %i \n",altrochannel));
   
-  Char_t nstat1[100];  Char_t nstat2[100];  Char_t nstat3[100];  Char_t nstat4[100];
-  Char_t nstat5[100];  Char_t nstat6[100];  Char_t nstat7[100];  Char_t nstat8[100];
-  
-  sprintf(nstat1,"Branch (map) \t %i (%i) \n",branchget,branch);
-  sprintf(nstat2,"Fec in patch \t %i \n",fecloc);
-  sprintf(nstat8,"Fec in branch (map)\t %i (%i)\n",fecget,feclocbran);
-  sprintf(nstat7,"Connector  \t %i \n",connector);
-  sprintf(nstat3,"Fec No.   \t %i \n",fecnr);
-  sprintf(nstat4,"Fec chan  \t %i \n",fecch);
-  sprintf(nstat5,"Altro chip\t %i \n",altrochip);
-  sprintf(nstat6,"Altro chan\t %i \n",altrochannel);
-  
-  legstat->AddText(nstat1); legstat->AddText(nstat2);  legstat->AddText(nstat8);  legstat->AddText(nstat7);
-  legstat->AddText(nstat3); legstat->AddText(nstat4);  legstat->AddText(nstat5);  legstat->AddText(nstat6);
-  
-  sprintf(title,"Row=%d Pad=%d Hw =%d maxADC =%d count =%d",npadRow,npad,nhw,nmax,binchannel);
+  TString title=Form("Row=%d Pad=%d Hw =%d maxADC =%d count =%d",npadRow,npad,nhw,nmax,binchannel);
   
 //   hp->SetName(projhist);
   hp->SetTitleSize(0.04);
-  hp->SetTitle(title);
+  hp->SetTitle(title.Data());
   hp->SetYTitle("ADC");
   hp->SetXTitle("Timebin");
   hp->GetXaxis()->SetTitleColor(1);
@@ -1483,15 +1536,10 @@ void AliTPCMonitor::ExecRow()
   if(!select->InheritsFrom("TH2")) {   return;  }
   
   Int_t rocid = 0;
-  //  Char_t namehist[50];
-  Char_t rowhist[60];
-  Char_t rowhistsum[60];
-  Char_t rowhistmax[60];
-  Char_t rowhistxmax[60];
   
-  sprintf(rowhist,         "hrowtime");
-  sprintf(rowhistxmax    ,"hxmax");
-  sprintf(rowhistmax    , "hrowmax");
+  const Char_t *rowhist="hrowtime";
+  const Char_t *rowhistxmax="hxmax";
+  const Char_t *rowhistmax="hrowmax";
   
   // get position
   Int_t   px  = gPad->GetEventX();
@@ -1528,10 +1576,10 @@ void AliTPCMonitor::ExecRow()
   
   Int_t    setrange      = 0;
   
-  
-  if(     strcmp(select->GetName(),"fHistIROC")==0 || strcmp(select->GetName(),"fHistIROCRMS")==0 ) { fHistIndex = fHistIROCIndex;     rocid =1;   }
-  else if(strcmp(select->GetName(),"fHistOROC")==0 || strcmp(select->GetName(),"fHistOROCRMS")==0 ) { fHistIndex = fHistOROCIndex;     rocid =2;   }
-  else                                                                                  { cout << " not implemented for this histo " << endl; return; }
+  TString name=select->GetName();
+  if(     name=="fHistIROC" || name=="fHistIROCRMS" ) { fHistIndex = fHistIROCIndex;     rocid =1;   }
+  else if(name=="fHistOROC" || name=="fHistOROCRMS" ) { fHistIndex = fHistOROCIndex;     rocid =2;   }
+  else  { cout << " not implemented for this histo " << endl; return; }
   
   gPad->GetCanvas()->FeedbackMode(kTRUE);
   
@@ -1570,7 +1618,6 @@ void AliTPCMonitor::ExecRow()
     
     delete gROOT->Get(rowhist);
     delete gROOT->Get(rowhistmax);
-    delete gROOT->Get(rowhistsum);
     delete gROOT->Get("hxmax");
     delete gROOT->Get("legrow");
   }
@@ -1630,8 +1677,7 @@ void AliTPCMonitor::ExecRow()
   }
   
   cxmax->cd();
-  Char_t hxtitle[50] ; sprintf(hxtitle,"max adc in pads at x=%5.1f mm",xval);
-  hxmax->SetTitle(hxtitle);
+  hxmax->SetTitle(Form("max adc in pads at x=%5.1f mm",xval));
   hxmax->SetXTitle("row");
   if(!GetPedestals()) hxmax->SetYTitle("max adc (baseline sub.)");
   else                hxmax->SetYTitle("max adc ");
@@ -1648,17 +1694,23 @@ void AliTPCMonitor::ExecRow()
   cxmax->Update();
   
   crowtime->cd();
-  Char_t title[256];
-  Char_t titlemax[256];
-  if(rocid==1) {sprintf(title,"%s Row=%d",((TH2*)select)->GetTitle(),row)   ;    sprintf(titlemax,"IROC  max/sum Row=%d",row   );}
-  else         {sprintf(title,"%s Row=%d",((TH2*)select)->GetTitle(),row-63);    sprintf(titlemax,"OROC  max/sum Row=%d",row-63);}
+  TString title;
+  TString titlemax;
+  if(rocid==1) {
+    title.Form("%s Row=%d",((TH2*)select)->GetTitle(),row)   ;
+    titlemax.Form("IROC  max/sum Row=%d",row   );
+  }  else  {
+    title.Form("%s Row=%d",((TH2*)select)->GetTitle(),row-63);
+    titlemax.Form("OROC  max/sum Row=%d",row-63);
+  }
+  
   if(fVerb) cout << " set name " << endl;
   
   
   // row vs time
   crowtime->cd();
   hrowtime->SetTitleSize(0.04);
-  hrowtime->SetTitle(title);
+  hrowtime->SetTitle(title.Data());
   hrowtime->SetYTitle("timbin");
   hrowtime->SetXTitle("pad in row");
   hrowtime->SetZTitle("signal (ADC)");
@@ -1687,7 +1739,7 @@ void AliTPCMonitor::ExecRow()
     hrowmax->SetMaximum(profrowymax);
   }
   hrowmax->SetTitleSize(0.04);
-  hrowmax->SetTitle(title);
+  hrowmax->SetTitle(title.Data());
   hrowmax->SetYTitle("max adc");
   hrowmax->SetXTitle("pad in row");
   hrowmax->GetXaxis()->SetTitleColor(1);
@@ -1711,26 +1763,26 @@ void AliTPCMonitor::Write10bitChannel()
   Int_t  row     = (Int_t)fMapHand->GetPadRow(fPadUsedHwAddr);
   Int_t  channel = (Int_t)fPadMapHw[fPadUsedHwAddr];
   
-  Char_t filenameroot[256];
-  Char_t filenamedat[256];
-  Char_t projhist[256];
+  TString filenameroot;
+  TString filenamedat;
+  TString projhist;
   
-  if(fPadUsedRoc==1) { sprintf(projhist,"ProjectionOROC"); }
-  if(fPadUsedRoc==0) { sprintf(projhist,"ProjectionIROC"); }
+  if(fPadUsedRoc==1) { projhist.Form("ProjectionOROC"); }
+  if(fPadUsedRoc==0) { projhist.Form("ProjectionIROC"); }
   
-  sprintf(filenamedat, "Channel_Run%05i_EventID_%i_Pad_%i_Row_%i.dat"      ,fRunId,fEventNumber,pad,row);
-  sprintf(filenameroot,"Channel_Run%05i_EventID_%i_Pad_%i_Row_%i.root"     ,fRunId,fEventNumber,pad,row);
+  filenamedat.Form("Channel_Run%05i_EventID_%i_Pad_%i_Row_%i.dat"      ,fRunId,fEventNumber,pad,row);
+  filenameroot.Form("Channel_Run%05i_EventID_%i_Pad_%i_Row_%i.root"     ,fRunId,fEventNumber,pad,row);
   
   TH1D* hpr = 0;
   if((hpr=(TH1D*)gROOT->Get(projhist)))
   {
       // root histo
-    TFile f(filenameroot,"recreate");
+    TFile f(filenameroot.Data(),"recreate");
     hpr->Write();
     f.Close();
     
       // raw singal
-    ofstream datout(filenamedat,ios::out);
+    ofstream datout(filenamedat.Data(),ios::out);
     datout <<"Timebin \t ADC value " << endl;
     for(Int_t i = 1; i <GetTimeBins(); i++)
     {
@@ -1752,39 +1804,39 @@ void AliTPCMonitor::ExecTransform()
   // fft is only performed for a data sample of size 2^n
   // reduce window according to largest  power of 2 which is smaller than the viewing  range
   
-  Char_t namecanv[256];
-  Char_t namecanv2[256];
-  Char_t projhist[256];
-  Char_t namehtrimag[256];
-  Char_t namehtrreal[256];
-  Char_t namehtrmag[256];
+  TString namecanv;
+  TString namecanv2;
+  TString projhist;
+  TString namehtrimag;
+  TString namehtrreal;
+  TString namehtrmag;
   
-  if(fPadUsedRoc==1) {    sprintf(namecanv,"coroc_ch_trans") ; sprintf(namecanv2,"coroc_ch_trans2") ;   sprintf(projhist,"ProjectionOROC");  }
-  if(fPadUsedRoc==0) {    sprintf(namecanv,"ciroc_ch_trans") ; sprintf(namecanv2,"ciroc_ch_trans2") ;  sprintf(projhist,"ProjectionIROC");  }
+  if(fPadUsedRoc==1) {    namecanv="coroc_ch_trans"; namecanv2="coroc_ch_trans2";  projhist="ProjectionOROC";  }
+  if(fPadUsedRoc==0) {    namecanv="ciroc_ch_trans"; namecanv2="ciroc_ch_trans2";  projhist="ProjectionIROC";  }
   
   TH1D*  hproj = 0;
   
   if((TH1D*)gROOT->Get(projhist)==0){AliWarning("Proj histo does not exist \n Move mouse over 2d histo choose channel \n and drag mouse form histo again!");  return ;}
-  else      hproj = (TH1D*)gROOT->Get(projhist) ;
+  else      hproj = (TH1D*)gROOT->Get(projhist.Data()) ;
   
   
-  if(fPadUsedRoc==1) {  sprintf(namehtrimag,"htransimagfreq_oroc");    sprintf(namehtrreal,"htransrealfreq_oroc"); sprintf(namehtrmag,"htransmagfreq_oroc");  }
-  else               {  sprintf(namehtrimag,"htransimagfreq_iroc");    sprintf(namehtrreal,"htransrealfreq_iroc"); sprintf(namehtrmag,"htransmagfreq_iroc");  }
+  if(fPadUsedRoc==1) {  namehtrimag="htransimagfreq_oroc";    namehtrreal="htransrealfreq_oroc"; namehtrmag="htransmagfreq_oroc";  }
+  else               {  namehtrimag="htransimagfreq_iroc";    namehtrreal="htransrealfreq_iroc"; namehtrmag="htransmagfreq_iroc";  }
   
-  if( gROOT->Get(namehtrimag))  delete  gROOT->Get(namehtrimag);
-  if( gROOT->Get(namehtrreal))  delete  gROOT->Get(namehtrreal);
-  if( gROOT->Get(namehtrmag))  delete  gROOT->Get(namehtrmag);
+  if( gROOT->Get(namehtrimag.Data()))  delete  gROOT->Get(namehtrimag.Data());
+  if( gROOT->Get(namehtrreal.Data()))  delete  gROOT->Get(namehtrreal.Data());
+  if( gROOT->Get(namehtrmag.Data()))  delete  gROOT->Get(namehtrmag.Data());
   
   TCanvas *ctrans = 0;
-  if(!(ctrans = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(namecanv)))
+  if(!(ctrans = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(namecanv.Data())))
   {
-    ctrans = CreateCanvas(namecanv);
+    ctrans = CreateCanvas(namecanv.Data());
     ctrans->Divide(1,2);
   }
   TCanvas *ctrans2 = 0;
-  if(!(ctrans2 = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(namecanv2)))
+  if(!(ctrans2 = (TCanvas*)gROOT->GetListOfCanvases()->FindObject(namecanv2.Data())))
   {
-    ctrans2 = CreateCanvas(namecanv2);
+    ctrans2 = CreateCanvas(namecanv2.Data());
 //      ctrans2->Divide(1,2);
   }
   
@@ -1805,19 +1857,19 @@ void AliTPCMonitor::ExecTransform()
   Double_t  deltat = 1.0/(Float_t)GetSamplingFrequency();
   
   // output histo
-  TH1D* htransrealfreq = new TH1D(namehtrreal,namehtrreal,10000,-1/(2*deltat),1/(2*deltat));
-  TH1D* htransimagfreq = new TH1D(namehtrimag,namehtrimag,10000,-1/(2*deltat),1/(2*deltat));
-  TH1D* htransmag      = new TH1D(namehtrmag,namehtrmag,10000,-1/(2*deltat),1/(2*deltat));
+  TH1D* htransrealfreq = new TH1D(namehtrreal.Data(),namehtrreal.Data(),10000,-1/(2*deltat),1/(2*deltat));
+  TH1D* htransimagfreq = new TH1D(namehtrimag.Data(),namehtrimag.Data(),10000,-1/(2*deltat),1/(2*deltat));
+  TH1D* htransmag      = new TH1D(namehtrmag.Data(),namehtrmag.Data(),10000,-1/(2*deltat),1/(2*deltat));
   
-  Char_t titlereal[256];
-  Char_t titleimag[256];
-  Char_t titlemag[256];
-  if(fPadUsedRoc==1) {    sprintf(titlereal,"OROC DFT real part");  sprintf(titleimag,"OROC DFT imag part");  sprintf(titlemag,"OROC DFT magnitude");  }
-  else {                  sprintf(titlereal,"IROC DFT real part");  sprintf(titleimag,"IROC DFT imag part");  sprintf(titlemag,"IROC DFT magnitude");  }
+  TString titlereal;
+  TString titleimag;
+  TString titlemag;
+  if(fPadUsedRoc==1) {    titlereal="OROC DFT real part";  titleimag="OROC DFT imag part";  titlemag="OROC DFT magnitude";  }
+  else {                  titlereal="IROC DFT real part";  titleimag="IROC DFT imag part";  titlemag="IROC DFT magnitude";  }
   
-  htransrealfreq->SetTitle(titlereal);  htransrealfreq->SetXTitle("f/hz");  htransrealfreq->SetYTitle("z_{real}(f)");
-  htransimagfreq->SetTitle(titleimag);  htransimagfreq->SetXTitle("f/hz");  htransimagfreq->SetYTitle("z_{imag}(f)");
-  htransmag->SetTitle(titlemag);  htransmag->SetXTitle("f/hz");  htransmag->SetYTitle("mag(f)");
+  htransrealfreq->SetTitle(titlereal.Data());  htransrealfreq->SetXTitle("f/hz");  htransrealfreq->SetYTitle("z_{real}(f)");
+  htransimagfreq->SetTitle(titleimag.Data());  htransimagfreq->SetXTitle("f/hz");  htransimagfreq->SetYTitle("z_{imag}(f)");
+  htransmag->SetTitle(titlemag.Data());  htransmag->SetXTitle("f/hz");  htransmag->SetYTitle("mag(f)");
   
   // create complex packed data array
   const Int_t kdatasiz = 2*bins;
@@ -1852,11 +1904,11 @@ void AliTPCMonitor::ExecTransform()
   htransmag->Draw();
   ctrans2->Update();
   delete four;
-  delete data;
+  delete [] data;
 }
 
 //__________________________________________________________________
-void AliTPCMonitor::ShowSel(Int_t* compval)               
+void AliTPCMonitor::ShowSel(const Int_t* compval)
 {
   
   // Show only selected components
@@ -1971,10 +2023,8 @@ void AliTPCMonitor::ResizeCanv()
 {
   // Resize canvases and delete some of them
   
-  Char_t carry1[100];
-  sprintf(carry1,".x %s/TPC/AliTPCMonitorExec.C(1)",gSystem->Getenv("ALICE_ROOT"));
-  Char_t carry3[100];
-  sprintf(carry3,".x %s/TPC/AliTPCMonitorExec.C(2)",gSystem->Getenv("ALICE_ROOT"));
+  TString carry1=Form(".x %s/TPC/AliTPCMonitorExec.C(1)",gSystem->Getenv("ALICE_ROOT"));
+  TString carry3=Form(".x %s/TPC/AliTPCMonitorExec.C(2)",gSystem->Getenv("ALICE_ROOT"));
   if(fVerb) cout <<  " canv 1 " << endl;
   
   if(gROOT->GetListOfCanvases()->FindObject(        "coroc_ch")) {  delete gROOT->GetListOfCanvases()->FindObject("coroc_ch") ; }
@@ -1987,8 +2037,8 @@ void AliTPCMonitor::ResizeCanv()
     TCanvas* ciroc = CreateCanvas("ciroc");
     ciroc->cd();
     fHistIROC->Draw("COLZ");
-    ciroc->AddExec("pad",carry1);
-    ciroc->AddExec("row",carry3);
+    ciroc->AddExec("pad",carry1.Data());
+    ciroc->AddExec("row",carry3.Data());
     fExecPlaneMax=1;
     ciroc->Update();
   }
@@ -2000,8 +2050,8 @@ void AliTPCMonitor::ResizeCanv()
     coroc->cd();
     fHistOROC->Draw("COLZ");
     
-    coroc->AddExec("pad",carry1);
-    coroc->AddExec("row",carry3);
+    coroc->AddExec("pad",carry1.Data());
+    coroc->AddExec("row",carry3.Data());
     coroc->Update();
     fExecPlaneMax=1;
   }
@@ -2041,9 +2091,10 @@ Int_t AliTPCMonitor::ExecProcess()
   
   TObject *select = gPad->GetSelected();
   if(!select)  return -1;
+  TString name=select->GetName();
   if(!select->InheritsFrom("TH2")) {gPad->SetUniqueID(0);    return -1;  }
-  if(       strcmp(select->GetName(),"hglobal" )==0 || ( strcmp(select->GetName(),"SIDE A" )==0) ) side = 0;
-  else  if( strcmp(select->GetName(),"hglobal2")==0 || ( strcmp(select->GetName(),"SIDE C" )==0) ) side = 1;
+  if(       name=="hglobal"  || name=="SIDE A"  ) side = 0;
+  else  if( name=="hglobal2" || name=="SIDE C"  ) side = 1;
   
   // get position
   Int_t   px    = gPad->GetEventX();
@@ -2092,10 +2143,10 @@ Int_t AliTPCMonitor::GetRCUPatch(Int_t runid, Int_t eqid) const
   // Return RCU patch index for given equipment id eqid
   Int_t patch = 0;
   //if(runid>=704)
-  if ( eqid<768 || eqid>983 ) return 0; //no TPC eqid
   if(runid>=0)
   {
-    if(eqid>=1000) return 0;
+    if ( eqid<768 || eqid>983 ) return 0; //no TPC eqid
+//     if(eqid>=1000) return 0;
     patch = fMapEqidsRcu[eqid] ;
   }
   else
@@ -2132,7 +2183,7 @@ void AliTPCMonitor::DumpHeader(AliRawReader * reader) const
 
 
 //__________________________________________________________________
-Double_t AliTPCMonitor::Gamma4(Double_t* x, Double_t* par) {
+Double_t AliTPCMonitor::Gamma4(const Double_t* x, const Double_t* par) {
   
   // Gamma4 function used to fit signals
   // Defined in sections: diverging branch set to 0
@@ -2157,33 +2208,34 @@ TCanvas* AliTPCMonitor::CreateCanvas(const Char_t* name)
   Int_t ysize    = GetCanvasYSize();
   Int_t xspace   = GetCanvasXSpace();
   Int_t yspace   = GetCanvasYSpace();
-  
+
+  TString sname=name;
   // ROC 2dim max distribution
-  if(     strcmp(name,"coroc"         )==0) {    canv   = new TCanvas("coroc"         ,"coroc"      ,                   -1+xoffset,(Int_t)(yspace+0.5*ysize) ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"ciroc"         )==0) {    canv   = new TCanvas("ciroc"         ,"ciroc"      ,                   -1+xoffset,                     0    ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  if(     sname=="coroc") {    canv   = new TCanvas("coroc"         ,"coroc"      ,                   -1+xoffset,(Int_t)(yspace+0.5*ysize) ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="ciroc") {    canv   = new TCanvas("ciroc"         ,"ciroc"      ,                   -1+xoffset,                     0    ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
   // ROC  2dim rms distribution
-  else if(strcmp(name,"crmsoroc"      )==0) {    canv   = new TCanvas("crmsoroc"      ,"crmsoroc"   ,                   -1+xoffset,(Int_t)(yspace+0.5*ysize) ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"crmsiroc"      )==0) {    canv   = new TCanvas("crmsiroc"      ,"crmsiroc"   ,                   -1+xoffset,                        0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="crmsoroc") {    canv   = new TCanvas("crmsoroc"      ,"crmsoroc"   ,                   -1+xoffset,(Int_t)(yspace+0.5*ysize) ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="crmsiroc") {    canv   = new TCanvas("crmsiroc"      ,"crmsiroc"   ,                   -1+xoffset,                        0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
   // Global ADC max Histos
-  else if(strcmp(name,"SIDE C all"    )==0) {    canv   = new TCanvas("SIDE C all"    ,"SIDE C all" ,   (Int_t)(3*xspace+ xoffset),(Int_t)(yspace+0.5*ysize) ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"SIDE A all"    )==0) {    canv   = new TCanvas("SIDE A all"    ,"SIDE A all" ,   (Int_t)(3*xspace+ xoffset),                        0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="SIDE C all") {    canv   = new TCanvas("SIDE C all"    ,"SIDE C all" ,   (Int_t)(3*xspace+ xoffset),(Int_t)(yspace+0.5*ysize) ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="SIDE A all") {    canv   = new TCanvas("SIDE A all"    ,"SIDE A all" ,   (Int_t)(3*xspace+ xoffset),                        0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
   // 1 dim max sum basekine distribution
-  else if(strcmp(name,"cmax"          )==0) {    canv   = new TCanvas("cmax"          ,"cmax"       ,                   -1+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
-  else if(strcmp(name,"csum"          )==0) {    canv   = new TCanvas("csum"          ,"csum"       ,               xspace+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
-  else if(strcmp(name,"cbasemean"     )==0) {    canv   = new TCanvas("cbasemean"     ,"cbasemean"  ,             2*xspace+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
-  else if(strcmp(name,"cbaserms"      )==0) {    canv   = new TCanvas("cbaserms"      ,"cbaserms"   ,             3*xspace+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="cmax") {    canv   = new TCanvas("cmax"          ,"cmax"       ,                   -1+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="csum") {    canv   = new TCanvas("csum"          ,"csum"       ,               xspace+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="cbasemean") {    canv   = new TCanvas("cbasemean"     ,"cbasemean"  ,             2*xspace+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="cbaserms") {    canv   = new TCanvas("cbaserms"      ,"cbaserms"   ,             3*xspace+xoffset,                 3*yspace ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
   // Projections of single channel
-  else if(strcmp(name,"coroc_ch"      )==0) {    canv   = new TCanvas("coroc_ch"      ,"coroc_ch"   ,   (Int_t)(1.5*xspace+xoffset),(Int_t)(yspace+0.5*ysize),(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"ciroc_ch"      )==0) {    canv   = new TCanvas("ciroc_ch"      ,"ciroc_ch"   ,   (Int_t)(1.5*xspace+xoffset),                       0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="coroc_ch") {    canv   = new TCanvas("coroc_ch"      ,"coroc_ch"   ,   (Int_t)(1.5*xspace+xoffset),(Int_t)(yspace+0.5*ysize),(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="ciroc_ch") {    canv   = new TCanvas("ciroc_ch"      ,"ciroc_ch"   ,   (Int_t)(1.5*xspace+xoffset),                       0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
   // FFT for single channel
-  else if(strcmp(name,"coroc_ch_trans")==0) {    canv   = new TCanvas("coroc_ch_trans","coroc_ch_trans",(Int_t)(3.0*xspace+xoffset),(Int_t)(yspace+0.5*ysize),(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"ciroc_ch_trans")==0) {    canv   = new TCanvas("ciroc_ch_trans","ciroc_ch_trans",(Int_t)(3.0*xspace+xoffset),                       0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"coroc_ch_trans2")==0) {    canv   = new TCanvas("coroc_ch_trans2","coroc_ch_trans2",(Int_t)(3.0*xspace+xoffset),(Int_t)(yspace+0.5*ysize),(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
-  else if(strcmp(name,"ciroc_ch_trans2")==0) {    canv   = new TCanvas("ciroc_ch_trans2","ciroc_ch_trans2",(Int_t)(3.0*xspace+xoffset),                       0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="coroc_ch_trans") {    canv   = new TCanvas("coroc_ch_trans","coroc_ch_trans",(Int_t)(3.0*xspace+xoffset),(Int_t)(yspace+0.5*ysize),(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="ciroc_ch_trans") {    canv   = new TCanvas("ciroc_ch_trans","ciroc_ch_trans",(Int_t)(3.0*xspace+xoffset),                       0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="coroc_ch_trans2") {    canv   = new TCanvas("coroc_ch_trans2","coroc_ch_trans2",(Int_t)(3.0*xspace+xoffset),(Int_t)(yspace+0.5*ysize),(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
+  else if(sname=="ciroc_ch_trans2") {    canv   = new TCanvas("ciroc_ch_trans2","ciroc_ch_trans2",(Int_t)(3.0*xspace+xoffset),                       0 ,(Int_t)(1.5*xsize),(Int_t)(1.5*ysize)); return canv;  }
   // row profile histograms
-  else if(strcmp(name,"crowtime"     )==0) {    canv   = new TCanvas("crowtime"     ,"crowtime"  ,              1*xspace+xoffset,         2*yspace +ysize ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
-  else if(strcmp(name,"crowmax"      )==0) {    canv   = new TCanvas("crowmax"      ,"crowmax"   ,              2*xspace+xoffset,         2*yspace +ysize ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
-  else if(strcmp(name,"cxmax"        )==0) {    canv   = new TCanvas("cxmax"        ,"cxmax"     ,              3*xspace+xoffset,         2*yspace +ysize ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="crowtime") {    canv   = new TCanvas("crowtime"     ,"crowtime"  ,              1*xspace+xoffset,         2*yspace +ysize ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="crowmax") {    canv   = new TCanvas("crowmax"      ,"crowmax"   ,              2*xspace+xoffset,         2*yspace +ysize ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
+  else if(sname=="cxmax") {    canv   = new TCanvas("cxmax"        ,"cxmax"     ,              3*xspace+xoffset,         2*yspace +ysize ,(Int_t)(1.0*xsize),(Int_t)(1.0*ysize)); return canv;  }
   else                                      {    cout   << " Warning Canvas name unknown "  << endl;                                                                                                  return 0   ;  }
 }
 
@@ -2196,9 +2248,8 @@ void AliTPCMonitor::WriteHistos()
   if(GetEventProcessed())
   {
     AliInfo("Write histos to file");
-    Char_t name[256];
-    sprintf(name,"SIDE_%i_SECTOR_%02i_RUN_%05i_EventID_%06i.root",(GetLastSector()/18),(GetLastSector()%18),fRunId,fEventNumber);
-    TFile* f = new TFile(name,"recreate");
+    TString name=Form("SIDE_%i_SECTOR_%02i_RUN_%05i_EventID_%06i.root",(GetLastSector()/18),(GetLastSector()%18),fRunId,fEventNumber);
+    TFile* f = new TFile(name.Data(),"recreate");
     for(Int_t i =0; i<fHistList->GetEntries(); i++)
     {
       if(((TH1*)fHistList->At(i))!=0)
@@ -2234,3 +2285,41 @@ TH1* AliTPCMonitor::GetHisto(char* histname)
   }
   return hist ;
 }
+
+//_________________________________
+void AliTPCMonitor::SetupMonitoringTable(const char* table)
+{
+  //
+  // Setup the monitoring table
+  //
+  fMonTableChanged=kFALSE;
+  TString newTable(table);
+
+  //check if we have a new table
+  if (newTable==fMonTableString) return;
+  fMonTableString=newTable;
+  
+  //delete old data
+  delete fkMonTable;
+  delete fMonTableArray;
+  fkMonTable=0x0;
+
+  //parse table request
+  fMonTableArray=fMonTableString.Tokenize(",;");
+  fMonTableArray->SetOwner();
+
+  //consistency check
+  Int_t entries=fMonTableArray->GetEntries();
+  if (entries%4){
+    AliError(Form("Monitoring table has to be given in muliples of 4\nEntries need to be sparated by ',' or ';'\nCannot parse the current table request: %s",fMonTableString.Data()));
+    delete fMonTableArray;
+    fMonTableArray=0x0;
+    return;
+  }
+
+  fkMonTable=new const Char_t*[entries+1];
+  for (Int_t i=0;i<entries;++i) fkMonTable[i]=fMonTableArray->At(i)->GetName();
+  fkMonTable[entries]=0x0;
+
+  fMonTableChanged=kTRUE;
+}