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
//
// 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);
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);
}
//
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");
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);
//
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;