]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGPP/CalibMacros/CPass0/makeOCDB.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGPP / CalibMacros / CPass0 / makeOCDB.C
index f06d2958e167e6d08560dff531c0f9940cc141ae..a84823723cdf644688d43e85f2bba1d1bbc56031 100644 (file)
 
 void printCalibStat(Int_t run, const char * fname,  TTreeSRedirector * pcstream);
 
-
-void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDBstorage="raw://")
+void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDBstorage="raw://", Int_t detectorBitsQualityFlag = -1)
 {
-
   //
   // extract OCDB entries for detectors participating in the calibration for the current run
   //
@@ -32,69 +30,131 @@ void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDB
 
   // check the presence of the detectors
   AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
-  AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject()); 
+  AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject());
   if (!grpData) {printf("Failed to get GRP data for run",runNumber); return;}
-  Int_t activeDetectors = grpData->GetDetectorMask(); 
+  Int_t activeDetectors = grpData->GetDetectorMask();
   TString detStr = AliDAQ::ListOfTriggeredDetectors(activeDetectors);
   printf("Detectors in the data:\n%s\n",detStr.Data());
-  printf("Monalisa: Detectors in the data:\t%s\n",detStr.Data());
+  TString LHCperiod = grpData->GetLHCPeriod();
+  Bool_t isLHC10 =  LHCperiod.Contains("LHC10");
+  printf("LHCperiod:%s\n isLHC10:%d\n",LHCperiod.Data(),(Int_t)isLHC10);
 
   // Steering Tasks - set output storage
   // DefaultStorage set already before - in ConfigCalibTrain.C
-  //targetOCDBstorage+="?se=ALICE::CERN::SE";
 
-  // for tests, the target OCDB has to be different from raw://, but since the calibration procedure may need to read the OCDB,
-  // one cannot set the target OCDB as new default storage, since it could it that it does not contain all the necessary entries. 
-  // This is true only if the target OCDB storage is different from the one used as default source and to configure the train
-  if (targetOCDBstorage != sourceOCDBstorage) AliCDBManager::Instance()->SetSpecificStorage("*/*/*", targetOCDBstorage.Data());
+  // Setting the mirror SEs for the default storage
+  TString mirrorsStr("ALICE::CERN::OCDB,ALICE::FZK::SE,ALICE::LLNL::SE");
+  AliCDBManager::Instance()->SetMirrorSEs(mirrorsStr.Data());
+  printf("List of mirror SEs set to: \"%s\"\n",mirrorsStr.Data());
+
+  // activate target OCDB storage
+  AliCDBStorage* targetStorage = 0x0;
+  if (targetOCDBstorage.Length()==0) {
+    targetOCDBstorage+="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+    targetStorage = AliCDBManager::Instance()->GetStorage(targetOCDBstorage.Data());
+  }
+  else if (targetOCDBstorage.CompareTo("same",TString::kIgnoreCase) == 0 ){
+    targetStorage = AliCDBManager::Instance()->GetDefaultStorage();
+  }
+  else {
+    targetStorage = AliCDBManager::Instance()->GetStorage(targetOCDBstorage.Data());
+  }
+  printf("** targetOCDBstorage: \"%s\"\n",targetOCDBstorage.Data());
 
+  // specific storage for TPC/Calib/Correction entry
   if (gSystem->AccessPathName("TPC", kFileExists)==0) {  
     AliCDBManager::Instance()->SetSpecificStorage("TPC/Calib/Correction","local://");
   }
-  // set OCDB storage
-  if (targetOCDBstorage.Length()==0) targetOCDBstorage+="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+
+  // Magnetic field
+  AliMagF* fld = TGeoGlobalMagField::Instance()->GetField();
+  Double_t bz = fld->SolenoidField();
+  Bool_t isMagFieldON = kTRUE;
+  if (TMath::Abs(bz)>0) {
+    printf("Mag field is %f --> ON\n", bz);
+  }
+  else {
+    isMagFieldON = kFALSE;
+    printf("Mag field is %f --> OFF\n", bz);
+  }
+
+  // Quality flags
+  Bool_t TPC_qf = kTRUE;
+  Bool_t TOF_qf = kTRUE;
+  Bool_t TRD_qf = kTRUE;
+  Bool_t T0_qf  = kTRUE;
+  Bool_t SDD_qf = kTRUE;
+  Bool_t SPD_qf = kTRUE;
+
+  if (detectorBitsQualityFlag != -1){
+    TPC_qf = ((detectorBitsQualityFlag & AliDAQ::kTPC_QF) == AliDAQ::kTPC_QF)? kTRUE : kFALSE;
+    TOF_qf = ((detectorBitsQualityFlag & AliDAQ::kTOF_QF) == AliDAQ::kTOF_QF)? kTRUE : kFALSE;
+    TRD_qf = ((detectorBitsQualityFlag & AliDAQ::kTRD_QF) == AliDAQ::kTRD_QF)? kTRUE : kFALSE;
+    T0_qf  = ((detectorBitsQualityFlag & AliDAQ::kT0_QF)  == AliDAQ::kT0_QF)?  kTRUE : kFALSE;
+    SDD_qf = ((detectorBitsQualityFlag & AliDAQ::kSDD_QF) == AliDAQ::kSDD_QF)? kTRUE : kFALSE;
+    SPD_qf = ((detectorBitsQualityFlag & AliDAQ::kSPD_QF) == AliDAQ::kSPD_QF)? kTRUE : kFALSE;
+  }    
+
+  Printf("Quality flags: detectorBitsQualityFlag = %d, TPC = %d, TOF = %d, TRD = %d, T0 = %d, SDD = %d, SPD = %d", detectorBitsQualityFlag, (Int_t)TPC_qf, (Int_t)TOF_qf, (Int_t)TRD_qf, (Int_t)T0_qf, (Int_t)SDD_qf, (Int_t)SPD_qf);
 
   // TPC part
   AliTPCPreprocessorOffline *procesTPC = 0;
