]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibTask.cxx
ALIROOT-5634 Install all needed files
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibTask.cxx
index 0aac7e6fbf6f00dd864b8471d3baba75177415db..fb3a42cae8b8702d89fa99f1909082db21313e2d 100644 (file)
@@ -71,11 +71,16 @@ using namespace std;
 #include "AliTRDCalibraVector.h"
 #include "AliTRDCalibraFillHisto.h"
 #include "AliTRDCalibraVdriftLinearFit.h" 
+#include "AliTRDCalibraExbAltFit.h" 
 
 #include "AliTRDcalibDB.h"
 #include "AliCDBId.h"
 #include "AliLog.h"
 
+#include "AliTRDCalibChamberStatus.h"
+#include "AliTRDdEdxBaseUtils.h"
+#include "AliTRDdEdxCalibHistArray.h"
+#include "AliTRDdEdxCalibUtils.h"
 
 #include "AliTRDCalibTask.h"
 
@@ -83,77 +88,98 @@ using namespace std;
 ClassImp(AliTRDCalibTask)
 
 //________________________________________________________________________
-  AliTRDCalibTask::AliTRDCalibTask(const char *name) 
-    : AliAnalysisTaskSE(name), fESD(0),
-      fESDfriend(0),
-      fkEsdTrack(0),
-      fFriendTrack(0),
-      fCalibObject(0),
-      fTrdTrack(0),
-      fCl(0),
-      fListHist(0),
-      fTRDCalibraFillHisto(0),
-      fNEvents(0),
-      fNEventsInput(0),
-      fNbTRDTrack(0),
-      fNbTRDTrackOffline(0),
-      fNbTRDTrackStandalone(0),
-      fNbTPCTRDtrack(0),
-      fNbGoodTracks(0),
-      fNbTimeBin(0),
-      fNbTimeBinOffline(0),
-      fNbTimeBinStandalone(0),
-      fNbClusters(0),
-      fNbClustersOffline(0),
-      fNbClustersStandalone(0),
-      fNbTracklets(0),
-      fNbTrackletsOffline(0),
-      fNbTrackletsStandalone(0),
-      fAbsoluteGain(0),
-      fCH2dSum(0),
-      fPH2dSum(0),
-      fCH2dSM(0),
-      fPH2dSM(0),
-      fCH2dTest(0),
-      fPH2dTest(0),
-      fLinearVdriftTest(0),
-      fOnInstance(kTRUE),
-      fHisto2d(kTRUE),
-      fVector2d(kFALSE),
-      fVdriftLinear(kTRUE),
-      fNbTimeBins(0),
-      fSelectedTrigger(new TObjArray()),
-      fRejected(kTRUE),
-      fEsdTrackCuts(0),
-      fRequirePrimaryVertex(kFALSE),
-      fVtxTPC(kFALSE),
-      fVtxSPD(kFALSE),
-      fMinNbContributors(0),
-      fRangePrimaryVertexZ(9999999.0),
-      fMinNbTracks(9),
-      fMaxNbTracks(500),
-      fLow(0),
-      fHigh(30),
-      fFillZero(kFALSE),
-      fNormalizeNbOfCluster(kFALSE),
-      fRelativeScale(0.0),
-      fMaxCluster(100.0),
-      fNbMaxCluster(2),
-      fOfflineTracks(kFALSE),
-      fStandaloneTracks(kFALSE),
-      fFirstRunGain(-1),
-      fVersionGainUsed(-1),
-      fSubVersionGainUsed(-1),
-      fFirstRunGainLocal(-1),
-      fVersionGainLocalUsed(-1),
-      fSubVersionGainLocalUsed(-1),
-      fFirstRunVdrift(-1),
-      fVersionVdriftUsed(-1), 
-      fSubVersionVdriftUsed(-1),
-      fCalDetGain(0x0),
-      fMaxEvent(0),
-      fCounter(0),
-      fDebug(0)
+AliTRDCalibTask::AliTRDCalibTask(const char *name) 
+: AliAnalysisTaskSE(name), fESD(0),
+  fkEsdTrack(0),
+  fFriendTrack(0),
+  fCalibObject(0),
+  fTrdTrack(0),
+  fCl(0),
+  fListHist(0),
+  fTRDCalibraFillHisto(0),
+  fTRDChamberStatus(0),
+  fNEvents(0),
+  fNEventsInput(0),
+  fNEventsTrigger(0),
+  fNbTRDTrack(0),
+  fNbTRDTrackOffline(0),
+  fNbTRDTrackStandalone(0),
+  fNbTPCTRDtrack(0),
+  fNbGoodTracks(0),
+  fNbTimeBin(0),
+  fNbTimeBinOffline(0),
+  fNbTimeBinStandalone(0),
+  fNbClusters(0),
+  fNbClustersOffline(0),
+  fNbClustersStandalone(0),
+  fNbTracklets(0),
+  fNbTrackletsOffline(0),
+  fNbTrackletsStandalone(0),
+  fAbsoluteGain(0),
+  fTOFbc(0),
+  fCH2dSum(0),
+  fPH2dSum(0),
+  fCH2dSM(0),
+  fPH2dSM(0),
+  fCH2dTest(0),
+  fPH2dTest(0),
+  fLinearVdriftTest(0),
+  fOnInstance(kTRUE),
+  fHisto2d(kTRUE),
+  fVector2d(kFALSE),
+  fVdriftLinear(kTRUE),
+  fExbAlt(kFALSE),
+  fDebugLevelTRDCalibraFillHisto(0),
+  fNbTimeBins(0),
+  fNumberBinCharge(100),
+  fRangeCharge(150),
+  fVdBindx(32), 
+  fVdBindy(70), 
+  fVdRangex(0.8),
+  fVdRangey(1.4),
+  fSelectTrigger(kTRUE),
+  fSelectedTrigger(new TObjArray()),
+  fRejected(kTRUE),
+  fEsdTrackCuts(0),
+  fRequirePrimaryVertex(kFALSE),
+  fVtxTPC(kFALSE),
+  fVtxSPD(kFALSE),
+  fMinNbContributors(0),
+  fRangePrimaryVertexZ(9999999.0),
+  fRejectPileUpWithSPD(kFALSE),
+  fRejectPileUpWithTOF(kFALSE),
+  fRejectPileUpWithTOFOrITS(kFALSE),
+  fMinNbTracks(9),
+  fMaxNbTracks(999999999),
+  fCutWithVdriftCalib(kFALSE),
+  fMinNbTRDtracklets(0),
+  fMinTRDMomentum(0),
+  fScaleGainWithTPCSignal(kFALSE),
+  fLow(0),
+  fHigh(30),
+  fFillZero(kFALSE),
+  fNormalizeNbOfCluster(kFALSE),
+  fRelativeScale(0.0),
+  fMaxCluster(100.0),
+  fNbMaxCluster(2),
+  fOfflineTracks(kFALSE),
+  fStandaloneTracks(kFALSE),
+  fFirstRunGain(-1),
+  fVersionGainUsed(-1),
+  fSubVersionGainUsed(-1),
+  fFirstRunGainLocal(-1),
+  fVersionGainLocalUsed(-1),
+  fSubVersionGainLocalUsed(-1),
+  fFirstRunVdrift(-1),
+  fVersionVdriftUsed(-1), 
+  fSubVersionVdriftUsed(-1),
+  fFirstRunExB(-1),
+  fVersionExBUsed(-1), 
+  fSubVersionExBUsed(-1),
+  fCalDetGain(0x0),
+  fMaxEvent(0),
+  fCounter(0),
+  fPHQon(kTRUE)
 {
   //
   // Default constructor
@@ -167,6 +193,7 @@ ClassImp(AliTRDCalibTask)
   fNrphi[1] = 0;
   fNrphi[2] = 0;
 
+  
   // Define input and output slots here
   // Input slot #0 works with a TChain
   DefineInput(0, TChain::Class());
@@ -186,6 +213,7 @@ AliTRDCalibTask::~AliTRDCalibTask()
   // Pointeur
   if(fNEvents) delete fNEvents;
   if(fNEventsInput) delete fNEventsInput;
+  if(fNEventsTrigger) delete fNEventsTrigger;
   if(fNbTRDTrack) delete fNbTRDTrack;
   if(fNbTRDTrackOffline) delete fNbTRDTrackOffline;
   if(fNbTRDTrackStandalone) delete fNbTRDTrackStandalone;
@@ -201,6 +229,7 @@ AliTRDCalibTask::~AliTRDCalibTask()
   if(fNbTrackletsOffline) delete fNbTrackletsOffline;
   if(fNbTrackletsStandalone) delete fNbTrackletsStandalone;
   if(fAbsoluteGain) delete fAbsoluteGain;
+  if(fTOFbc) delete fTOFbc;
   if(fCH2dSum) delete fCH2dSum;
   if(fPH2dSum) delete fPH2dSum;
   if(fCH2dSM) delete fCH2dSM;
@@ -208,6 +237,10 @@ AliTRDCalibTask::~AliTRDCalibTask()
   if(fCH2dTest) delete fCH2dTest;
   if(fPH2dTest) delete fPH2dTest;
   if(fLinearVdriftTest) delete fLinearVdriftTest;
+  if(IsPHQon()){
+    AliTRDdEdxCalibUtils::DeleteHistArray();
+  }
+
   if(fCalDetGain) delete fCalDetGain;
   
   if(fSelectedTrigger) {
@@ -218,6 +251,8 @@ AliTRDCalibTask::~AliTRDCalibTask()
     delete fEsdTrackCuts;
   }
   
+  if(fTRDChamberStatus) delete fTRDChamberStatus;
+  
 }
 
 //________________________________________________________________________
