]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDCalibTask.cxx
bug fix
[u/mrichter/AliRoot.git] / TRD / AliTRDCalibTask.cxx
index dafebb0c33c7a09ff0bfe70e9363fd21aa84e8ed..6a86014fe4c8ff03cef1b274091daafb088e636d 100644 (file)
@@ -68,6 +68,8 @@ using namespace std;
 #include "AliTRDCalibraVdriftLinearFit.h" 
 
 #include "AliTRDcalibDB.h"
+#include "AliCDBId.h"
+#include "AliLog.h"
 
 
 #include "AliTRDCalibTask.h"
@@ -126,6 +128,12 @@ ClassImp(AliTRDCalibTask)
       fNbMaxCluster(2),
       fOfflineTracks(kFALSE),
       fStandaloneTracks(kFALSE),
+      fVersionGainUsed(-1),
+      fSubVersionGainUsed(-1),
+      fVersionGainLocalUsed(-1),
+      fSubVersionGainLocalUsed(-1),
+      fVersionVdriftUsed(-1), 
+      fSubVersionVdriftUsed(-1),
       fCalDetGain(0x0),
       fMaxEvent(0),
       fCounter(0),
@@ -242,7 +250,7 @@ void AliTRDCalibTask::UserCreateOutputObjects()
       fNbTimeBins = 30;
     }
   }
-  
+
   // instance calibration 
   fTRDCalibraFillHisto = AliTRDCalibraFillHisto::Instance();
   fTRDCalibraFillHisto->SetHisto2d(fHisto2d); // choose to use histograms
@@ -285,6 +293,7 @@ void AliTRDCalibTask::UserCreateOutputObjects()
   
   // output list
   fListHist = new TList();
+  fListHist->SetOwner();
   if(fHisto2d) {  
     fListHist->Add(fTRDCalibraFillHisto->GetCH2d());
     fListHist->Add(fTRDCalibraFillHisto->GetPH2d()); 
@@ -409,9 +418,13 @@ void AliTRDCalibTask::UserCreateOutputObjects()
     fListHist->Add(fNbTrackletsStandalone);
     
   }
+
+  delete [] binLimLogPt;
+  delete [] binLimPt;
+
   //cout << "AliTRDCalibTask::UserCreateOutputObjects() OUT" << endl;
-}
 
+}
 
 //________________________________________________________________________
 void AliTRDCalibTask::UserExec(Option_t *) 
@@ -421,6 +434,27 @@ void AliTRDCalibTask::UserExec(Option_t *)
   //
   //cout << "AliTRDCalibTask::Exec() IN" << endl;
   
+  // Init Versions and subversions used
+  if((fVersionGainUsed==-1) || (fSubVersionGainUsed==-1) || (fVersionGainLocalUsed==-1) || (fSubVersionGainLocalUsed==-1) || (fVersionVdriftUsed==-1) || (fSubVersionVdriftUsed==-1)) {
+    if(!SetVersionSubversion()) {
+      fVersionGainUsed=0;
+      fSubVersionGainUsed=0;
+      fVersionGainLocalUsed=0;
+      fSubVersionGainLocalUsed=0;
+      fVersionVdriftUsed=0;
+      fSubVersionVdriftUsed=0;
+    }
+  }
+  if(fCounter==0) {
+    fTRDCalibraFillHisto->SetVersionGainUsed(fVersionGainUsed); // Gain Used
+    fTRDCalibraFillHisto->SetSubVersionGainUsed(fSubVersionGainUsed); // Gain Used
+    fTRDCalibraFillHisto->SetVersionGainLocalUsed(fVersionGainLocalUsed); // Gain Used
+    fTRDCalibraFillHisto->SetSubVersionGainLocalUsed(fSubVersionGainLocalUsed); // Gain Used
+    fTRDCalibraFillHisto->SetVersionVdriftUsed(fVersionVdriftUsed); // Vdrift Used
+    fTRDCalibraFillHisto->SetSubVersionVdriftUsed(fSubVersionVdriftUsed); // Vdrift Used
+    fTRDCalibraFillHisto->InitCalDet();
+  }
+  
   //  AliLog::SetGlobalLogLevel(AliLog::kError);
   //  cout << "AliTRDCalibTask::Exec() 1" << endl;
   fESD = dynamic_cast<AliESDEvent*>(fInputEvent);