-  if  (detStr.Contains("TPC")){ 
+  if (detStr.Contains("TPC") && TPC_qf){
     Printf("\n******* Calibrating TPC *******");
-    procesTPC = new AliTPCPreprocessorOffline; 
+    procesTPC = new AliTPCPreprocessorOffline;
     // switch on parameter validation
     procesTPC->SetTimeGainRange(0.5,5.0);
     procesTPC->SetMaxVDriftCorr(0.2); 
+    //procesTPC->SetMinTracksVdrift(100000);
     procesTPC->SwitchOnValidation();
 
     // Make timegain calibration
     //proces.CalibTimeGain("CalibObjects.root", runNumber,AliCDBRunRange::Infinity(),targetOCDBstorage);
-    procesTPC->CalibTimeGain("CalibObjects.root", runNumber,runNumber,targetOCDBstorage);
+    if (isMagFieldON) procesTPC->CalibTimeGain("CalibObjects.root", runNumber,runNumber,targetStorage);
     
     // Make vdrift calibration
     //proces.CalibTimeVdrift("CalibObjects.root",runNumber,AliCDBRunRange::Infinity(),targetOCDBstorage);
-    procesTPC->CalibTimeVdrift("CalibObjects.root",runNumber,runNumber,targetOCDBstorage);
+    procesTPC->CalibTimeVdrift("CalibObjects.root",runNumber,runNumber,targetStorage);
+  }
+  else {
+    Printf("\n******* NOT Calibrating TPC: detStr = %s, TPC_qf = %d *******", detStr.Data(), (Int_t)TPC_qf);
   }
 
   // TOF part
   AliTOFAnalysisTaskCalibPass0 *procesTOF=0;
-  if ( detStr.Contains("TOF") && detStr.Contains("TPC")){    
+  if (detStr.Contains("TOF") && detStr.Contains("TPC") && TOF_qf){
     procesTOF = new AliTOFAnalysisTaskCalibPass0;
     Printf("\n******* Calibrating TOF *******");
-    procesTOF->ProcessOutput("CalibObjects.root", targetOCDBstorage);
+    if (isMagFieldON) procesTOF->ProcessOutput("CalibObjects.root", targetStorage);
+    else {
+      printf("Not calibrating TOF in case of mag field OFF\n");
+    }
+  }
+  else {
+    Printf("\n******* NOT Calibrating TOF: detStr = %s, TOF_qf = %d *******", detStr.Data(), (Int_t)TOF_qf);
   }
 
   // T0 part
   AliT0PreprocessorOffline *procesT0= 0;
-  if ( detStr.Contains("T0")) {
+  if (detStr.Contains("T0") && T0_qf) {
     Printf("\n******* Calibrating T0 *******");
     // Make  calibration of channels offset
-    procesT0= new  AliT0PreprocessorOffline;
-    procesT0->Process("CalibObjects.root",runNumber, runNumber, targetOCDBstorage);
+    procesT0 = new AliT0PreprocessorOffline;
+    if(isLHC10)
+      procesT0->CalibOffsetChannels("CalibObjects.root",runNumber, runNumber, targetStorage);
+    else 
+      procesT0->Process("CalibObjects.root",runNumber, runNumber, targetStorage);
+  }
+  else {
+    Printf("\n******* NOT Calibrating T0: detStr = %s, T0_qf = %d *******", detStr.Data(), (Int_t)T0_qf);
   }
 
   //TRD part
   AliTRDPreprocessorOffline *procesTRD = 0;
-  if ( detStr.Contains("TRD") && detStr.Contains("TPC")){
+  if (detStr.Contains("TRD") && detStr.Contains("TPC") && TRD_qf){
     Printf("\n******* Calibrating TRD *******");
     procesTRD = new  AliTRDPreprocessorOffline;
+    if(isLHC10) procesTRD->SetSwitchOnChamberStatus(kFALSE);
     procesTRD->SetLinearFitForVdrift(kTRUE);
     procesTRD->SetMinStatsVdriftT0PH(600*10);
     procesTRD->SetMinStatsVdriftLinear(50);
@@ -112,15 +172,24 @@ void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDB
     printf("version and subversion vdrift %d and %d\n",versionVdriftUsed,subversionVdriftUsed);
     printf("version and subversion gain %d and %d\n",versionGainUsed,subversionGainUsed);
     printf("version and subversion exb %d and %d\n",versionExBUsed,subversionExBUsed);
-    procesTRD->Process("CalibObjects.root",runNumber,runNumber,targetOCDBstorage);
+    procesTRD->Process("CalibObjects.root",runNumber,runNumber,targetStorage);
+  }
+  else {
+    Printf("\n******* NOT Calibrating TRD: detStr = %s, TRD_qf = %d *******", detStr.Data(), (Int_t)TRD_qf);
   }
   
+  TF1 *gsf = (TF1 *)gROOT->GetFunction("gaus");
+  if (gsf) for (int i=gsf->GetNpar();i--;) gsf->SetParError(i,0); // reset errors from previous fits
+  
   //Mean Vertex
   AliMeanVertexPreprocessorOffline * procesMeanVtx=0;
-  if ( detStr.Contains("ITSSPD")) {
+  if (detStr.Contains("ITSSPD") && SPD_qf) {
     Printf("\n******* Calibrating MeanVertex *******");
-    procesMeanVtx =  new AliMeanVertexPreprocessorOffline;
-    procesMeanVtx->ProcessOutput("CalibObjects.root", targetOCDBstorage, runNumber);
+    procesMeanVtx = new AliMeanVertexPreprocessorOffline;
+    procesMeanVtx->ProcessOutput("CalibObjects.root", targetStorage, runNumber);
+  }
+  else {
+    Printf("\n******* NOT Calibrating MeanVertex: detStr = %s, SPD_qf = %d *******", detStr.Data(), (Int_t)SPD_qf);
   }
 
   //
@@ -129,7 +198,8 @@ void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDB
   Int_t trdStatus = (procesTRD) ?  procesTRD->GetStatus():0;
   Int_t tofStatus = (procesTOF) ?  procesTOF->GetStatus():0;
   Int_t t0Status  = (procesT0)  ?  procesT0->GetStatus():0;
-  Int_t tpcStatus = (procesTPC) ? ((procesTPC->ValidateTimeDrift() || procesTPC->ValidateTimeGain())==kFALSE):0;
+  Int_t tpcStatus = (procesTPC) ?  procesTPC->GetStatus():0;
+  Int_t meanVtxStatus = (procesMeanVtx) ? procesMeanVtx->GetStatus():0;
   //
   printf("\n");
   printf("******* CPass0 calibration status *******\n");
@@ -137,6 +207,7 @@ void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDB
   printf("TOF calibration status=%d\n",tofStatus);
   printf("TPC calibration status=%d\n",tpcStatus);
   printf("T0  calibration status=%d\n",t0Status);
+  printf("MeanVertex  calibration status=%d\n",meanVtxStatus);
   //
   TTreeSRedirector *pcstream = new TTreeSRedirector("cpassStat.root","recreate");
   printCalibStat(runNumber, "CalibObjects.root",pcstream);
@@ -238,13 +309,19 @@ void printCalibStat(Int_t run, const char * fname,  TTreeSRedirector * pcstream)
   //
   Int_t tpcEvents=0;
   Int_t tpcTracks=0;
-  TList * TPCCalib = (TList*)fin->Get("TPCCalib");      
-  if (TPCCalib) {
-    AliTPCcalibTime  * calibTime = (AliTPCcalibTime  *)TPCCalib->FindObject("calibTime");
-    if (calibTime){
+  TObject* obj = dynamic_cast<TObject*>(fin->Get("TPCCalib"));
+  TObjArray* array = dynamic_cast<TObjArray*>(obj);
+  TDirectory* dir = dynamic_cast<TDirectory*>(obj);
+  AliTPCcalibTime  * calibTime = NULL;
+  if (dir) {
+    calibTime = dynamic_cast<AliTPCcalibTime*>(dir->Get("calibTime"));
+  }
+  else if (array){
+    calibTime = (AliTPCcalibTime *)array->FindObject("calibTime");
+  }
+  if (calibTime) {
       tpcEvents = TMath::Nint(calibTime->GetTPCVertexHisto(0)->GetEntries());
       tpcTracks = TMath::Nint(calibTime->GetResHistoTPCITS(0)->GetEntries());
-    }
   }
   printf("Monalisa TPCevents\t%d\n",tpcEvents);
   if (pcstream) (*pcstream)<<"calibStatAll"<<"TPCevents="<<tpcEvents;