@@ -241,10 +276,19 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   // output list
   fListHist = new TList();
   fListHist->SetOwner();
-
+  
+  // init chamber status
+  fTRDChamberStatus = new AliTRDCalibChamberStatus();
+  fTRDChamberStatus->Init();
+  fListHist->Add(fTRDChamberStatus->GetSparseI());
+  
   // instance calibration 
   fTRDCalibraFillHisto = AliTRDCalibraFillHisto::Instance();
   if(fOnInstance) {
+    fTRDCalibraFillHisto->SetNumberBinCharge(fNumberBinCharge); // set number of bin of the charge distribution
+    fTRDCalibraFillHisto->SetCutWithVdriftCalib(fCutWithVdriftCalib); // cut vdrift
+    fTRDCalibraFillHisto->SetMinNbTRDtracklets(fMinNbTRDtracklets); // min number of TRD tracklets
+    fTRDCalibraFillHisto->SetMinTRDMomentum(fMinTRDMomentum); // min TRD momentum
     fTRDCalibraFillHisto->SetHisto2d(fHisto2d); // choose to use histograms
     fTRDCalibraFillHisto->SetVector2d(fVector2d); // choose to use vectors
     fTRDCalibraFillHisto->SetCH2dOn();  // choose to calibrate the gain
@@ -252,6 +296,8 @@ void AliTRDCalibTask::UserCreateOutputObjects()
     fTRDCalibraFillHisto->SetPRF2dOn(); // choose to look at the PRF
     fTRDCalibraFillHisto->SetLinearFitterOn(fVdriftLinear); // Other possibility vdrift VDRIFT
     fTRDCalibraFillHisto->SetLinearFitterDebugOn(fVdriftLinear); // Other possibility vdrift
+    fTRDCalibraFillHisto->SetExbAltFitOn(fExbAlt); // Alternative method for exb
+    fTRDCalibraFillHisto->SetScaleWithTPCSignal(fScaleGainWithTPCSignal); // Scale Gain with TPC signal
     for(Int_t k = 0; k < 3; k++){
       if(((fNz[k] != 10) && (fNrphi[k] != 10)) && ((fNz[k] != 100) && (fNrphi[k] != 100))) {
        fTRDCalibraFillHisto->SetNz(k,fNz[k]);                                    // Mode calibration
@@ -280,20 +326,32 @@ void AliTRDCalibTask::UserCreateOutputObjects()
     fTRDCalibraFillHisto->SetNumberClustersf(fHigh); // At least 11 clusters
     
     // For testing only
-    if(fDebug > 2) fTRDCalibraFillHisto->SetDebugLevel(1); //debug stuff
+    fTRDCalibraFillHisto->SetDebugLevel(fDebugLevelTRDCalibraFillHisto); //debug stuff
     
     if(fHisto2d) {  
       fListHist->Add(fTRDCalibraFillHisto->GetCH2d());
       fListHist->Add(fTRDCalibraFillHisto->GetPH2d()); 
       fListHist->Add(fTRDCalibraFillHisto->GetPRF2d());
     } 
-    if(fVdriftLinear) fListHist->Add((TObject *)fTRDCalibraFillHisto->GetVdriftLinearFit());
-    if(fVector2d) fListHist->Add((TObject *) fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector  
+    if(fVdriftLinear) {
+      AliTRDCalibraVdriftLinearFit *fvdl = fTRDCalibraFillHisto->GetVdriftLinearFit();
+      if(fvdl){
+       fvdl->SetNbBindx(fVdBindx);
+       fvdl->SetNbBindy(fVdBindy); 
+       fvdl->SetRangedx(fVdRangex); 
+       fvdl->SetRangedy(fVdRangey);  
+      }
+      fListHist->Add((TObject *)fTRDCalibraFillHisto->GetVdriftLinearFit());
+    }
+    if(fVector2d) fListHist->Add((TObject *) fTRDCalibraFillHisto->GetCalibraVector()); //calibra vector
+    if(fExbAlt) fListHist->Add((TObject *)fTRDCalibraFillHisto->GetExbAltFit());
   }
   fRelativeScale = fTRDCalibraFillHisto->GetRelativeScale(); // Get the relative scale for the gain
   
   fNEvents = new TH1I(Form("NEvents_%s",(const char*)fName),"NEvents", 2, 0, 2);
   fListHist->Add(fNEvents);
+  fNEventsTrigger = new TH1I(Form("NEventsTrigger_%s",(const char*)fName),"NEventsTrigger", 2, 0, 2);
+  fListHist->Add(fNEventsTrigger);
   fNEventsInput = new TH1I(Form("NEventsInput_%s",(const char*)fName),"NEventsInput", 2, 0, 2);
   fListHist->Add(fNEventsInput);
   
@@ -314,7 +372,24 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   fAbsoluteGain->SetStats(0);
   fAbsoluteGain->Sumw2();
   fListHist->Add(fAbsoluteGain);
+
+  fTOFbc = new TH2F(Form("TOFbc_%s",(const char*)fName),"TOFbc", 200, -150., 50., nBinsPt, binLimPt);
+  fTOFbc->SetYTitle("Momentum");
+  fTOFbc->SetXTitle("TOF bc");
+  fTOFbc->SetZTitle("counts");
+  fTOFbc->SetStats(0);
+  fTOFbc->Sumw2();
+  fListHist->Add(fTOFbc);
   
+  if(IsPHQon()){
+    printf("\n        AliTRDCalibTask PHQ is on!!     \n\n");
+    AliTRDdEdxBaseUtils::PrintControl();
+    AliTRDdEdxCalibUtils::IniHistArray(fListHist, kTRUE);
+  }
+  else{
+    printf("\n        AliTRDCalibTask PHQ is off!!     \n\n");
+  }
+
   /////////////////////////////////////////
   // First debug level
   ///////////////////////////////////////
@@ -480,6 +555,11 @@ void AliTRDCalibTask::UserExec(Option_t *)
       fTRDCalibraFillHisto->SetFirstRunVdrift(fFirstRunVdrift); // Vdrift Used
       fTRDCalibraFillHisto->SetVersionVdriftUsed(fVersionVdriftUsed); // Vdrift Used
       fTRDCalibraFillHisto->SetSubVersionVdriftUsed(fSubVersionVdriftUsed); // Vdrift Used
+      if((fFirstRunExB != -1) && (fVersionExBUsed != -1) && (fSubVersionExBUsed != -1)){
+       fTRDCalibraFillHisto->SetFirstRunExB(fFirstRunExB); // ExB Used
+       fTRDCalibraFillHisto->SetVersionExBUsed(fVersionExBUsed); // ExB Used
+       fTRDCalibraFillHisto->SetSubVersionExBUsed(fSubVersionExBUsed); // ExB Used
+      }
       fTRDCalibraFillHisto->InitCalDet();
     }
     if(fDebug > 1){
@@ -531,13 +611,13 @@ void AliTRDCalibTask::UserExec(Option_t *)
   //cout << "event = " << fCounter << endl;
   
   //printf("Counter %d\n",fCounter);
-  
+
   ///////////////////
   // Check trigger
   ///////////////////
   Bool_t pass = kTRUE;
 
-  if (strstr(type,"p-p")) {
+  if (fSelectTrigger) {
    
     //printf("Will check the triggers\n");
 
@@ -569,7 +649,12 @@ void AliTRDCalibTask::UserExec(Option_t *)
     }   
 
   }
-    
+
+  TString classfired = fESD->GetFiredTriggerClasses();
+  Bool_t isWU =  classfired.Contains("WU");
+  if(isWU) fNEventsTrigger->Fill(1.5);
+  else fNEventsTrigger->Fill(0.5);
+  
   //printf("Class Fired %s\n",(const char*)fESD->GetFiredTriggerClasses());
   //printf("Trigger passed\n");
   
@@ -599,7 +684,19 @@ void AliTRDCalibTask::UserExec(Option_t *)
   }
   
   //printf("Primary vertex passed\n");
+
+  //////////////////////////////////
+  // Reject pile-up with SPD
+  //////////////////////////////////
   
+  if(fRejectPileUpWithSPD) {
+    if(fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5)){
+      //printf("test\n");
+      PostData(1, fListHist);
+      return;
+    }
+  }
+
   //////////////////////////////////////
   // Requirement on number of good tracks
   //////////////////////////////////////
@@ -617,8 +714,10 @@ void AliTRDCalibTask::UserExec(Option_t *)
     //printf("centrality %f, centralityb %f\n",centrality,centralityb);
   }
   