@@ -526,6 +560,7 @@ void AliTRDCalibTask::UserExec(Option_t *)
     return;
   }
   
+  
   fESDfriend = dynamic_cast<AliESDfriend*> (fESD->FindListObject("AliESDfriend"));
   if(!fESDfriend){
     AliError("fESDfriend not available");
@@ -612,13 +647,17 @@ void AliTRDCalibTask::UserExec(Option_t *)
     //ULong_t status = fkEsdTrack->GetStatus();
     
     fFriendTrack = fESDfriend->GetTrack(itrk);
-    if(!fFriendTrack)  continue;
+    if(!fFriendTrack)  {
+      //printf("No friend track %d\n",itrk);
+      continue;
+    }
     //////////////////////////////////////
     // Loop on calibration objects
     //////////////////////////////////////
     Int_t icalib=0;
     Int_t nTRDtrackV1=0;
     while((fCalibObject = (TObject *)(fFriendTrack->GetCalibObject(icalib++)))){
+      //printf("Name %s\n",fCalibObject->IsA()->GetName());
       if(strcmp(fCalibObject->IsA()->GetName(), "AliTRDtrackV1") != 0) continue;
       //printf("Find the calibration object\n");
       ++nTRDtrackV1;
@@ -896,7 +935,9 @@ void AliTRDCalibTask::Plot()
          first += 1;
        }
        else {
-         histolinearfitsum ->Add(linearfit->GetLinearFitterHisto(det));
+          if (histolinearfitsum) {
+           histolinearfitsum->Add(linearfit->GetLinearFitterHisto(det));
+         }
        }
       }
     }
@@ -1328,4 +1369,64 @@ Long64_t AliTRDCalibTask::Merge(TCollection *li) {
   return 0;
   
 }
+//_____________________________________________________
+Bool_t AliTRDCalibTask::SetVersionSubversion(){
+  //
+  // Load Chamber Gain factors into the Tender supply
+  //
+  
+  printf("SetVersionSubversion\n");
+
+  //find previous entry from the UserInfo
+  TTree *tree=((TChain*)GetInputData(0))->GetTree();
+  if (!tree) {
+    AliError("Tree not found in ESDhandler");
+    return kFALSE;
+  }
+        
+  TList *userInfo=(TList*)tree->GetUserInfo();
+  if (!userInfo) {
+    AliError("No UserInfo found in tree");
+    return kFALSE;
+  }
+
+  TList *cdbList=(TList*)userInfo->FindObject("cdbList");
+  if (!cdbList) {
+    AliError("No cdbList found in UserInfo");
+    if (AliLog::GetGlobalLogLevel()>=AliLog::kError) userInfo->Print();
+    return kFALSE;
+  }
+       
+  TIter nextCDB(cdbList);
+  TObjString *os=0x0;
+  while ( (os=(TObjString*)nextCDB()) ){
+    if(os->GetString().Contains("TRD/Calib/ChamberGainFactor")){
+      // Get Old gain calibration
+      AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fVersionGainUsed = id->GetVersion();
+      fSubVersionGainUsed = id->GetSubVersion();
+    } else if(os->GetString().Contains("TRD/Calib/ChamberVdrift")){
+      // Get Old drift velocity calibration
+      AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fVersionVdriftUsed = id->GetVersion();
+      fSubVersionVdriftUsed = id->GetSubVersion();
+    } else if(os->GetString().Contains("TRD/Calib/LocalGainFactor")){
+      // Get Old drift velocity calibration
+      AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
+      fVersionGainLocalUsed = id->GetVersion();
+      fSubVersionGainLocalUsed = id->GetSubVersion();
+    }
+  }
+
+  //printf("VersionGain %d, SubversionGain %d, VersionLocalGain %d, Subversionlocalgain %d, Versionvdrift %d, Subversionvdrift %d\n",fVersionGainUsed,fSubVersionGainUsed,fVersionGainLocalUsed,fSubVersionGainLocalUsed,fVersionVdriftUsed,fSubVersionVdriftUsed);
+
+  // Check
+  if((fVersionGainUsed < 0) || (fVersionGainLocalUsed < 0)  || (fSubVersionGainUsed < 0) || (fSubVersionGainLocalUsed < 0) || (fVersionVdriftUsed < 0) || (fSubVersionVdriftUsed < 0)) {
+    AliError("No recent calibration found");
+    return kFALSE;
+  }
+  else return kTRUE;
+
+}
+