]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFcalib.cxx
Adding the track fit residuals as a consequence of the ExB distortions (Marian)
[u/mrichter/AliRoot.git] / TOF / AliTOFcalib.cxx
index bbaaa28a2b0f467a62aace1222c2d08f0b3065b9..391b83104df89dfe7a131f8806f78019e900d1ec 100644 (file)
  **************************************************************************/
 
 /*
-$Log$
-Revision 1.17  2007/10/18 09:12:22  zampolli
-New naming of online calibration directory
+$Log: AliTOFcalib.cxx,v $
+Revision 1.21  2007/11/02 15:41:49  hristov
+Provide return value if the function is not void
+
+Revision 1.20  2007/10/26 15:13:50  zampolli
+Using a TChain instead of a TTree
+
+Revision 1.19  2007/10/23 15:27:38  zampolli
+Rearrangement of Calibration objects for simulation
 
 Revision 1.16  2007/10/08 10:13:26  zampolli
 First Run and Last Run members added, infinite validity of calib obj implemented.
@@ -79,12 +85,14 @@ author: Chiara Zampolli, zampolli@bo.infn.it
 #include "TFile.h"
 #include "TH1F.h"
 #include "TH2F.h"
-#include "TList.h"
-#include "TROOT.h"
-#include "TStyle.h"
+//#include "TList.h"
+//#include "TROOT.h"
+//#include "TStyle.h"
 #include "TTree.h"
+#include "TChain.h"
 #include "TProfile.h"
 #include "TGrid.h"
+#include "TMath.h"
 
 #include "AliCDBEntry.h"
 #include "AliCDBRunRange.h"
@@ -92,16 +100,20 @@ author: Chiara Zampolli, zampolli@bo.infn.it
 #include "AliCDBManager.h"
 #include "AliCDBStorage.h"
 #include "AliCDBMetaData.h"
-#include "AliESDtrack.h"
-#include "AliESD.h"
+//#include "AliESDtrack.h"
+//#include "AliESD.h"
 #include "AliLog.h"
 
 #include "AliTOFcalib.h"
 #include "AliTOFChannelOnline.h"
+#include "AliTOFChannelOnlineStatus.h"
 #include "AliTOFChannelOffline.h"
 #include "AliTOFGeometry.h"
 #include "AliTOFRecoParam.h"
 
+class TROOT;
+class TStyle;
+
 extern TROOT *gROOT;
 extern TStyle *gStyle;
 
@@ -112,12 +124,14 @@ AliTOFcalib::AliTOFcalib():
   TTask("AliTOFcalib",""),
   fNChannels(-1),
   fTOFCalOnline(0x0),
+  fTOFCalOnlinePulser(0x0),
+  fTOFCalOnlineNoise(0x0),
+  fTOFCalOnlineHW(0x0),
   fTOFCalOffline(0x0),
-  fTOFSimCalOnline(0x0),
-  fTOFSimCalOffline(0x0),
   fTOFSimToT(0x0),
   fkValidity(0x0),
   fTree(0x0),
+  fChain(0x0),
   fNruns(0),
   fFirstRun(0),
   fLastRun(AliCDBRunRange::Infinity())
@@ -131,12 +145,14 @@ AliTOFcalib::AliTOFcalib(const AliTOFcalib & calib):
   TTask("AliTOFcalib",""),
   fNChannels(calib.fNChannels),
   fTOFCalOnline(0x0),
+  fTOFCalOnlinePulser(0x0),
+  fTOFCalOnlineNoise(0x0),
+  fTOFCalOnlineHW(0x0),
   fTOFCalOffline(0x0),
-  fTOFSimCalOnline(0x0),
-  fTOFSimCalOffline(0x0),
   fTOFSimToT(calib.fTOFSimToT),
   fkValidity(calib.fkValidity),
   fTree(calib.fTree),
+  fChain(calib.fChain),
   fNruns(calib.fNruns),
   fFirstRun(calib.fFirstRun),
   fLastRun(calib.fLastRun)
@@ -144,14 +160,16 @@ AliTOFcalib::AliTOFcalib(const AliTOFcalib & calib):
   //TOF Calibration Class copy ctor
   for (Int_t iarray = 0; iarray<fNChannels; iarray++){
     AliTOFChannelOnline * calChOnline = (AliTOFChannelOnline*)calib.fTOFCalOnline->At(iarray);
+    AliTOFChannelOnlineStatus * calChOnlineStPulser = (AliTOFChannelOnlineStatus*)calib.fTOFCalOnlinePulser->At(iarray);
+    AliTOFChannelOnlineStatus * calChOnlineStNoise = (AliTOFChannelOnlineStatus*)calib.fTOFCalOnlineNoise->At(iarray);
+    AliTOFChannelOnlineStatus * calChOnlineStHW = (AliTOFChannelOnlineStatus*)calib.fTOFCalOnlineHW->At(iarray);
     AliTOFChannelOffline * calChOffline = (AliTOFChannelOffline*)calib.fTOFCalOffline->At(iarray);
     fTOFCalOnline->AddAt(calChOnline,iarray);
+    fTOFCalOnlinePulser->AddAt(calChOnlineStPulser,iarray);
+    fTOFCalOnlineNoise->AddAt(calChOnlineStNoise,iarray);
+    fTOFCalOnlineHW->AddAt(calChOnlineStHW,iarray);
     fTOFCalOffline->AddAt(calChOffline,iarray);
 
-    AliTOFChannelOnline * simCalChOnline = (AliTOFChannelOnline*)calib.fTOFSimCalOnline->At(iarray);
-    AliTOFChannelOffline * simCalChOffline = (AliTOFChannelOffline*)calib.fTOFSimCalOffline->At(iarray);
-    fTOFSimCalOnline->AddAt(simCalChOnline,iarray);
-    fTOFSimCalOffline->AddAt(simCalChOffline,iarray);
   }
 }
 
@@ -164,18 +182,21 @@ AliTOFcalib& AliTOFcalib::operator=(const AliTOFcalib &calib)
   this->fTOFSimToT = calib.fTOFSimToT;
   this->fkValidity = calib.fkValidity;
   this->fTree = calib.fTree;
+  this->fChain = calib.fChain;
   this->fNruns = calib.fNruns;
   this->fFirstRun = calib.fFirstRun;
   this->fLastRun = calib.fLastRun;
   for (Int_t iarray = 0; iarray<fNChannels; iarray++){
     AliTOFChannelOnline * calChOnline = (AliTOFChannelOnline*)calib.fTOFCalOnline->At(iarray);
     AliTOFChannelOffline * calChOffline = (AliTOFChannelOffline*)calib.fTOFCalOffline->At(iarray);
+    AliTOFChannelOnlineStatus * calChOnlineStPulser = (AliTOFChannelOnlineStatus*)calib.fTOFCalOnlinePulser->At(iarray);
+    AliTOFChannelOnlineStatus * calChOnlineStNoise = (AliTOFChannelOnlineStatus*)calib.fTOFCalOnlineNoise->At(iarray);
+    AliTOFChannelOnlineStatus * calChOnlineStHW = (AliTOFChannelOnlineStatus*)calib.fTOFCalOnlineHW->At(iarray);
     this->fTOFCalOnline->AddAt(calChOnline,iarray);
+    this->fTOFCalOnlinePulser->AddAt(calChOnlineStPulser,iarray);
+    this->fTOFCalOnlineNoise->AddAt(calChOnlineStNoise,iarray);
+    this->fTOFCalOnlineHW->AddAt(calChOnlineStHW,iarray);
     this->fTOFCalOffline->AddAt(calChOffline,iarray);
-    AliTOFChannelOnline * simCalChOnline = (AliTOFChannelOnline*)calib.fTOFSimCalOnline->At(iarray);
-    AliTOFChannelOffline * simCalChOffline = (AliTOFChannelOffline*)calib.fTOFSimCalOffline->At(iarray);
-    this->fTOFSimCalOnline->AddAt(simCalChOnline,iarray);
-    this->fTOFSimCalOffline->AddAt(simCalChOffline,iarray);
   }
   return *this;
 }
@@ -187,23 +208,23 @@ AliTOFcalib::~AliTOFcalib()
   //TOF Calibration Class dtor
   if(!(AliCDBManager::Instance()->GetCacheFlag())){ // CDB objects must NOT be deleted if cache is active!
     if (fTOFCalOnline){
-      //      fTOFCalOnline->Clear();
       delete fTOFCalOnline;
     }
-    if (fTOFCalOffline){
-      //fTOFCalOffline->Clear();
-      delete fTOFCalOffline;
+    if (fTOFCalOnlinePulser){
+      delete fTOFCalOnlinePulser;
     }
-    if (fTOFSimCalOnline){
-      //fTOFSimCalOnline->Clear();
-      delete fTOFSimCalOnline;
+    if (fTOFCalOnlineNoise){
+      delete fTOFCalOnlineNoise;
     }
-    if (fTOFSimCalOffline){
-      //fTOFSimCalOffline->Clear();
-      delete fTOFSimCalOffline;
+    if (fTOFCalOnlineHW){
+      delete fTOFCalOnlineHW;
+    }
+    if (fTOFCalOffline){
+      delete fTOFCalOffline;
     }
   }
   if (fTree!=0x0) delete fTree;
+  if (fChain!=0x0) delete fChain;
 }
 //_____________________________________________________________________________
 void AliTOFcalib::CreateCalArrays(){
@@ -211,33 +232,29 @@ void AliTOFcalib::CreateCalArrays(){
   // creating arrays for online/offline calibration objs
 
   fTOFCalOnline = new TObjArray(fNChannels);
+  fTOFCalOnlinePulser = new TObjArray(fNChannels);
+  fTOFCalOnlineNoise = new TObjArray(fNChannels);
+  fTOFCalOnlineHW = new TObjArray(fNChannels);
   fTOFCalOffline = new TObjArray(fNChannels);
   fTOFCalOnline->SetOwner();
+  fTOFCalOnlinePulser->SetOwner();
+  fTOFCalOnlineNoise->SetOwner();
+  fTOFCalOnlineHW->SetOwner();
   fTOFCalOffline->SetOwner();
   for (Int_t iarray = 0; iarray<fNChannels; iarray++){
     AliTOFChannelOnline * calChOnline = new AliTOFChannelOnline();
+    AliTOFChannelOnlineStatus * calChOnlineStPulser = new AliTOFChannelOnlineStatus();
+    AliTOFChannelOnlineStatus * calChOnlineStNoise = new AliTOFChannelOnlineStatus();
+    AliTOFChannelOnlineStatus * calChOnlineStHW = new AliTOFChannelOnlineStatus();
     AliTOFChannelOffline * calChOffline = new AliTOFChannelOffline();
     fTOFCalOnline->AddAt(calChOnline,iarray);
+    fTOFCalOnlinePulser->AddAt(calChOnlineStPulser,iarray);
+    fTOFCalOnlineNoise->AddAt(calChOnlineStNoise,iarray);
+    fTOFCalOnlineHW->AddAt(calChOnlineStHW,iarray);
     fTOFCalOffline->AddAt(calChOffline,iarray);
   }
 }
 //_____________________________________________________________________________
-void AliTOFcalib::CreateSimCalArrays(){
-
-  // creating arrays for simulation online/offline calibration objs
-
-  fTOFSimCalOnline = new TObjArray(fNChannels);
-  fTOFSimCalOffline = new TObjArray(fNChannels);
-  fTOFSimCalOnline->SetOwner();
-  fTOFSimCalOffline->SetOwner();
-  for (Int_t iarray = 0; iarray<fNChannels; iarray++){
-    AliTOFChannelOnline * simCalChOnline = new AliTOFChannelOnline();
-    AliTOFChannelOffline * simCalChOffline = new AliTOFChannelOffline();
-    fTOFSimCalOnline->AddAt(simCalChOnline,iarray);
-    fTOFSimCalOffline->AddAt(simCalChOffline,iarray);
-  }
-}
-//_____________________________________________________________________________
 void AliTOFcalib::WriteParOnlineOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
 {
   //Write calibration parameters to the CDB
@@ -258,6 +275,66 @@ void AliTOFcalib::WriteParOnlineOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
   delete md;
 }
 //_____________________________________________________________________________
+void AliTOFcalib::WriteParOnlinePulserOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
+{
+  //Write calibration parameters from pulser to the CDB
+  SetFirstRun(minrun);
+  SetLastRun(maxrun);
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "Pulser" ;  // to be consistent with TOFPreprocessor
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliDebug(2,Form("Writing TOF online calib obj from pulser on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
+  AliCDBId id(out,fFirstRun,fLastRun);
+  AliCDBMetaData *md = new AliCDBMetaData();
+  md->SetResponsible("Chiara Zampolli");
+  if (!fTOFCalOnlinePulser) {
+    // deve uscire!!
+  }
+  man->Put(fTOFCalOnlinePulser,id,md);
+  delete md;
+}
+//_____________________________________________________________________________
+void AliTOFcalib::WriteParOnlineNoiseOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
+{
+  //Write calibration parameters from noise to the CDB
+  SetFirstRun(minrun);
+  SetLastRun(maxrun);
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "Noise" ;  // to be consistent with TOFPreprocessor
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliDebug(2,Form("Writing TOF online calib obj from noise on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
+  AliCDBId id(out,fFirstRun,fLastRun);
+  AliCDBMetaData *md = new AliCDBMetaData();
+  md->SetResponsible("Chiara Zampolli");
+  if (!fTOFCalOnlineNoise) {
+    // deve uscire!!
+  }
+  man->Put(fTOFCalOnlineNoise,id,md);
+  delete md;
+}
+//_____________________________________________________________________________
+void AliTOFcalib::WriteParOnlineHWOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun)
+{
+  //Write calibration parameters from hardware to the CDB
+  SetFirstRun(minrun);
+  SetLastRun(maxrun);
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "HW" ;  // to be consistent with TOFPreprocessor
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliDebug(2,Form("Writing TOF online calib obj from hardware on CDB with run range [%i, %i] ",fFirstRun,fLastRun));
+  AliCDBId id(out,fFirstRun,fLastRun);
+  AliCDBMetaData *md = new AliCDBMetaData();
+  md->SetResponsible("Chiara Zampolli");
+  if (!fTOFCalOnlineHW) {
+    // deve uscire!!
+  }
+  man->Put(fTOFCalOnlineHW,id,md);
+  delete md;
+}
+//_____________________________________________________________________________
 
 void AliTOFcalib::WriteParOnlineOnCDB(Char_t *sel)
 {
@@ -279,6 +356,66 @@ void AliTOFcalib::WriteParOnlineOnCDB(Char_t *sel)
 }
 //_____________________________________________________________________________
 
+void AliTOFcalib::WriteParOnlinePulserOnCDB(Char_t *sel)
+{
+  //Write calibration parameters from pulser to the CDB with infinite validity
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "Pulser" ;  // to be consistent with TOFPreprocessor
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliCDBRunRange runrange(fFirstRun,fLastRun);
+  AliDebug(2,Form("Writing TOF online calib obj from pulser on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
+  AliCDBId id(out,runrange);
+  AliCDBMetaData *md = new AliCDBMetaData();
+  md->SetResponsible("Chiara Zampolli");
+  if (!fTOFCalOnlinePulser) {
+    // deve uscire!!
+  }
+  man->Put(fTOFCalOnlinePulser,id,md);
+  delete md;
+}
+//_____________________________________________________________________________
+
+void AliTOFcalib::WriteParOnlineNoiseOnCDB(Char_t *sel)
+{
+  //Write calibration parameters from noise to the CDB with infinite validity
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "Noise" ;  // to be consistent with TOFPreprocessor
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliCDBRunRange runrange(fFirstRun,fLastRun);
+  AliDebug(2,Form("Writing TOF online calib obj from noise on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
+  AliCDBId id(out,runrange);
+  AliCDBMetaData *md = new AliCDBMetaData();
+  md->SetResponsible("Chiara Zampolli");
+  if (!fTOFCalOnlineNoise) {
+    // deve uscire!!
+  }
+  man->Put(fTOFCalOnlineNoise,id,md);
+  delete md;
+}
+//_____________________________________________________________________________
+
+void AliTOFcalib::WriteParOnlineHWOnCDB(Char_t *sel)
+{
+  //Write calibration parameters from hardware to the CDB with infinite validity
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "HW" ;  // to be consistent with TOFPreprocessor
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliCDBRunRange runrange(fFirstRun,fLastRun);
+  AliDebug(2,Form("Writing TOF online calib obj from harware on CDB with run range [%i, %i] ",runrange.GetFirstRun(),runrange.GetLastRun()));
+  AliCDBId id(out,runrange);
+  AliCDBMetaData *md = new AliCDBMetaData();
+  md->SetResponsible("Chiara Zampolli");
+  if (!fTOFCalOnlineHW) {
+    // deve uscire!!
+  }
+  man->Put(fTOFCalOnlineHW,id,md);
+  delete md;
+}
+//_____________________________________________________________________________
+
 void AliTOFcalib::WriteParOfflineOnCDB(Char_t *sel, const Char_t *validity, Int_t minrun, Int_t maxrun)
 {
   //Write calibration parameters to the CDB
@@ -338,11 +475,11 @@ Bool_t AliTOFcalib::ReadParOnlineFromCDB(Char_t *sel, Int_t nrun)
 }
 //_____________________________________________________________________________
 
-Bool_t AliTOFcalib::ReadParOfflineFromCDB(Char_t *sel, Int_t nrun)
+Bool_t AliTOFcalib::ReadParOnlinePulserFromCDB(Char_t *sel, Int_t nrun)
 {
-  //Read calibration parameters from the CDB
+  //Read calibration parameters from pulser from the CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  Char_t *sel1 = "ParOffline" ;
+  Char_t *sel1 = "Pulser" ;
   Char_t  out[100];
   sprintf(out,"%s/%s",sel,sel1); 
   if (!man->Get(out,nrun)) { 
@@ -352,116 +489,117 @@ Bool_t AliTOFcalib::ReadParOfflineFromCDB(Char_t *sel, Int_t nrun)
   if(!entry->GetObject()){
     return kFALSE;
   }  
-  AliCDBMetaData * md = entry->GetMetaData();
-  fkValidity = md->GetComment();  
-  fTOFCalOffline =(TObjArray*)entry->GetObject();
+  
+  fTOFCalOnlinePulser =(TObjArray*)entry->GetObject();
 
   return kTRUE; 
    
 }
 //_____________________________________________________________________________
-void AliTOFcalib::WriteSimParOnlineOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun, TObjArray *calOnline){
-  //Write Sim miscalibration parameters to the CDB
 
-  fTOFSimCalOnline=calOnline;  
+Bool_t AliTOFcalib::ReadParOnlineNoiseFromCDB(Char_t *sel, Int_t nrun)
+{
+  //Read calibration parameters from noise from the CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  AliCDBMetaData *md = new AliCDBMetaData();
-  md->SetResponsible("Chiara Zampolli");
-  Char_t *sel1 = "SimParOnline" ;
+  Char_t *sel1 = "Noise" ;
   Char_t  out[100];
   sprintf(out,"%s/%s",sel,sel1); 
-  AliCDBId id1(out,minrun,maxrun);
-  man->Put(fTOFSimCalOnline,id1,md);
-  delete md;
+  if (!man->Get(out,nrun)) { 
+    return kFALSE;
+  }
+  AliCDBEntry *entry = man->Get(out,nrun);
+  if(!entry->GetObject()){
+    return kFALSE;
+  }  
+  
+  fTOFCalOnlineNoise =(TObjArray*)entry->GetObject();
+
+  return kTRUE; 
+   
 }
 //_____________________________________________________________________________
-void AliTOFcalib::WriteSimParOfflineOnCDB(Char_t *sel, const Char_t *validity, Int_t minrun, Int_t maxrun, TObjArray *calOffline, TH1F *histo){
-  //Write Sim miscalibration parameters to the CDB
 
-  fTOFSimToT=histo;
-  fTOFSimCalOffline=calOffline;  
+Bool_t AliTOFcalib::ReadParOnlineHWFromCDB(Char_t *sel, Int_t nrun)
+{
+  //Read calibration parameters from hardware from the CDB
   AliCDBManager *man = AliCDBManager::Instance();
-  AliCDBMetaData *md = new AliCDBMetaData();
-  md->SetResponsible("Chiara Zampolli");
-  md->SetComment(validity);
-  Char_t *sel1 = "SimParOffline" ;
+  Char_t *sel1 = "HW" ;
   Char_t  out[100];
   sprintf(out,"%s/%s",sel,sel1); 
-  AliCDBId id1(out,minrun,maxrun);
-  man->Put(fTOFSimCalOffline,id1,md);
-  Char_t *sel2 = "SimHisto" ;
-  sprintf(out,"%s/%s",sel,sel2); 
-  AliCDBMetaData *mdhisto = new AliCDBMetaData();
-  mdhisto->SetResponsible("Chiara Zampolli");
-  AliCDBId id2(out,minrun,maxrun);
-  man->Put(fTOFSimToT,id2,mdhisto);
-  delete md;
-  delete mdhisto;
+  if (!man->Get(out,nrun)) { 
+    return kFALSE;
+  }
+  AliCDBEntry *entry = man->Get(out,nrun);
+  if(!entry->GetObject()){
+    return kFALSE;
+  }  
+  
+  fTOFCalOnlineHW =(TObjArray*)entry->GetObject();
+
+  return kTRUE; 
+   
 }
 //_____________________________________________________________________________
-void AliTOFcalib::ReadSimParOnlineFromCDB(Char_t *sel, Int_t nrun)
+
+Bool_t AliTOFcalib::ReadParOfflineFromCDB(Char_t *sel, Int_t nrun)
 {
-  //Read miscalibration parameters from the CDB
+  //Read calibration parameters from the CDB
   AliCDBManager *man = AliCDBManager::Instance();
-
-  // The Slewing Pars
-
-  Char_t *sel1 = "SimParOnline" ;
+  Char_t *sel1 = "ParOffline" ;
   Char_t  out[100];
   sprintf(out,"%s/%s",sel,sel1); 
   if (!man->Get(out,nrun)) { 
-    AliFatal("Exiting, no CDB object (SimParOnline) found!!!");
-    exit(0);  
+    return kFALSE;
   }
-  AliCDBEntry *entry1 = man->Get(out,nrun);
-  if(!entry1->GetObject()){
-    AliFatal("Exiting, no CDB object (SimParOnline) found!!!");
-    exit(0);  
+  AliCDBEntry *entry = man->Get(out,nrun);
+  if(!entry->GetObject()){
+    return kFALSE;
   }  
-  TObjArray *cal =(TObjArray*)entry1->GetObject();
-  fTOFSimCalOnline=cal;
+  AliCDBMetaData * md = entry->GetMetaData();
+  fkValidity = md->GetComment();  
+  fTOFCalOffline =(TObjArray*)entry->GetObject();
 
+  return kTRUE; 
+   
 }
 //_____________________________________________________________________________
-void AliTOFcalib::ReadSimParOfflineFromCDB(Char_t *sel, Int_t nrun)
+void AliTOFcalib::WriteSimHistoOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun, TH1F *histo){
+  //Write Sim miscalibration parameters to the CDB
+
+  fTOFSimToT=histo;
+  AliCDBManager *man = AliCDBManager::Instance();
+  Char_t *sel1 = "SimHisto" ;
+  Char_t  out[100];
+  sprintf(out,"%s/%s",sel,sel1); 
+  AliCDBMetaData *mdhisto = new AliCDBMetaData();
+  mdhisto->SetResponsible("Chiara Zampolli");
+  AliCDBId id(out,minrun,maxrun);
+  man->Put(fTOFSimToT,id,mdhisto);
+  delete mdhisto;
+}
+//_____________________________________________________________________________
+Bool_t AliTOFcalib::ReadSimHistoFromCDB(Char_t *sel, Int_t nrun)
 {
   //Read miscalibration parameters from the CDB
   AliCDBManager *man = AliCDBManager::Instance();
 
-  // The Slewing Pars
+  // The Tot Histo
 
-  Char_t *sel1 = "SimParOffline" ;
+  Char_t *sel1 = "SimHisto" ;
   Char_t  out[100];
   sprintf(out,"%s/%s",sel,sel1); 
-  if (!man->Get(out,nrun)) { 
-    AliFatal("Exiting, no CDB object (SimParOffline) found!!!");
-    exit(0);  
-  }
-  AliCDBEntry *entry1 = man->Get(out,nrun);
-  if(!entry1->GetObject()){
-    AliFatal("Exiting, no CDB object (SimParOffline) found!!!");
-    exit(0);  
-  }  
-  TObjArray *cal =(TObjArray*)entry1->GetObject();
-  AliCDBMetaData *md = (AliCDBMetaData*)entry1->GetMetaData();
-  fkValidity = md->GetComment();
-  fTOFSimCalOffline=cal;
-
-  // The Tot Histo
-
-  Char_t *sel2 = "SimHisto" ;
-  sprintf(out,"%s/%s",sel,sel2); 
   if (!man->Get(out,nrun)) { 
     AliFatal("Exiting, no CDB object (SimHisto) found!!!");
     exit(0);  
   }
-  AliCDBEntry *entry2 = man->Get(out,nrun);
-  if(!entry2->GetObject()){
+  AliCDBEntry *entry = man->Get(out,nrun);
+  if(!entry->GetObject()){
     AliFatal("Exiting, no CDB object (SimHisto) found!!!");
     exit(0);  
   }  
-  TH1F *histo =(TH1F*)entry2->GetObject();
+  TH1F *histo =(TH1F*)entry->GetObject();
   fTOFSimToT=histo;
+  return kTRUE;
 }
 //_____________________________________________________________________________
 void AliTOFcalib::WriteRecParOnCDB(Char_t *sel, Int_t minrun, Int_t maxrun, AliTOFRecoParam *param){
@@ -591,6 +729,26 @@ void AliTOFcalib::CreateTreeFromFile(Int_t minrun, Int_t maxrun){
   AliInfo(Form("Number of runs being analyzed %i",fNruns));
 }
 //-----------------------------------------------------------------------------
+void AliTOFcalib::CreateChainFromGrid(Int_t minrun, Int_t maxrun){
+
+  // creating the chain with the trees for calibration
+  // collecting them from the Grid 
+  // from minrun to maxrun
+
+  fChain = new TChain("T");
+  AliInfo("connected to alien");
+  TGrid::Connect("alien://");
+  
+  Char_t filename[100];
+  for (Int_t irun = minrun;irun<=maxrun;irun++){
+    sprintf(filename,"alien:///alice/cern.ch/user/c/czampolli/TOFCalibReference_%i.root",irun);
+    fChain->Add(filename);
+    fNruns++;    
+  }
+  
+  AliInfo(Form("Number of runs being analyzed %i",fNruns));
+}
+//-----------------------------------------------------------------------------
 Int_t AliTOFcalib::Calibrate(Int_t ichmin, Int_t ichmax, Option_t *optionSave, Option_t *optionFit){
 
   // calibrating summing more than one channels
@@ -609,15 +767,18 @@ Int_t AliTOFcalib::Calibrate(Int_t ichmin, Int_t ichmax, Option_t *optionSave, O
 
   Float_t p[CHENTRIESSMALL];
   Int_t nentries;
-  fTree->SetBranchAddress("nentries",&nentries);
-  fTree->SetBranchAddress("TOFentries",p);
+  //fTree->SetBranchAddress("nentries",&nentries);
+  //fTree->SetBranchAddress("TOFentries",p);
+  fChain->SetBranchAddress("nentries",&nentries);
+  fChain->SetBranchAddress("TOFentries",p);
 
   Float_t ntracksTotalmean =0;
   for (Int_t i=ichmin; i<ichmax; i++){
     Int_t ientry = -1;
     for (Int_t irun=0;irun<fNruns;irun++){
       ientry = i+irun*fNChannels;
-      fTree->GetEntry(ientry);
+      //fTree->GetEntry(ientry);
+      fChain->GetEntry(ientry);
       Int_t ntracksRun=nentries/3;
       ntracksTotalmean+=ntracksRun;
     }
@@ -646,7 +807,8 @@ Int_t AliTOFcalib::Calibrate(Int_t ichmin, Int_t ichmax, Option_t *optionSave, O
     Int_t ientry = -1;
     for (Int_t irun=0;irun<fNruns;irun++){
       ientry = i+irun*fNChannels;
-      fTree->GetEntry(ientry);
+      //fTree->GetEntry(ientry);
+      fChain->GetEntry(ientry);
       ntracksTotal+=nentries/3;
       ntracksRun=nentries/3;
       AliDebug(2,Form("run %i, channel %i, nentries = %i, ntracks = %i",irun,i,nentries, ntracksRun));
@@ -676,7 +838,8 @@ Int_t AliTOFcalib::Calibrate(Int_t ichmin, Int_t ichmax, Option_t *optionSave, O
     Int_t ientry = -1;
     for (Int_t i=ichmin; i<ichmax; i++){
       ientry = i+irun*fNChannels;
-      fTree->GetEntry(ientry);
+      //fTree->GetEntry(ientry);
+      fChain->GetEntry(ientry);
       ntracksRun=nentries/3;
       for (Int_t j=0;j<ntracksRun;j++){
        Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT; 
@@ -747,14 +910,17 @@ Int_t AliTOFcalib::Calibrate(Int_t i, Option_t *optionSave, Option_t *optionFit)
 
   Float_t p[MAXCHENTRIESSMALL];
   Int_t nentries;
-  fTree->SetBranchAddress("nentries",&nentries);
-  fTree->SetBranchAddress("TOFentries",p);
+  //fTree->SetBranchAddress("nentries",&nentries);
+  //fTree->SetBranchAddress("TOFentries",p);
+  fChain->SetBranchAddress("nentries",&nentries);
+  fChain->SetBranchAddress("TOFentries",p);
 
   Float_t ntracksTotal =0;
   for (Int_t irun=0;irun<fNruns;irun++){
     Int_t ientry = -1;
     ientry = i+irun*fNChannels;
-    fTree->GetEntry(ientry);
+    //fTree->GetEntry(ientry);
+    fChain->GetEntry(ientry);
     ntracksTotal+=nentries/3;    
   }
   
@@ -779,7 +945,8 @@ Int_t AliTOFcalib::Calibrate(Int_t i, Option_t *optionSave, Option_t *optionFit)
   for (Int_t irun=0;irun<fNruns;irun++){
     Int_t ientry = -1;
     ientry = i+irun*fNChannels;
-    fTree->GetEntry(ientry);
+    //fTree->GetEntry(ientry);
+    fChain->GetEntry(ientry);
     ntracksRun=nentries/3;
     AliDebug(2,Form("run %i, channel %i, nentries = %i, ntracksRun = %i",irun, i ,nentries, ntracksRun));
     for (Int_t j=0;j<ntracksRun;j++){
@@ -806,7 +973,8 @@ Int_t AliTOFcalib::Calibrate(Int_t i, Option_t *optionSave, Option_t *optionFit)
   for (Int_t irun=0;irun<fNruns;irun++){
     Int_t ientry = -1;
     ientry = i+irun*fNChannels;
-    fTree->GetEntry(ientry);
+    //fTree->GetEntry(ientry);
+    fChain->GetEntry(ientry);
     ntracksRun=nentries/3;
     for (Int_t j=0;j<ntracksRun;j++){
       Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT; 
@@ -881,8 +1049,10 @@ Int_t AliTOFcalib::Calibrate(Int_t nch, Int_t *ch, Option_t *optionSave, Option_
   }
   Float_t p[MAXCHENTRIESSMALL];
   Int_t nentries;
-  fTree->SetBranchAddress("nentries",&nentries);
-  fTree->SetBranchAddress("TOFentries",p);
+  //fTree->SetBranchAddress("nentries",&nentries);
+  //fTree->SetBranchAddress("TOFentries",p);
+  fChain->SetBranchAddress("nentries",&nentries);
+  fChain->SetBranchAddress("TOFentries",p);
 
   Float_t ntracksTotalmean =0;
   for (Int_t ich=0; ich<nch; ich++){
@@ -890,7 +1060,8 @@ Int_t AliTOFcalib::Calibrate(Int_t nch, Int_t *ch, Option_t *optionSave, Option_
       Int_t i = ch[ich];
       for (Int_t irun=0;irun<fNruns;irun++){
       ientry = i+irun*fNChannels;
-      fTree->GetEntry(ientry);
+      //fTree->GetEntry(ientry);
+      fChain->GetEntry(ientry);
       ntracksTotalmean+=nentries/3;
     }
   }
@@ -924,7 +1095,8 @@ Int_t AliTOFcalib::Calibrate(Int_t nch, Int_t *ch, Option_t *optionSave, Option_
     for (Int_t irun=0;irun<fNruns;irun++){
       i = ch[ich]+irun*fNChannels;
       AliDebug(2,Form("Calibrating channel %i",i));
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksTotal+=nentries/3;
     }
     if (ntracksTotal < MEANENTRIES) {
@@ -934,7 +1106,8 @@ Int_t AliTOFcalib::Calibrate(Int_t nch, Int_t *ch, Option_t *optionSave, Option_
   
     for (Int_t irun=0;irun<fNruns;irun++){
       Int_t i = ch[ich]+irun*fNChannels;
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksRun=nentries/3;
       for (Int_t j=0;j<ntracksRun;j++){
        Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT; 
@@ -956,7 +1129,8 @@ Int_t AliTOFcalib::Calibrate(Int_t nch, Int_t *ch, Option_t *optionSave, Option_
     TProfile* hSlewingProf = new TProfile("hSlewingProf", "hSlewingProf",nusefulbins, binsProfile, "G");  // CHECK THE BUILD OPTION, PLEASE!!!!!!
     for (Int_t irun=0;irun<fNruns;irun++){
       Int_t i = ch[ich]+irun*fNChannels;
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksRun=nentries/3;
       for (Int_t j=0;j<ntracksRun;j++){
        Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT; 
@@ -1029,12 +1203,15 @@ Int_t AliTOFcalib::CalibrateFromProfile(Int_t ich, Option_t *optionSave, Option_
   Float_t p[MAXCHENTRIESSMALL];
   Int_t nentries;
   Int_t ntracksTotal=0;
-  fTree->SetBranchAddress("nentries",&nentries);
-  fTree->SetBranchAddress("TOFentries",p);
+  //fTree->SetBranchAddress("nentries",&nentries);
+  //fTree->SetBranchAddress("TOFentries",p);
+  fChain->SetBranchAddress("nentries",&nentries);
+  fChain->SetBranchAddress("TOFentries",p);
 
   for (Int_t irun=0;irun<fNruns;irun++){
     Int_t i = ich+irun*fNChannels;
-    fTree->GetEntry(i);
+    //fTree->GetEntry(i);
+    fChain->GetEntry(i);
     ntracksTotal+=nentries/3;
   }
 
@@ -1094,14 +1271,17 @@ Int_t AliTOFcalib::Calibrate(Option_t *optionSave, Option_t *optionFit){
 
   Float_t p[MAXCHENTRIESSMALL];
   Int_t nentries;
-  fTree->SetBranchAddress("nentries",&nentries);
-  fTree->SetBranchAddress("TOFentries",p);
+  //fTree->SetBranchAddress("nentries",&nentries);
+  //fTree->SetBranchAddress("TOFentries",p);
+  fChain->SetBranchAddress("nentries",&nentries);
+  fChain->SetBranchAddress("TOFentries",p);
 
   Float_t ntracksTotalmean =0;
   for (Int_t ii=0; ii<fNChannels; ii++){
     for (Int_t irun=0;irun<fNruns;irun++){
       Int_t i = ii+irun*fNChannels;
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksTotalmean+=nentries/3;
     }
   }
@@ -1130,7 +1310,8 @@ Int_t AliTOFcalib::Calibrate(Option_t *optionSave, Option_t *optionFit){
     Int_t ntracksTotal = 0;
     for (Int_t irun=0;irun<fNruns;irun++){
       Int_t i = ii+irun*fNChannels;
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksTotal+=nentries/3;
     }
     if (ntracksTotal < MEANENTRIES) {
@@ -1140,7 +1321,8 @@ Int_t AliTOFcalib::Calibrate(Option_t *optionSave, Option_t *optionFit){
     Float_t meantime=0;
     for (Int_t irun=0;irun<fNruns;irun++){
       Int_t i = ii+irun*fNChannels;
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksRun=nentries/3;
       for (Int_t j=0;j<ntracksRun;j++){
        Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT; 
@@ -1160,7 +1342,8 @@ Int_t AliTOFcalib::Calibrate(Option_t *optionSave, Option_t *optionFit){
     TProfile* hSlewingProf = new TProfile("hSlewingProf", "hSlewingProf",nusefulbins, binsProfile, "G");  // CHECK THE BUILD OPTION, PLEASE!!!!!!
     for (Int_t irun=0;irun<fNruns;irun++){
       Int_t i = ii+irun*fNChannels;
-      fTree->GetEntry(i);
+      //fTree->GetEntry(i);
+      fChain->GetEntry(i);
       ntracksRun=nentries/3;
       for (Int_t j=0;j<ntracksRun;j++){
        Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT; 
@@ -1221,8 +1404,10 @@ TH1F* AliTOFcalib::Profile(Int_t ich)
 
   Float_t p[MAXCHENTRIESSMALL];
   Int_t nentries;
-  fTree->SetBranchAddress("nentries",&nentries);
-  fTree->SetBranchAddress("TOFentries",p);
+  //fTree->SetBranchAddress("nentries",&nentries);
+  //fTree->SetBranchAddress("TOFentries",p);
+  fChain->SetBranchAddress("nentries",&nentries);
+  fChain->SetBranchAddress("TOFentries",p);
 
   //Prepare histograms for Slewing Correction
   const Int_t knbinToT = 100;
@@ -1258,7 +1443,8 @@ TH1F* AliTOFcalib::Profile(Int_t ich)
   TH1F *histo = new TH1F("histo", "1D Time vs ToT", knbinToT, minToT, maxToT);
   for (Int_t irun=0;irun<fNruns;irun++){
     Int_t i = ich+irun*fNChannels;
-    fTree->GetEntry(i);
+    //fTree->GetEntry(i);
+    fChain->GetEntry(i);
     ntracksRun=nentries/3;
     for (Int_t j=0;j<ntracksRun;j++){
       Int_t idxexToT = (j* NIDXSMALL)+DELTAIDXTOT;