-  if (strstr(type,"Pb-Pb")) {
-    //printf("Will check the number of good tracks\n");
+  //printf("Beam type %s\n",(const char*)type);
+  if (!strstr(type,"p-p")) {
+    //if (strstr(type,"A-A")) {
+    //printf("Will check the number of good tracks %f %f %f\n",nGoodParticles,fMinNbTracks,fMaxNbTracks);
     if((nGoodParticles < fMinNbTracks) || (nGoodParticles > fMaxNbTracks)) {
       PostData(1, fListHist);
       return;
@@ -637,7 +736,7 @@ void AliTRDCalibTask::UserExec(Option_t *)
   Int_t nbtrackTPC = 0;
   
 
-  
+
   if (nbTracks <= 0.0) {
     
     if(fDebug > 1) {
@@ -648,8 +747,8 @@ void AliTRDCalibTask::UserExec(Option_t *)
     PostData(1, fListHist);
     return;
   }
-  
-  
+
+
   fESDfriend = dynamic_cast<AliESDfriend*> (fESD->FindListObject("AliESDfriend"));
   if(!fESDfriend){
     AliError("fESDfriend not available");
@@ -661,14 +760,15 @@ void AliTRDCalibTask::UserExec(Option_t *)
     PostData(1, fListHist);
     return;
   }
-  
+
   //printf("has friends\n");
 
   /////////////////////////////////////
   // Loop on AliESDtrack
   ////////////////////////////////////
-  //printf("Nb of tracks %f\n",nbTracks);      
-  for(int itrk=0; itrk < nbTracks; ++itrk){
+  //printf("Nb of tracks %f\n",nbTracks); 
+  Int_t nbTracksfriends = fESDfriend->GetNumberOfTracks();     
+  for(int itrk=0; itrk < nbTracksfriends; ++itrk){
     
     // Get ESD track
     fkEsdTrack = fESD->GetTrack(itrk);
@@ -676,39 +776,22 @@ void AliTRDCalibTask::UserExec(Option_t *)
     ULong_t status = fkEsdTrack->GetStatus(); 
     if(status&(AliESDtrack::kTPCout)) ++nbtrackTPC;
     
-    // Quality cuts on the AliESDtrack
-    if((fEsdTrackCuts) && (!fEsdTrackCuts->IsSelected((AliVParticle *)fkEsdTrack))) {
-      //printf("Not a good track\n");
+    // Fix suggested by Alex
+    fFriendTrack = fESDfriend->GetTrack(itrk);
+    //printf("itrk %d\n",itrk);
+    //fFriendTrack = (fESDfriend->GetNumberOfTracks()>itrk)?fESDfriend->GetTrack(itrk):NULL;
+    if(!fFriendTrack)  {
+      //printf("No friend track %d\n",itrk);
       continue;
     }
-    
-    // First Absolute gain calibration
-    Int_t trdNTracklets = (Int_t) fkEsdTrack->GetTRDntracklets();
-    Int_t trdNTrackletsPID = (Int_t) fkEsdTrack->GetTRDntrackletsPID(); 
-    //printf("Number of trd tracklets %d and PID trd tracklets %d\n",trdNTracklets,trdNTrackletsPID);
-    if((trdNTracklets > 0) && (trdNTrackletsPID > 0)) {
-      for(Int_t iPlane = 0; iPlane < 6; ++iPlane){
-       //Double_t slide = fkEsdTrack->GetTRDslice(iPlane);
-       //printf("Number of slide %d\n",fkEsdTrack->GetNumberOfTRDslices());
-       //Double_t momentum = fkEsdTrack->GetTRDmomentum(iPlane);
-       //printf("momentum %f, slide %f\n",momentum,slide);
-       if(fkEsdTrack->GetTRDslice(iPlane) > 0.0) 
-         fAbsoluteGain->Fill(fkEsdTrack->GetTRDslice(iPlane)*8.0/100.0,
-                             fkEsdTrack->GetTRDmomentum(iPlane)); 
-      }
-    }     
-    
+
     // Other cuts
+    fTrdTrack = 0x0;
     Bool_t good = kTRUE;
     Bool_t standalonetrack = kFALSE;
     Bool_t offlinetrack = kFALSE;
     //ULong_t status = fkEsdTrack->GetStatus();
     
-    fFriendTrack = fESDfriend->GetTrack(itrk);
-    if(!fFriendTrack)  {
-      //printf("No friend track %d\n",itrk);
-      continue;
-    }
     //////////////////////////////////////
     // Loop on calibration objects
     //////////////////////////////////////
@@ -738,135 +821,191 @@ void AliTRDCalibTask::UserExec(Option_t *)
       }
       
       fTrdTrack = (AliTRDtrackV1 *)fCalibObject;
-      if(good && fOnInstance) {
-       //cout << "good" << endl;
-       fTRDCalibraFillHisto->UpdateHistogramsV1(fTrdTrack);
-       //printf("Fill fTRDCalibraFillHisto\n");
+      // process chamberstatus
+      fTRDChamberStatus->ProcessTrack(fTrdTrack);
+    }
+
+    // Quality cuts on the AliESDtrack
+    if((fEsdTrackCuts) && (!fEsdTrackCuts->IsSelected((AliVParticle *)fkEsdTrack))) {
+      //printf("Not a good track\n");
+      continue;
+    }
+    
+    Int_t nbcrossing = fkEsdTrack->GetTOFBunchCrossing();
+    fTOFbc->Fill(nbcrossing,fkEsdTrack->Pt());
+    // TOF pile-up rejection is asked
+    if(fRejectPileUpWithTOF) {
+      if(TMath::Abs(nbcrossing)>0.5) continue;
+    }
+
+    // ITS or TOF
+    if(fRejectPileUpWithTOFOrITS) {
+      ULong_t statusits = fkEsdTrack->GetStatus();
+      UChar_t itsPixel = fkEsdTrack->GetITSClusterMap();
+      Bool_t itskany = kFALSE;
+      if(((statusits & AliVTrack::kITSrefit) == AliVTrack::kITSrefit) && ((TESTBIT(itsPixel, 0) || TESTBIT(itsPixel, 1)))) itskany = kTRUE;
+      if(!(itskany || (TMath::Abs(nbcrossing)<0.5))) continue;
+    }
+
+    // First Absolute gain calibration
+    Int_t trdNTracklets = (Int_t) fkEsdTrack->GetTRDntracklets();
+    Int_t trdNTrackletsPID = (Int_t) fkEsdTrack->GetTRDntrackletsPID(); 
+    //printf("Number of trd tracklets %d and PID trd tracklets %d\n",trdNTracklets,trdNTrackletsPID);
+    if((trdNTracklets > 0) && (trdNTrackletsPID > 0)) {
+      for(Int_t iPlane = 0; iPlane < 6; ++iPlane){
+       //Double_t slide = fkEsdTrack->GetTRDslice(iPlane);
+       //printf("Number of slide %d\n",fkEsdTrack->GetNumberOfTRDslices());
+       //Double_t momentum = fkEsdTrack->GetTRDmomentum(iPlane);
+       //printf("momentum %f, slide %f\n",momentum,slide);
+       if(fkEsdTrack->GetTRDslice(iPlane) > 0.0) 
+         fAbsoluteGain->Fill(fkEsdTrack->GetTRDslice(iPlane)*8.0/100.0,
+                             fkEsdTrack->GetTRDmomentum(iPlane)); 
       }
+    }     
+    
+    
+    if(!fTrdTrack) continue; 
+
+    if(good && fOnInstance) {
+      //cout << "good" << endl;
+      fTRDCalibraFillHisto->UpdateHistogramsV1(fTrdTrack,fkEsdTrack);
+      //printf("Fill fTRDCalibraFillHisto\n");
+    }
+
+    if(IsPHQon()){
+      const Double_t mag = AliTRDdEdxBaseUtils::IsExBOn() ? fESD->GetMagneticField() : -1;
+      const Int_t charge = AliTRDdEdxBaseUtils::IsExBOn() ? fkEsdTrack->Charge() : -1;
+      const Double_t toTPCscale = AliTRDdEdxCalibUtils::GetCalibTPCscale(fkEsdTrack->GetTPCncls(), fkEsdTrack->GetTPCsignal());
+      if(toTPCscale>0){
+        AliTRDdEdxCalibUtils::FillHist(fTrdTrack, 0, mag, charge, toTPCscale);
+      }
+    }
+
+    //////////////////////////////////
+    // Debug 
+    ////////////////////////////////
+    
+    if(fDebug > 0) {
+      
+      //printf("Enter debug\n");
       
-      //////////////////////////////////
-      // Debug 
-      ////////////////////////////////
+      Int_t nbtracklets = 0;
       
-      if(fDebug > 0) {
+      // Check some stuff
+      // Coverity
+      //Bool_t standalonetracklet = kFALSE;  
+      const AliTRDseedV1 *tracklet = 0x0;
+      //////////////////////////////////////
+      // Loop tracklets
+      ///////////////////////////////////// 
+      Int_t nbclusters=0;
+      Double_t phtb[AliTRDseedV1::kNtb];
+      memset(phtb, 0, AliTRDseedV1::kNtb*sizeof(Double_t));
+      Double_t sum = 0.0;
+      Float_t normalisation = 1.13;
+      Int_t detector = 0;
+      Int_t sector = 0;
+      for(Int_t itr = 0; itr < 6; ++itr){
        
-       //printf("Enter debug\n");
+       if(!(tracklet = fTrdTrack->GetTracklet(itr))) continue;
+       if(!tracklet->IsOK()) continue;
+       ++nbtracklets;
+        // Coverity
+       //standalonetracklet = kFALSE; 
+       //if(tracklet->IsStandAlone()) standalonetracklet = kTRUE;
        
-       Int_t nbtracklets = 0;
+       nbclusters = 0;
+       memset(phtb, 0, AliTRDseedV1::kNtb*sizeof(Double_t));
+       sum = 0.0;
+       detector = 0;
+       sector = 0;
+       //Int_t crossrow = 0;
        
-       // Check some stuff
-       Bool_t standalonetracklet = kFALSE;  
-       const AliTRDseedV1 *tracklet = 0x0;
-       //////////////////////////////////////
-       // Loop tracklets
-       ///////////////////////////////////// 
-       Int_t nbclusters=0;
-       Double_t phtb[AliTRDseedV1::kNtb];
-        memset(phtb, 0, AliTRDseedV1::kNtb*sizeof(Double_t));
-       Double_t sum = 0.0;
-       Float_t normalisation = 6.67;
-       Int_t detector = 0;
-       Int_t sector = 0;
-       for(Int_t itr = 0; itr < 6; ++itr){
-         
-         if(!(tracklet = fTrdTrack->GetTracklet(itr))) continue;
-         if(!tracklet->IsOK()) continue;
-         ++nbtracklets;
-         standalonetracklet = kFALSE; 
-         if(tracklet->IsStandAlone()) standalonetracklet = kTRUE;
-         
-         nbclusters = 0;
-         memset(phtb, 0, AliTRDseedV1::kNtb*sizeof(Double_t));
-         sum = 0.0;
-         detector = 0;
-         sector = 0;
-         //Int_t crossrow = 0;
-         
          // Check no shared clusters
          //for(int icc=AliTRDseedV1::kNtb; icc<AliTRDseedV1::kNclusters; icc++){
          //  if((fcl = tracklet->GetClusters(icc)))  crossrow = 1;
          // }
-         
+       
          // Loop on clusters
-         Int_t time = 0;
-         Float_t ch = 0;
-         Float_t qcl = 0;
-         for(int ic=0; ic<AliTRDseedV1::kNtb; ++ic){
-           
-           if(!(fCl = tracklet->GetClusters(ic))) continue;
-           ++nbclusters;
-           time = fCl->GetPadTime();
-           ch =  tracklet->GetdQdl(ic);
-           qcl = TMath::Abs(fCl->GetQ());
-           detector = fCl->GetDetector();        
-           // Add the charge if shared cluster
-           if((ic+AliTRDseedV1::kNtb) < AliTRDseedV1::kNclusters) {
-             if((fCl = tracklet->GetClusters(ic+AliTRDseedV1::kNtb))) {
-               qcl += TMath::Abs(fCl->GetQ());
-               //printf("Add the cluster charge\n");
-             }
-           }
-           if((time>-1) && (time<fNbTimeBins)) phtb[time]=qcl;
-           if((fCalDetGain) && (fCalDetGain->GetValue(detector) > 0.0)) sum += ch*fCalDetGain->GetValue(detector)/normalisation;       
-           else sum += ch/normalisation;
-           
-           if(fDebug > 1) {
-             fNbTimeBin->Fill(time);
-             if(tracklet->IsStandAlone()) fNbTimeBinStandalone->Fill(time);
-             else fNbTimeBinOffline->Fill(time);
+       Int_t time = 0;
+       Float_t ch = 0;
+       Float_t qcl = 0;
+       for(int ic=0; ic<AliTRDseedV1::kNtb; ++ic){
+         
+         if(!(fCl = tracklet->GetClusters(ic))) continue;
+         ++nbclusters;
+         time = fCl->GetPadTime();
+         //ch =  tracklet->GetdQdl(ic);
+         ch =  tracklet->GetQperTB(ic);
+         qcl = TMath::Abs(fCl->GetQ());
+         detector = fCl->GetDetector();          
+         // Add the charge if shared cluster
+         if((ic+AliTRDseedV1::kNtb) < AliTRDseedV1::kNclusters) {
+           if((fCl = tracklet->GetClusters(ic+AliTRDseedV1::kNtb))) {
+             qcl += TMath::Abs(fCl->GetQ());
+             //printf("Add the cluster charge\n");
            }
          }
-         sector = AliTRDgeometry::GetSector(detector);
+         if((time>-1) && (time<fNbTimeBins)) phtb[time]=qcl;
+         if((fCalDetGain) && (fCalDetGain->GetValue(detector) > 0.0)) sum += ch*fCalDetGain->GetValue(detector)/normalisation; 
+         else sum += ch/normalisation;
          
          if(fDebug > 1) {
-           fNbTracklets->Fill(detector);
-           if(tracklet->IsStandAlone()) fNbTrackletsStandalone->Fill(detector);
-           else fNbTrackletsOffline->Fill(detector);
-           
-           fNbClusters->Fill(nbclusters);
-           if(tracklet->IsStandAlone())  fNbClustersStandalone->Fill(nbclusters);
-           else  fNbClustersOffline->Fill(nbclusters);
-         }        
+           fNbTimeBin->Fill(time);
+           if(tracklet->IsStandAlone()) fNbTimeBinStandalone->Fill(time);
+           else fNbTimeBinOffline->Fill(time);
+         }
+       }
+       sector = AliTRDgeometry::GetSector(detector);
+       
+       if(fDebug > 1) {
+         fNbTracklets->Fill(detector);
+         if(tracklet->IsStandAlone()) fNbTrackletsStandalone->Fill(detector);
+         else fNbTrackletsOffline->Fill(detector);
          
-         if((nbclusters > fLow) && (nbclusters < fHigh)){
-           if(fRelativeScale > 0.0) sum = sum/fRelativeScale;
-           fCH2dTest->Fill(sum,detector+0.5);         
-           fCH2dSM->Fill(sum,sector+0.5);
-           fCH2dSum->Fill(sum,0.5);
-           Bool_t checknoise = kTRUE;
-           if(fMaxCluster > 0) {
-             if(phtb[0] > fMaxCluster) checknoise = kFALSE;
-             if(fNbTimeBins > fNbMaxCluster) {
-               for(Int_t k = (fNbTimeBins-fNbMaxCluster); k < fNbTimeBins; k++){
-                 if(phtb[k] > fMaxCluster) checknoise = kFALSE;
-               }
+         fNbClusters->Fill(nbclusters);
+         if(tracklet->IsStandAlone())  fNbClustersStandalone->Fill(nbclusters);
+         else  fNbClustersOffline->Fill(nbclusters);
+       }          
+       
+       if((nbclusters > fLow) && (nbclusters < fHigh)){
+         if(fRelativeScale > 0.0) sum = sum/fRelativeScale;
+         fCH2dTest->Fill(sum,detector+0.5);           
+         fCH2dSM->Fill(sum,sector+0.5);
+         fCH2dSum->Fill(sum,0.5);
+         Bool_t checknoise = kTRUE;
+         if(fMaxCluster > 0) {
+           if(phtb[0] > fMaxCluster) checknoise = kFALSE;
+           if(fNbTimeBins > fNbMaxCluster) {
+             for(Int_t k = (fNbTimeBins-fNbMaxCluster); k < fNbTimeBins; k++){
+               if(phtb[k] > fMaxCluster) checknoise = kFALSE;
              }
            }
-           if(checknoise) {           
-             for(int ic=0; ic<fNbTimeBins; ic++){
-               if(fFillZero) {
+         }
+         if(checknoise) {             
+           for(int ic=0; ic<fNbTimeBins; ic++){
+             if(fFillZero) {
+               fPH2dTest->Fill((Double_t)(ic/10.0),detector+0.5,(Double_t)phtb[ic]);
+               fPH2dSum->Fill((Double_t)(ic/10.0),0.5,(Double_t)phtb[ic]);
+               fPH2dSM->Fill((Double_t)(ic/10.0),sector+0.5,(Double_t)phtb[ic]);
+             }
+             else {
+               if(phtb[ic] > 0.0) {
                  fPH2dTest->Fill((Double_t)(ic/10.0),detector+0.5,(Double_t)phtb[ic]);
-                 fPH2dSum->Fill((Double_t)(ic/10.0),0.5,(Double_t)phtb[ic]);
+                 fPH2dSum->Fill((Double_t)(ic/10.0),0.0,(Double_t)phtb[ic]);
                  fPH2dSM->Fill((Double_t)(ic/10.0),sector+0.5,(Double_t)phtb[ic]);
                }
-               else {
-                 if(phtb[ic] > 0.0) {
-                   fPH2dTest->Fill((Double_t)(ic/10.0),detector+0.5,(Double_t)phtb[ic]);
-                   fPH2dSum->Fill((Double_t)(ic/10.0),0.0,(Double_t)phtb[ic]);
-                   fPH2dSM->Fill((Double_t)(ic/10.0),sector+0.5,(Double_t)phtb[ic]);
-                 }
-               }
              }
            }
          }
-         if(detector == 0) FindP1TrackPHtrackletV1Test(tracklet,nbclusters);
-
-       } // loop on tracklets
-
+       }
+       if(detector == 0) FindP1TrackPHtrackletV1Test(tracklet,nbclusters);
        
-      } // debug
+      } // loop on tracklets
+      
       
-    }// while calibration objects
+    } // debug
+    
     if(nTRDtrackV1 > 0) {
       ++nbTrdTracks;      
       if((status&(AliESDtrack::kTRDout)) && (!(status&(AliESDtrack::kTRDin)))) {
@@ -932,201 +1071,6 @@ Bool_t AliTRDCalibTask::Load(TList *lister)
   fListHist = (TList*)lister->Clone(GetName());
   return kTRUE;
 }
-//________________________________________________________________________
-void AliTRDCalibTask::Plot() 
-{
-  //
-  // Plot the histos stored in the TList
-  //
-  if(!fListHist) return;
-
-  /////////////////////////////////////
-  // Take the debug stuff
-  /////////////////////////////////////
-
-  TH1I *nEvents  = (TH1I *) fListHist->FindObject("NEvents");
-
-  TH2F *absoluteGain  = (TH2F *) fListHist->FindObject("AbsoluteGain");
-
-  TH1F *trdTrack = (TH1F *) fListHist->FindObject("TRDTrack");
-  TH1F *trdTrackOffline = (TH1F *) fListHist->FindObject("TRDTrackOffline");
-  TH1F *trdTrackStandalone = (TH1F *) fListHist->FindObject("TRDTrackStandalone");
-
-  TH2F *tpctrdTrack = (TH2F *) fListHist->FindObject("NbTPCTRDtrack");
-
-  TH1F *nbTimeBin = (TH1F *) fListHist->FindObject("NbTimeBin");
-  TH1F *nbTimeBinOffline = (TH1F *) fListHist->FindObject("NbTimeBinOffline");
-  TH1F *nbTimeBinStandalone = (TH1F *) fListHist->FindObject("NbTimeBinStandalone");
-
-  TH1F *nbClusters = (TH1F *) fListHist->FindObject("NbClusters");
-  TH1F *nbClustersOffline = (TH1F *) fListHist->FindObject("NbClustersOffline");
-  TH1F *nbClustersStandalone = (TH1F *) fListHist->FindObject("NbClustersStandalone");
-
-  TH1F *nbTracklets = (TH1F *) fListHist->FindObject("NbTracklets");
-  TH1F *nbTrackletsOffline = (TH1F *) fListHist->FindObject("NbTrackletsOffline");
-  TH1F *nbTrackletsStandalone = (TH1F *) fListHist->FindObject("NbTrackletsStandalone");
-  
-  /////////////////////////////////////
-  // Take the calibration objects
-  /////////////////////////////////////
-
-  TH2I *ch2d = (TH2I *) fListHist->FindObject("CH2d");
-  TProfile2D *ph2d = (TProfile2D *) fListHist->FindObject("PH2d");
-
-  TH2I *ch2dSum = (TH2I *) fListHist->FindObject("CH2dSum");
-  TProfile2D *ph2dSum = (TProfile2D *) fListHist->FindObject("PH2dSum");
-
-  TH2I *ch2dSM = (TH2I *) fListHist->FindObject("CH2dSM");
-  TProfile2D *ph2dSM = (TProfile2D *) fListHist->FindObject("PH2dSM");
-  
-  AliTRDCalibraVdriftLinearFit *linearfit = (AliTRDCalibraVdriftLinearFit *) fListHist->FindObject("AliTRDCalibraVdriftLinearFit");
-  
-  ////////////////////////////////////////////////
-  // Add the AliTRDCalibraVdriftLinearFit
-  ///////////////////////////////////////////////
-  
-  Int_t first = 0;
-  TH2S *histolinearfitsum = 0x0;
-  
-  if(linearfit) {
-    for(Int_t det = 0; det < 540; det++) {
-      if(linearfit->GetLinearFitterHisto(det)){
-       if(TMath::Abs(first)<0.0001){
-         histolinearfitsum = linearfit->GetLinearFitterHisto(det);
-         first += 1;
-       }
-       else {
-          if (histolinearfitsum) {
-           histolinearfitsum->Add(linearfit->GetLinearFitterHisto(det));
-         }
-       }
-      }
-    }
-  }
-
-  ///////////////////////////
-  // Style
-  //////////////////////////
-
-  gStyle->SetPalette(1);
-  gStyle->SetOptStat(1111);
-  gStyle->SetOptFit(1111);
-  gStyle->SetPadBorderMode(0);
-  gStyle->SetCanvasColor(10);
-  gStyle->SetPadLeftMargin(0.13);
-  gStyle->SetPadRightMargin(0.13);
-
-  /////////////////////////
-  // Plot
-  ////////////////////////
-
- if(nEvents) {
-   
-    TCanvas *debugEvents = new TCanvas("cNEvents","cNEvents",10,10,510,510);
-    debugEvents->cd(1);
-    if(nEvents) nEvents->Draw();
-      
-  }
-
- if(absoluteGain) {
-   
-    TCanvas *debugAbsoluteGain = new TCanvas("cAbsoluteGain","cAbsoluteGain",10,10,510,510);
-    debugAbsoluteGain->cd(1);
-    if(absoluteGain) absoluteGain->Draw();
-      
-  }
-
-  if(trdTrack || tpctrdTrack) {
-    
-    TCanvas *debugtrdtpcTrack = new TCanvas("TRDtracktpctrdtrack","TRDtracktpctrdtrack",10,10,510,510);
-    debugtrdtpcTrack->Divide(2,1);
-    debugtrdtpcTrack->cd(1);
-    if(trdTrack) trdTrack->Draw();
-    if(trdTrackOffline) trdTrackOffline->Draw("same");
-    if(trdTrackStandalone) trdTrackStandalone->Draw("same");
-    TLegend *leg = new TLegend(0.4,0.6,0.89,0.89);
-    if(trdTrack) leg->AddEntry(trdTrack,"All","p");
-    if(trdTrackOffline) leg->AddEntry(trdTrackOffline,"Offline","p");
-    if(trdTrackStandalone) leg->AddEntry(trdTrackStandalone,"Standalone","p");
-    leg->Draw("same");
-    debugtrdtpcTrack->cd(2);
-    if(tpctrdTrack) tpctrdTrack->Draw();
-    TLine *line = new TLine(0.0,0.0,100.0,100.0);
-    line->Draw("same");
-    
-  }
-  if(nbTimeBin || nbTracklets || nbClusters) {
-    
-    TCanvas *debugTracklets = new TCanvas("TRDtimebintrackletcluster","TRDtimebintrackletcluster",10,10,510,510);
-    debugTracklets->Divide(3,1);
-    debugTracklets->cd(1);
-    if(nbTimeBin) nbTimeBin->Draw();
-    if(nbTimeBinOffline) nbTimeBinOffline->Draw("same");
-    if(nbTimeBinStandalone) nbTimeBinStandalone->Draw("same");
-    TLegend *lega = new TLegend(0.4,0.6,0.89,0.89);
-    if(nbTimeBin) lega->AddEntry(nbTimeBin,"All","p");
-    if(nbTimeBinOffline) lega->AddEntry(nbTimeBinOffline,"Offline","p");
-    if(nbTimeBinStandalone) lega->AddEntry(nbTimeBinStandalone,"Standalone","p");
-    lega->Draw("same");
-    debugTracklets->cd(2);
-    if(nbTracklets) nbTracklets->Draw();
-    if(nbTrackletsOffline) nbTrackletsOffline->Draw("same");
-    if(nbTrackletsStandalone) nbTrackletsStandalone->Draw("same");
-    TLegend *legb = new TLegend(0.4,0.6,0.89,0.89);
-    if(nbTracklets) legb->AddEntry(nbTracklets,"All","p");
-    if(nbTrackletsOffline) legb->AddEntry(nbTrackletsOffline,"Offline","p");
-    if(nbTrackletsStandalone) legb->AddEntry(nbTrackletsStandalone,"Standalone","p");
-    legb->Draw("same");
-    debugTracklets->cd(3);
-    if(nbClusters) nbClusters->Draw();
-    if(nbClustersOffline) nbClustersOffline->Draw("same");
-    if(nbClustersStandalone) nbClustersStandalone->Draw("same");
-    TLegend *legc = new TLegend(0.4,0.6,0.89,0.89);
-    if(nbClusters) legc->AddEntry(nbClusters,"All","p");
-    if(nbClustersOffline) legc->AddEntry(nbClustersOffline,"Offline","p");
-    if(nbClustersStandalone) legc->AddEntry(nbClustersStandalone,"Standalone","p");
-    legc->Draw("same");
-  
-  }
-
-  if(ch2dSum || ph2dSum || histolinearfitsum) {
-    
-    TCanvas *debugSum = new TCanvas("SumCalibrationObjects","SumCalibrationObjects",10,10,510,510);
-    debugSum->Divide(3,1);
-    debugSum->cd(1);
-    if(ch2dSum) ch2dSum->Draw("lego");
-    debugSum->cd(2);
-    if(ph2dSum) ph2dSum->Draw("lego");
-    debugSum->cd(3);
-    if(histolinearfitsum) histolinearfitsum->Draw();
-  
-  }
-
-  if(ch2dSM || ph2dSM) {
-    
-    TCanvas *debugSM = new TCanvas("SMCalibrationObjects","SMCalibrationObjects",10,10,510,510);
-    debugSM->Divide(2,1);
-    debugSM->cd(1);
-    if(ch2dSM) ch2dSM->Draw("lego");
-    debugSM->cd(2);
-    if(ph2dSM) ph2dSM->Draw("lego");
-     
-  }
-
-  if(ch2d || ph2d) {
-    
-    TCanvas *debug = new TCanvas("CalibrationObjects","CalibrationObjects",10,10,510,510);
-    debug->Divide(2,1);
-    debug->cd(1);
-    if(ch2d) ch2d->Draw("lego");
-    debug->cd(2);
-    if(ph2d) ph2d->Draw("lego");
-     
-  }
-}
 //_______________________________________________________________________________________
 void  AliTRDCalibTask::AddTask(const AliTRDCalibTask * calibTask) {
 
@@ -1137,81 +1081,99 @@ void  AliTRDCalibTask::AddTask(const AliTRDCalibTask * calibTask) {
   TList *listcalibTask = calibTask->GetList();
   if(!listcalibTask) return;
 
-  TH1I *nEvents  = (TH1I *) listcalibTask->FindObject("NEvents");
-  TH1I *nEventsInput  = (TH1I *) listcalibTask->FindObject("NEventsInput");
-  TH2F *absoluteGain  = (TH2F *) listcalibTask->FindObject("AbsoluteGain");
+  THnSparseI *histoEntries = (THnSparseI *) listcalibTask->FindObject("NumberOfEntries");
+
+  TH1I *nEvents  = (TH1I *) listcalibTask->FindObject(Form("NEvents_%s",(const char*)calibTask->GetName()));
+  TH1I *nEventsInput  = (TH1I *) listcalibTask->FindObject(Form("NEventsInput_%s",(const char*)calibTask->GetName()));
+  TH2F *absoluteGain  = (TH2F *) listcalibTask->FindObject(Form("AbsoluteGain_%s",(const char*)calibTask->GetName()));
 
-  TH1F *trdTrack = (TH1F *) listcalibTask->FindObject("TRDTrack");
-  TH1F *trdTrackOffline = (TH1F *) listcalibTask->FindObject("TRDTrackOffline");
-  TH1F *trdTrackStandalone = (TH1F *) listcalibTask->FindObject("TRDTrackStandalone");
+  TH1F *trdTrack = (TH1F *) listcalibTask->FindObject(Form("TRDTrack_%s",(const char*)calibTask->GetName()));
+  TH1F *trdTrackOffline = (TH1F *) listcalibTask->FindObject(Form("TRDTrackOffline_%s",(const char*)calibTask->GetName()));
+  TH1F *trdTrackStandalone = (TH1F *) listcalibTask->FindObject(Form("TRDTrackStandalone_%s",(const char*)calibTask->GetName()));
 
-  TH2F *tpctrdTrack = (TH2F *) listcalibTask->FindObject("NbTPCTRDtrack");
+  TH2F *tpctrdTrack = (TH2F *) listcalibTask->FindObject(Form("NbTPCTRDtrack_%s",(const char*)calibTask->GetName()));
 
-  TH1F *nbTimeBin = (TH1F *) listcalibTask->FindObject("NbTimeBin");
-  TH1F *nbTimeBinOffline = (TH1F *) listcalibTask->FindObject("NbTimeBinOffline");
-  TH1F *nbTimeBinStandalone = (TH1F *) listcalibTask->FindObject("NbTimeBinStandalone");
+  TH1F *nbTimeBin = (TH1F *) listcalibTask->FindObject(Form("NbTimeBin_%s",(const char*)calibTask->GetName()));
+  TH1F *nbTimeBinOffline = (TH1F *) listcalibTask->FindObject(Form("NbTimeBinOffline_%s",(const char*)calibTask->GetName()));
+  TH1F *nbTimeBinStandalone = (TH1F *) listcalibTask->FindObject(Form("NbTimeBinStandalone_%s",(const char*)calibTask->GetName()));
 
-  TH1F *nbClusters = (TH1F *) listcalibTask->FindObject("NbClusters");
-  TH1F *nbClustersOffline = (TH1F *) listcalibTask->FindObject("NbClustersOffline");
-  TH1F *nbClustersStandalone = (TH1F *) listcalibTask->FindObject("NbClustersStandalone");
+  TH1F *nbClusters = (TH1F *) listcalibTask->FindObject(Form("NbClusters_%s",(const char*)calibTask->GetName()));
+  TH1F *nbClustersOffline = (TH1F *) listcalibTask->FindObject(Form("NbClustersOffline_%s",(const char*)calibTask->GetName()));
+  TH1F *nbClustersStandalone = (TH1F *) listcalibTask->FindObject(Form("NbClustersStandalone_%s",(const char*)calibTask->GetName()));
 
-  TH1F *nbTracklets = (TH1F *) listcalibTask->FindObject("NbTracklets");
-  TH1F *nbTrackletsOffline = (TH1F *) listcalibTask->FindObject("NbTrackletsOffline");
-  TH1F *nbTrackletsStandalone = (TH1F *) listcalibTask->FindObject("NbTrackletsStandalone");
+  TH1F *nbTracklets = (TH1F *) listcalibTask->FindObject(Form("NbTracklets_%s",(const char*)calibTask->GetName()));
+  TH1F *nbTrackletsOffline = (TH1F *) listcalibTask->FindObject(Form("NbTrackletsOffline_%s",(const char*)calibTask->GetName()));
+  TH1F *nbTrackletsStandalone = (TH1F *) listcalibTask->FindObject(Form("NbTrackletsStandalone_%s",(const char*)calibTask->GetName()));
   
   TH2I *ch2d = (TH2I *) listcalibTask->FindObject("CH2d");
   TProfile2D *ph2d = (TProfile2D *) listcalibTask->FindObject("PH2d");
   TProfile2D *prf2d = (TProfile2D *) listcalibTask->FindObject("PRF2d");
 
-  TH2I *ch2dSum = (TH2I *) listcalibTask->FindObject("CH2dSum");
-  TProfile2D *ph2dSum = (TProfile2D *) listcalibTask->FindObject("PH2dSum");
+  TH2I *ch2dSum = (TH2I *) listcalibTask->FindObject(Form("CH2dSum_%s",(const char*)calibTask->GetName()));
+  TProfile2D *ph2dSum = (TProfile2D *) listcalibTask->FindObject(Form("PH2dSum_%s",(const char*)calibTask->GetName()));
 
-  TH2I *ch2dSM = (TH2I *) listcalibTask->FindObject("CH2dSM");
-  TProfile2D *ph2dSM = (TProfile2D *) listcalibTask->FindObject("PH2dSM");
+  TH2I *ch2dSM = (TH2I *) listcalibTask->FindObject(Form("CH2dSM_%s",(const char*)calibTask->GetName()));
+  TProfile2D *ph2dSM = (TProfile2D *) listcalibTask->FindObject(Form("PH2dSM_%s",(const char*)calibTask->GetName()));
   
   AliTRDCalibraVdriftLinearFit *linearfit = (AliTRDCalibraVdriftLinearFit *) listcalibTask->FindObject("AliTRDCalibraVdriftLinearFit");  
+  AliTRDCalibraExbAltFit *exbaltfit = (AliTRDCalibraExbAltFit *) listcalibTask->FindObject("AliTRDCalibraExbAltFit");  
   AliTRDCalibraVector *calibraVector = (AliTRDCalibraVector *) listcalibTask->FindObject("AliTRDCalibraVector");  
 
   //
 
-  TH1I *inEventsInput  = (TH1I *) fListHist->FindObject("NEventsInput");
-  TH1I *inEvents  = (TH1I *) fListHist->FindObject("NEvents");
-  TH2F *iabsoluteGain  = (TH2F *) fListHist->FindObject("AbsoluteGain");
+  THnSparseI *inhistoEntries = (THnSparseI *) fListHist->FindObject("NumberOfEntries");
+
+  TH1I *inEventsInput  = (TH1I *) fListHist->FindObject(Form("NEventsInput_%s",(const char*)fName));
+  TH1I *inEvents  = (TH1I *) fListHist->FindObject(Form("NEvents_%s",(const char*)fName));
+  TH2F *iabsoluteGain  = (TH2F *) fListHist->FindObject(Form("AbsoluteGain_%s",(const char*)fName));
 
-  TH1F *itrdTrack = (TH1F *) fListHist->FindObject("TRDTrack");
-  TH1F *itrdTrackOffline = (TH1F *) fListHist->FindObject("TRDTrackOffline");
-  TH1F *itrdTrackStandalone = (TH1F *) fListHist->FindObject("TRDTrackStandalone");
+  TH1F *itrdTrack = (TH1F *) fListHist->FindObject(Form("TRDTrack_%s",(const char*)fName));
+  TH1F *itrdTrackOffline = (TH1F *) fListHist->FindObject(Form("TRDTrackOffline_%s",(const char*)fName));
+  TH1F *itrdTrackStandalone = (TH1F *) fListHist->FindObject(Form("TRDTrackStandalone_%s",(const char*)fName));
 
-  TH2F *itpctrdTrack = (TH2F *) fListHist->FindObject("NbTPCTRDtrack");
+  TH2F *itpctrdTrack = (TH2F *) fListHist->FindObject(Form("NbTPCTRDtrack_%s",(const char*)fName));
 
-  TH1F *inbTimeBin = (TH1F *) fListHist->FindObject("NbTimeBin");
-  TH1F *inbTimeBinOffline = (TH1F *) fListHist->FindObject("NbTimeBinOffline");
-  TH1F *inbTimeBinStandalone = (TH1F *) fListHist->FindObject("NbTimeBinStandalone");
+  TH1F *inbTimeBin = (TH1F *) fListHist->FindObject(Form("NbTimeBin_%s",(const char*)fName));
+  TH1F *inbTimeBinOffline = (TH1F *) fListHist->FindObject(Form("NbTimeBinOffline_%s",(const char*)fName));
+  TH1F *inbTimeBinStandalone = (TH1F *) fListHist->FindObject(Form("NbTimeBinStandalone_%s",(const char*)fName));
 
-  TH1F *inbClusters = (TH1F *) fListHist->FindObject("NbClusters");
-  TH1F *inbClustersOffline = (TH1F *) fListHist->FindObject("NbClustersOffline");
-  TH1F *inbClustersStandalone = (TH1F *) fListHist->FindObject("NbClustersStandalone");
+  TH1F *inbClusters = (TH1F *) fListHist->FindObject(Form("NbClusters_%s",(const char*)fName));
+  TH1F *inbClustersOffline = (TH1F *) fListHist->FindObject(Form("NbClustersOffline_%s",(const char*)fName));
+  TH1F *inbClustersStandalone = (TH1F *) fListHist->FindObject(Form("NbClustersStandalone_%s",(const char*)fName));
 
-  TH1F *inbTracklets = (TH1F *) fListHist->FindObject("NbTracklets");
-  TH1F *inbTrackletsOffline = (TH1F *) fListHist->FindObject("NbTrackletsOffline");
-  TH1F *inbTrackletsStandalone = (TH1F *) fListHist->FindObject("NbTrackletsStandalone");
+  TH1F *inbTracklets = (TH1F *) fListHist->FindObject(Form("NbTracklets_%s",(const char*)fName));
+  TH1F *inbTrackletsOffline = (TH1F *) fListHist->FindObject(Form("NbTrackletsOffline_%s",(const char*)fName));
+  TH1F *inbTrackletsStandalone = (TH1F *) fListHist->FindObject(Form("NbTrackletsStandalone_%s",(const char*)fName));
   
   TH2I *ich2d = (TH2I *) fListHist->FindObject("CH2d");
   TProfile2D *iph2d = (TProfile2D *) fListHist->FindObject("PH2d");
   TProfile2D *iprf2d = (TProfile2D *) fListHist->FindObject("PRF2d");
 
-  TH2I *ich2dSum = (TH2I *) fListHist->FindObject("CH2dSum");
-  TProfile2D *iph2dSum = (TProfile2D *) fListHist->FindObject("PH2dSum");
+  TH2I *ich2dSum = (TH2I *) fListHist->FindObject(Form("CH2dSum_%s",(const char*)fName));
+  TProfile2D *iph2dSum = (TProfile2D *) fListHist->FindObject(Form("PH2dSum_%s",(const char*)fName));
 
-  TH2I *ich2dSM = (TH2I *) fListHist->FindObject("CH2dSM");
-  TProfile2D *iph2dSM = (TProfile2D *) fListHist->FindObject("PH2dSM");
+  TH2I *ich2dSM = (TH2I *) fListHist->FindObject(Form("CH2dSM_%s",(const char*)fName));
+  TProfile2D *iph2dSM = (TProfile2D *) fListHist->FindObject(Form("PH2dSM_%s",(const char*)fName));
   
   AliTRDCalibraVdriftLinearFit *ilinearfit = (AliTRDCalibraVdriftLinearFit *) fListHist->FindObject("AliTRDCalibraVdriftLinearFit");  
+  AliTRDCalibraExbAltFit *iexbaltfit = (AliTRDCalibraExbAltFit *) fListHist->FindObject("AliTRDCalibraExbAltFit");
   AliTRDCalibraVector *icalibraVector = (AliTRDCalibraVector *) fListHist->FindObject("AliTRDCalibraVector");  
 
 
   // Add
 
+  if(histoEntries) {
+    if(inhistoEntries) {
+      inhistoEntries->Add(histoEntries);
+      //printf("Add Events\n");
+    }
+    else {
+      //printf("Create new Events\n");
+      inhistoEntries = (THnSparseI *) histoEntries->Clone();
+      fListHist->Add(inhistoEntries);
+    }
+  }
+
   if(nEventsInput) {
     if(inEventsInput) {
       inEventsInput->Add(nEventsInput);
@@ -1410,7 +1372,15 @@ void  AliTRDCalibTask::AddTask(const AliTRDCalibTask * calibTask) {
       ilinearfit = new AliTRDCalibraVdriftLinearFit(*linearfit);
       fListHist->Add(ilinearfit);
     }
-  }
+  } 
+
+  if(exbaltfit) {
+    if(iexbaltfit) iexbaltfit->Add(exbaltfit);
+    else {
+      iexbaltfit = new AliTRDCalibraExbAltFit(*exbaltfit);
+      fListHist->Add(iexbaltfit);
+    }
+  } 
 
   if(calibraVector) {
     if(icalibraVector) icalibraVector->Add(calibraVector);
@@ -1451,7 +1421,7 @@ Bool_t AliTRDCalibTask::SetVersionSubversion(){
   // Load Chamber Gain factors into the Tender supply
   //
   
-  printf("SetVersionSubversion\n");
+  //printf("SetVersionSubversion\n");
 
   //find previous entry from the UserInfo
   TTree *tree=((TChain*)GetInputData(0))->GetTree();
@@ -1494,6 +1464,13 @@ Bool_t AliTRDCalibTask::SetVersionSubversion(){
       fFirstRunGainLocal = id->GetFirstRun();
       fVersionGainLocalUsed = id->GetVersion();
       fSubVersionGainLocalUsed = id->GetSubVersion();
+    } else if((os->GetString().Contains("TRD/Calib/ChamberExB")) && (!os->GetString().Contains("TRD/Calib/ChamberExBAlt"))){
+      // Get Old drift velocity calibration
+      AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fFirstRunExB = id->GetFirstRun();
+      fVersionExBUsed = id->GetVersion();
+      fSubVersionExBUsed = id->GetSubVersion();
+      //printf("Version %d and subversion %d\n",fVersionExBUsed,fSubVersionExBUsed);
     }
   }
 
@@ -1555,7 +1532,8 @@ Bool_t AliTRDCalibTask::FindP1TrackPHtrackletV1Test(const AliTRDseedV1 *tracklet
   ////////////
   // results of the linear fit
   Double_t dydt                       = 0.0;                                // dydt tracklet after straight line fit
-  Double_t errorpar                   = 0.0;                                // error after straight line fit on dy/dt
+  // Coverity
+  //Double_t errorpar                   = 0.0;                                // error after straight line fit on dy/dt
   Double_t pointError                 = 0.0;                                // error after straight line fit 
   // pad row problemes: avoid tracklet that cross pad rows, tilting angle in the constant
   Int_t    crossrow                   = 0;                                  // if it crosses a pad row
@@ -1629,7 +1607,8 @@ Bool_t AliTRDCalibTask::FindP1TrackPHtrackletV1Test(const AliTRDseedV1 *tracklet
   linearFitterTracklet.Eval();
   linearFitterTracklet.GetParameters(pars);
   pointError  =  TMath::Sqrt(linearFitterTracklet.GetChisquare()/(nbli-2));
-  errorpar    =  linearFitterTracklet.GetParError(1)*pointError;
+  // Coverity
+  //errorpar    =  linearFitterTracklet.GetParError(1)*pointError;
   dydt        = pars[1]; 
   //printf("chis %f, nbli %d, pointError %f, parError %f, errorpar %f\n",linearFitterTracklet->GetChisquare(),nbli,pointError,linearFitterTracklet->GetParError(1),errorpar);
   linearFitterTracklet.ClearPoints();