#include "AliTRDCommonParam.h"
#include "AliCDBManager.h"
#include "AliCDBEntry.h"
-
+#include "AliTRDdEdxBaseUtils.h"
+#include "AliTRDdEdxCalibHistArray.h"
+#include "AliTRDdEdxCalibUtils.h"
ClassImp(AliTRDPreprocessorOffline)
fSubVersionExBUsed(0),
fNoExBUsedInReco(kFALSE),
fSwitchOnValidation(kTRUE),
+ fSwitchOnChamberStatus(kTRUE),
fVdriftValidated(kFALSE),
fExBValidated(kFALSE),
fT0Validated(kFALSE),
fMinStatsGain(800),
fMinStatsPRF(600),
fMinStatsChamberStatus(20),
+ fMinSingleStatsChamberStatus(0.05),
fBackCorrectGain(kFALSE),
fBackCorrectVdrift(kTRUE),
fNotEnoughStatisticsForTheGain(kFALSE),
fNotEnoughStatisticsForTheVdriftLinear(kFALSE),
fStatusNeg(0),
fStatusPos(0),
- fBadCalibValidate(20),
- fNoDataValidate(20),
+ fBadCalibValidate(40),
+ fNoDataValidate(40),
fRMSBadCalibratedGain(20.0),
fRMSBadCalibratedVdrift(20.0),
- fRMSBadCalibratedExB(50.0)
+ fRMSBadCalibratedExB(20.0),
+ fMinTimeOffsetValidate(-1.6),
+ fRobustFitDriftVelocity(kTRUE),
+ fRobustFitExbAlt(kFALSE),
+ fAlternativeVdrfitFit(kFALSE),
+ fAlternativeExbAltFit(kFALSE),
+ fMinNbOfPointVdriftFit(11),
+ fMethodeGain(0),
+ fOutliersFitChargeLow(0.03),
+ fOutliersFitChargeHigh(0.7),
+ fBeginFitCharge(3.5),
+ fT0Shift0(0.124797),
+ fT0Shift1(0.267451),
+ fPHQon(kTRUE),
+ fDebugPHQon(kFALSE)
{
//
// default constructor
if(fPH2d) delete fPH2d;
if(fPRF2d) delete fPRF2d;
if(fSparse) delete fSparse;
+
+ if(IsPHQon()){
+ AliTRDdEdxCalibUtils::DeleteHistArray();
+ AliTRDdEdxCalibUtils::DeleteObjArray();
+ }
+
if(fAliTRDCalibraVdriftLinearFit) delete fAliTRDCalibraVdriftLinearFit;
if(fAliTRDCalibraExbAltFit) delete fAliTRDCalibraExbAltFit;
if(fNEvents) delete fNEvents;
}
//___________________________________________________________________________________
-void AliTRDPreprocessorOffline::Process(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage)
+void AliTRDPreprocessorOffline::Process(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage)
{
//
// Process to the gain, vdrift, timeoffset, exb and chamber status calibration
CalibVdriftT0(file,startRunNumber,endRunNumber,ocdbStorage);
CalibGain(file,startRunNumber,endRunNumber,ocdbStorage);
- CalibChamberStatus(file,startRunNumber,endRunNumber,ocdbStorage);
-
+ if(fSwitchOnChamberStatus) CalibChamberStatus(file,startRunNumber,endRunNumber,ocdbStorage);
+ CalibExbAlt(file,startRunNumber,endRunNumber,ocdbStorage);
+
}
-
+
+ if(IsPHQon()){
+ printf("\n AliTRDPreprocessorOffline PHQ on!!\n\n");
+ AliTRDdEdxBaseUtils::PrintControl();
+ CalibPHQ(file, startRunNumber, endRunNumber, ocdbStorage);
+ }
+ else{
+ printf("\n AliTRDPreprocessorOffline PHQ off!!\n\n");
+ }
+
PrintStatus();
}
//___________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CalibVdriftT0(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage){
+void AliTRDPreprocessorOffline::CalibVdriftT0(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage){
//
// make calibration of the drift velocity
// Input parameters:
// file - the location of input file
// startRunNumber, endRunNumber - run validity period
- // ocdbStorage - path to the OCDB storage
+ // ocdbStorage - OCDB storage
// - if empty - local storage 'pwd' uesed
- if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ if (ocdbStorage==0x0) {
+ TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ ocdbStorage=AliCDBManager::Instance()->GetStorage(localStorage.Data());
+ }
//
// 1. Initialization
//
}
//___________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CalibExbAlt(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage){
+void AliTRDPreprocessorOffline::CalibExbAlt(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage){
//
// make calibration of the drift velocity
// Input parameters:
// file - the location of input file
// startRunNumber, endRunNumber - run validity period
- // ocdbStorage - path to the OCDB storage
+ // ocdbStorage - OCDB storage
// - if empty - local storage 'pwd' uesed
- if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ if (ocdbStorage==0x0) {
+ TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ ocdbStorage=AliCDBManager::Instance()->GetStorage(localStorage.Data());
+ }
//
// 1. Initialization
//
//_________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CalibGain(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage){
+void AliTRDPreprocessorOffline::CalibGain(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage){
//
// make calibration of the drift velocity
// Input parameters:
// file - the location of input file
// startRunNumber, endRunNumber - run validity period
- // ocdbStorage - path to the OCDB storage
+ // ocdbStorage - OCDB storage
// - if empty - local storage 'pwd' uesed
- if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ if (ocdbStorage==0x0) {
+ TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ ocdbStorage=AliCDBManager::Instance()->GetStorage(localStorage.Data());
+ }
//
fNotEnoughStatisticsForTheGain = kFALSE;
//
}
//________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CalibPRF(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage){
+void AliTRDPreprocessorOffline::CalibPRF(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage){
//
// make calibration of the drift velocity
// Input parameters:
// file - the location of input file
// startRunNumber, endRunNumber - run validity period
- // ocdbStorage - path to the OCDB storage
+ // ocdbStorage - OCDB storage
// - if empty - local storage 'pwd' uesed
- if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ if (ocdbStorage==0x0) {
+ TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ ocdbStorage=AliCDBManager::Instance()->GetStorage(localStorage.Data());
+ }
//
// 1. Initialization
if(!ReadPRFGlobal(file)) return;
}
//________________________________________________________________________________________________________________
+void AliTRDPreprocessorOffline::CalibPHQ(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage)
+{
+ //
+ // make calibration of puls height Q
+ // Input parameters:
+ // startRunNumber, endRunNumber - run validity period
+ // ocdbStorage - OCDB storage
+ // - if empty - local storage 'pwd' uesed
+ //
+
+ if (ocdbStorage==0x0) {
+ TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ ocdbStorage=AliCDBManager::Instance()->GetStorage(localStorage.Data());
+ }
+ //printf("test %s\n", ocdbStorage.Data());
+
+ if(!ReadPHQGlobal(file)) return;
+
+ if(!AnalyzePHQ(startRunNumber)) return;
-void AliTRDPreprocessorOffline::CalibChamberStatus(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage){
+ UpdateOCDBPHQ(startRunNumber,endRunNumber,ocdbStorage);
+}
+
+//________________________________________________________________________________________________________________
+
+void AliTRDPreprocessorOffline::CalibChamberStatus(const Char_t* file, Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* ocdbStorage){
//
// make calibration of the chamber status
// Input parameters:
// startRunNumber, endRunNumber - run validity period
- // ocdbStorage - path to the OCDB storage
+ // ocdbStorage - OCDB storage
// - if empty - local storage 'pwd' uesed
- if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ if (ocdbStorage==0x0) {
+ TString localStorage = "local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ ocdbStorage=AliCDBManager::Instance()->GetStorage(localStorage.Data());
+ }
//
//
// 1. Initialization
//
// 4. validate OCDB entries
//
- if(fSwitchOnValidation==kTRUE && ValidateChamberStatus()==kFALSE) {
- //AliError("TRD Chamber status OCDB parameters not ok!");
- return;
+ //printf("Enough stats for vdrift? %d\n",(Int_t)fNotEnoughStatisticsForTheVdriftLinear);
+ //printf("Enough stats for gain? %d\n",(Int_t)fNotEnoughStatisticsForTheGain);
+ if((!fNotEnoughStatisticsForTheVdriftLinear) && (!fNotEnoughStatisticsForTheGain)) {
+ if(fSwitchOnValidation==kTRUE && ValidateChamberStatus()==kFALSE) {
+ //AliError("TRD Chamber status OCDB parameters not ok!");
+ return;
+ }
+ //
+ // 5. update of OCDB
+ //
+ //
+ UpdateOCDBChamberStatus(startRunNumber,endRunNumber,ocdbStorage);
}
- //
- // 5. update of OCDB
- //
- //
- if((!fNotEnoughStatisticsForTheVdriftLinear) && (!fNotEnoughStatisticsForTheGain)) UpdateOCDBChamberStatus(startRunNumber,endRunNumber,ocdbStorage);
- //UpdateOCDBChamberStatus(startRunNumber,endRunNumber,ocdbStorage);
}
//______________________________________________________________________________________________________
if(fVersionVdriftUsed == 0) fStatusPos = fStatusPos |kVdriftErrorOld;
if(fVersionGainUsed == 0) fStatusPos = fStatusPos | kGainErrorOld;
-
+
return kTRUE;
}
//
if(fSparse) return kTRUE;
TFile fcalib(fileName);
- TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
+ TList * array = (TList*)fcalib.Get(fNameList);
if (array){
fSparse = (THnSparseI *) array->FindObject("NumberOfEntries");
if(!fSparse) return kFALSE;
}
//___________________________________________________________________________________________________________________
+Bool_t AliTRDPreprocessorOffline::ReadPHQGlobal(const Char_t* fileName)
+{
+ //
+ // read calibration entries from file
+ //
+
+ return AliTRDdEdxCalibUtils::ReadHistArray(fileName, fNameList);
+}
+
+//___________________________________________________________________________________________________________________
+
Bool_t AliTRDPreprocessorOffline::ReadGainGlobal(const Char_t* fileName){
//
// read calibration entries from file
//
if(fCH2d) return kTRUE;
TFile fcalib(fileName);
- TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
+ TList * array = (TList*)fcalib.Get(fNameList);
if (array){
TH2I *ch2d = (TH2I *) array->FindObject("CH2d");
- if(!ch2d) return kFALSE;
+ if(!ch2d) {
+ delete array;
+ return kFALSE;
+ }
fCH2d = (TH2I*)ch2d->Clone();
+ delete array;
//fNEvents = (TH1I *) array->FindObject("NEvents");
//fAbsoluteGain = (TH2F *) array->FindObject("AbsoluteGain");
}else{
//
if(fPH2d) return kTRUE;
TFile fcalib(fileName);
- TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
+ TList * array = (TList*)fcalib.Get(fNameList);
if (array){
TProfile2D *ph2d = (TProfile2D *) array->FindObject("PH2d");
- if(!ph2d) return kFALSE;
+ if(!ph2d) {
+ delete array;
+ return kFALSE;
+ }
fPH2d = (TProfile2D*)ph2d->Clone();
//fNEvents = (TH1I *) array->FindObject("NEvents");
+ delete array;
}else{
TProfile2D *ph2d = (TProfile2D *) fcalib.Get("PH2d");
if(!ph2d) return kFALSE;
//
if(fAliTRDCalibraVdriftLinearFit) return kTRUE;
TFile fcalib(fileName);
- TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
+ TList * array = (TList*)fcalib.Get(fNameList);
if (array){
- fAliTRDCalibraVdriftLinearFit = (AliTRDCalibraVdriftLinearFit *) array->FindObject("AliTRDCalibraVdriftLinearFit");
+ AliTRDCalibraVdriftLinearFit * dummy = (AliTRDCalibraVdriftLinearFit *) array->FindObject("AliTRDCalibraVdriftLinearFit");
+ fAliTRDCalibraVdriftLinearFit = dummy ? (AliTRDCalibraVdriftLinearFit *) dummy->Clone() : 0x0;
//fNEvents = (TH1I *) array->FindObject("NEvents");
+ delete array;
}else{
fAliTRDCalibraVdriftLinearFit = (AliTRDCalibraVdriftLinearFit *) fcalib.Get("AliTRDCalibraVdriftLinearFit");
//fNEvents = (TH1I *) fcalib.Get("NEvents");
//
if(fAliTRDCalibraExbAltFit) return kTRUE;
TFile fcalib(fileName);
- TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
+ TList * array = (TList*)fcalib.Get(fNameList);
if (array){
- fAliTRDCalibraExbAltFit = (AliTRDCalibraExbAltFit *) array->FindObject("AliTRDCalibraExbAltFit");
+ AliTRDCalibraExbAltFit * dummy = (AliTRDCalibraExbAltFit *) array->FindObject("AliTRDCalibraExbAltFit");
+ fAliTRDCalibraExbAltFit = dummy ? (AliTRDCalibraExbAltFit *)dummy->Clone() : 0x0;
//fNEvents = (TH1I *) array->FindObject("NEvents");
+ delete array;
}else{
fAliTRDCalibraExbAltFit = (AliTRDCalibraExbAltFit *) fcalib.Get("AliTRDCalibraExbAltFit");
//fNEvents = (TH1I *) fcalib.Get("NEvents");
//
if(fPRF2d) return kTRUE;
TFile fcalib(fileName);
- TObjArray * array = (TObjArray*)fcalib.Get(fNameList);
+ TList * array = (TList*)fcalib.Get(fNameList);
if (array){
TProfile2D *prf2d = (TProfile2D *) array->FindObject("PRF2d");
- if(!prf2d) return kFALSE;
+ if(!prf2d) {
+ delete array;
+ return kFALSE;
+ }
fPRF2d = (TProfile2D*)prf2d->Clone();
+ delete array;
//fNEvents = (TH1I *) array->FindObject("NEvents");
}else{
TProfile2D *prf2d = (TProfile2D *) fcalib.Get("PRF2d");
//
AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
+ calibra->ChooseMethod(fMethodeGain);
+ calibra->SetBeginFitCharge(fBeginFitCharge);
+ calibra->SetFitOutliersChargeLow(fOutliersFitChargeLow);
+ calibra->SetFitOutliersChargeHigh(fOutliersFitChargeHigh);
calibra->SetMinEntries(fMinStatsGain); // If there is less than 1000 entries in the histo: no fit
calibra->AnalyseCH(fCH2d);
//
AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
+ calibra->SetT0Shift0(fT0Shift0);
+ calibra->SetT0Shift1(fT0Shift1);
calibra->SetMinEntries(fMinStatsVdriftT0PH); // If there is less than 1000 entries in the histo: no fit
- calibra->AnalysePH(fPH2d);
+ calibra->AnalysePH(fPH2d);
+ //calibra->SetDebugLevel(2);
Int_t nbtg = 6*4*18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb0(1))
+ 6* 18*((Int_t) ((AliTRDCalibraMode *)calibra->GetCalibraMode())->GetDetChamb2(1));
Bool_t ok = kFALSE;
if ((nbtg > 0) &&
(nbfit >= 0.5*nbE) && (nbE > 30) && (nbfitSuccess > 30)) {
+ //printf("nbtg %d, nbfit %d, nbE %d, nbfitSucess %d\n",nbtg,nbfit,nbE,nbfitSuccess);
//printf("Pass the cut for VdriftT0\n");
// create the cal objects
calibra->RemoveOutliers(1,kFALSE);
AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
calibra->SetCalDetVdriftExB(fCalDetVdriftUsed,fCalDetExBUsed);
calibra->SetMinEntries(fMinStatsVdriftLinear); // If there is less than 1000 entries in the histo: no fit
+ //printf("The mean stat is by %d for VdriftLinear\n",fMinStatsVdriftLinear);
+ //fAliTRDCalibraVdriftLinearFit->SetSeeDetector(0);
+ //fAliTRDCalibraVdriftLinearFit->SetDebugLevel(1);
//printf("Fill PE Array\n");
- fAliTRDCalibraVdriftLinearFit->FillPEArray();
+ fAliTRDCalibraVdriftLinearFit->SetRobustFit(fRobustFitDriftVelocity);
+ fAliTRDCalibraVdriftLinearFit->SetMinNumberOfPointsForFit(fMinNbOfPointVdriftFit);
+ if(!fAlternativeVdrfitFit)
+ fAliTRDCalibraVdriftLinearFit->FillPEArray();
+ else
+ fAliTRDCalibraVdriftLinearFit->FillPEArray2();
//printf("AliTRDCalibraFit\n");
calibra->AnalyseLinearFitters(fAliTRDCalibraVdriftLinearFit);
//printf("After\n");
if((oldmeanvdrift > 0.0) && (oldmeanexb < 70.0)) {
//printf("Correction factor %f\n",vdriftoverall);
calDetVdrift->Multiply(vdriftoverall/oldmeanvdrift);
- calDetLorentz->Multiply(exboverall/oldmeanexb);
+ if(TMath::Abs(oldmeanexb) > 0.0001) calDetLorentz->Multiply(exboverall/oldmeanexb);
//printf("newmean %f\n",calDetVdrift->CalcMean(kFALSE));
TH1F *coefDriftLinear = calDetVdrift->MakeHisto1DAsFunctionOfDet();
TH1F *coefLorentzAngle = calDetLorentz->MakeHisto1DAsFunctionOfDet();
AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
calibra->SetMinEntries(fMinStatsVdriftLinear); // If there is less than 1000 entries in the histo: no fit
//printf("Fill PE Array\n");
- fAliTRDCalibraExbAltFit->FillPEArray();
+ fAliTRDCalibraExbAltFit->SetRobustFit(fRobustFitExbAlt);
+ if(!fAlternativeExbAltFit)
+ fAliTRDCalibraExbAltFit->FillPEArray();
+ else
+ fAliTRDCalibraExbAltFit->FillPEArray2();
//printf("AliTRDCalibraFit\n");
calibra->AnalyseExbAltFit(fAliTRDCalibraExbAltFit);
//printf("After\n");
}
+//_____________________________________________________________________________
+Bool_t AliTRDPreprocessorOffline::AnalyzePHQ(Int_t startRunNumber)
+{
+ //
+ //Produce PHQ calibration results
+ //
+ TList *lout = 0x0;
+ TTreeSRedirector *calibStream = 0x0;
+ if(IsDebugPHQon()){
+ lout = new TList;
+ lout->SetOwner();
+
+ calibStream = new TTreeSRedirector(Form("TRDCalibStream_%010d.root", startRunNumber));
+ }
+
+ for(Int_t iter=0; iter<AliTRDdEdxCalibUtils::GetHistArray()->GetSize(); iter++){
+ THnBase *hi = (THnBase*) AliTRDdEdxCalibUtils::GetHistAt(iter);
+ TObjArray *obji = AliTRDdEdxCalibUtils::HistToObj(hi, startRunNumber, lout, calibStream);
+ //printf("test analyze %s\n", obji->GetName());
+ AliTRDdEdxCalibUtils::GetObjArray()->AddAt(obji, iter);
+ }
+
+ fCalibObjects->AddAt(AliTRDdEdxCalibUtils::GetObjArray(), kPHQ);
+
+ if(lout){
+ TFile *fout=new TFile(Form("TRDCalibList_%010d.root", startRunNumber),"recreate");
+ fout->cd();
+ lout->Write();
+ fout->Save();
+ fout->Close();
+ delete fout;
+ }
+ delete calibStream;
+ delete lout;
+
+ return kTRUE;
+}
+
//_____________________________________________________________________________
Bool_t AliTRDPreprocessorOffline::AnalyzeChamberStatus()
{
//
// set up AliTRDCalibChamberStatus
- AliTRDCalibChamberStatus *ChamberStatus = new AliTRDCalibChamberStatus();
- ChamberStatus->SetSparseI(fSparse);
- ChamberStatus->AnalyseHisto(fMinStatsChamberStatus);
+ AliTRDCalibChamberStatus *chamberStatus = new AliTRDCalibChamberStatus();
+ chamberStatus->SetSparseI(fSparse);
+ chamberStatus->AnalyseHisto(fMinStatsChamberStatus, fMinSingleStatsChamberStatus);
// get AliTRDCalChamberStatus
- AliTRDCalChamberStatus *CalChamberStatus = ChamberStatus->GetCalChamberStatus();
+ AliTRDCalChamberStatus *calChamberStatus = chamberStatus->GetCalChamberStatus();
// get calibration objects
AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
AliTRDCalDet *calDetExB = (AliTRDCalDet *) fCalibObjects->At(kLorentzLinear);
// Check
- if((!calDetGain) || (!calDetVDrift) || (!fCH2d) || (!calDetExB) || (!CalChamberStatus)) return kFALSE;
+ if((!calDetGain) || (!calDetVDrift) || (!fCH2d) || (!calDetExB) || (!calChamberStatus)) return kFALSE;
// Gain
Double_t gainmean = calDetGain->GetMean();
// Check
if((TMath::Abs(gainrms) < 0.001) || (TMath::Abs(vdriftrms) < 0.001) || (TMath::Abs(exbrms) < 0.0000001)) return kFALSE;
+ // Take mean each SM
+ Double_t *gainmeanSM = new Double_t[18];
+ Double_t *vdriftmeanSM = new Double_t[18];
+ Double_t *exbmeanSM = new Double_t[18];
+ //Double_t *t0meanSM = new Double_t[18];
+ for(Int_t sm=0; sm< 18; sm++) {
+ gainmeanSM[sm] = calDetGain->GetMeanSM(kFALSE,sm);
+ vdriftmeanSM[sm] = calDetVDrift->GetMeanSM(kFALSE,sm);
+ exbmeanSM[sm] = calDetExB->GetMeanSM(kFALSE,sm);
+ //t0meanSM[sm] = calDetGain->GetMeanSM(kFALSE);
+ }
+
+
// mask chambers with empty gain entries
//Int_t counter = 0;
for (Int_t idet = 0; idet < 540; idet++) {
Double_t entries = projch->GetEntries();
//printf("Number of entries %f for det %d\n",entries,idet);
+ // sm number
+ Int_t smnumber = (Int_t) idet/30;
+
// gain
Double_t gain = calDetGain->GetValue(idet);
Double_t exb = calDetExB->GetValue(idet);
- if( (entries<50 && !CalChamberStatus->IsNoData(idet)) ||
+ if( (entries<50 && !calChamberStatus->IsNoData(idet)) ||
TMath::Abs(gainmean-gain) > (fRMSBadCalibratedGain*gainrms) ||
TMath::Abs(vdriftmean-vdrift) > (fRMSBadCalibratedVdrift*vdriftrms) ||
TMath::Abs(exbmean-exb) > (fRMSBadCalibratedExB*exbrms) ) {
//printf(" vdriftmean %f and vdrift %f, vdriftrms %f \n",vdriftmean,vdrift,vdriftrms);
//printf(" exbmean %f and exb %f, exbrms %f \n",exbmean,exb,exbrms);
- CalChamberStatus->SetStatus(idet,AliTRDCalChamberStatus::kBadCalibrated);
+ calChamberStatus->SetStatus(idet,AliTRDCalChamberStatus::kBadCalibrated);
//counter++;
}
+ if(TMath::Abs(gainmeanSM[smnumber]-gain) < 0.000001 ||
+ TMath::Abs(vdriftmeanSM[smnumber]-vdrift) < 0.000001 ||
+ TMath::Abs(exbmeanSM[smnumber]-exb) < 0.000001) {
+
+ //printf(" chamber det %03d notcalibrated sm %d \n",idet,smnumber);
+ //printf(" gainmeanSM %f and gain %f\n",gainmeanSM[smnumber],gain);
+ //printf(" vdriftmeanSM %f and vdrift %f \n",vdriftmeanSM[smnumber],vdrift);
+ //printf(" exbmeanSM %f and exb %f \n",exbmeanSM[smnumber],exb);
+
+ calChamberStatus->SetStatus(idet,AliTRDCalChamberStatus::kNotCalibrated);
+ }
+
+
delete projch;
}
Int_t smbadcalib = 0;
for(Int_t det = 0; det < 30; det++){
Int_t detector = sm*30+det;
- if(CalChamberStatus->IsNoData(detector)) smnodata++;
+ if(calChamberStatus->IsNoData(detector)) smnodata++;
else {
- if(CalChamberStatus->IsBadCalibrated(detector)) smbadcalib++;
+ if(calChamberStatus->IsBadCalibrated(detector)) smbadcalib++;
}
}
fNoData[sm] = smnodata;
fBadCalib[sm]= smbadcalib;
//printf("No Data %d, bad calibrated %d for %d\n",fNoData[sm],fBadCalib[sm],sm);
}
+
+ // delete
+ delete []gainmeanSM;
+ delete []vdriftmeanSM;
+ delete []exbmeanSM;
// Security
// for(Int_t sm=0; sm < 18; sm++) {
// Int_t counter = 0;
// for(Int_t det = 0; det < 30; det++){
// Int_t detector = sm*30+det;
- // if(CalChamberStatus->IsBadCalibrated(detector)) counter++;
+ // if(calChamberStatus->IsBadCalibrated(detector)) counter++;
// }
// if(counter >= 20) {
// for(Int_t det = 0; det < 30; det++){
// Int_t detector = sm*30+det;
- // CalChamberStatus->SetStatus(detector,AliTRDCalChamberStatus::kGood);
+ // calChamberStatus->SetStatus(detector,AliTRDCalChamberStatus::kGood);
// }
// }
// }
- fCalibObjects->AddAt(CalChamberStatus,kChamberStatus);
+ fCalibObjects->AddAt(calChamberStatus,kChamberStatus);
return kTRUE;
}
}
//_________________________________________________________________________________________________________________
- void AliTRDPreprocessorOffline::UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ void AliTRDPreprocessorOffline::UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage *storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalDet");
metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
AliCDBId id1("TRD/Calib/ChamberGainFactor", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kGain);
- if(calDet) gStorage->Put(calDet, id1, metaData);
+ if(calDet) storage->Put(calDet, id1, metaData);
}
//___________________________________________________________________________________________________________________
- void AliTRDPreprocessorOffline::UpdateOCDBExB(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ void AliTRDPreprocessorOffline::UpdateOCDBExB(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage *storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalDet");
metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
AliCDBId id1("TRD/Calib/ChamberExB", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(detExB);
- if(calDet) gStorage->Put(calDet, id1, metaData);
+ if(calDet) storage->Put(calDet, id1, metaData);
//if(!calDet) printf("No caldet\n");
}
//___________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::UpdateOCDBExBAlt(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+void AliTRDPreprocessorOffline::UpdateOCDBExBAlt(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage *storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalDet");
- metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->SetResponsible("Theo Rascanu");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
AliCDBId id1("TRD/Calib/ChamberExBAlt", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(detExB);
- if(calDet) gStorage->Put(calDet, id1, metaData);
+ if(calDet) storage->Put(calDet, id1, metaData);
//if(!calDet) printf("No caldet\n");
}
//___________________________________________________________________________________________________________________
- void AliTRDPreprocessorOffline::UpdateOCDBVdrift(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ void AliTRDPreprocessorOffline::UpdateOCDBVdrift(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalDet");
metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
AliCDBId id1("TRD/Calib/ChamberVdrift", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
- if(calDet) gStorage->Put(calDet, id1, metaData);
+ if(calDet) storage->Put(calDet, id1, metaData);
//
AliCDBMetaData *metaDataPad= new AliCDBMetaData();
metaDataPad->SetObjectClassName("AliTRDCalPad");
metaDataPad->SetResponsible("Raphaelle Bailhache");
+ metaDataPad->AddDateToComment();
metaDataPad->SetBeamPeriod(1);
AliCDBId id1Pad("TRD/Calib/LocalVdrift", startRunNumber, endRunNumber);
AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kVdriftPHPad);
- if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
+ if(calPad) storage->Put(calPad, id1Pad, metaDataPad);
}
}
//________________________________________________________________________________________________________________________
- void AliTRDPreprocessorOffline::UpdateOCDBT0(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ void AliTRDPreprocessorOffline::UpdateOCDBT0(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalDet");
metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
AliCDBId id1("TRD/Calib/ChamberT0", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kT0PHDet);
- if(calDet) gStorage->Put(calDet, id1, metaData);
+ if(calDet) storage->Put(calDet, id1, metaData);
//
AliCDBMetaData *metaDataPad= new AliCDBMetaData();
metaDataPad->SetObjectClassName("AliTRDCalPad");
metaDataPad->SetResponsible("Raphaelle Bailhache");
+ metaDataPad->AddDateToComment();
metaDataPad->SetBeamPeriod(1);
AliCDBId id1Pad("TRD/Calib/LocalT0", startRunNumber, endRunNumber);
AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kT0PHPad);
- if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
+ if(calPad) storage->Put(calPad, id1Pad, metaDataPad);
}
//_________________________________________________________________________________________________________________
- void AliTRDPreprocessorOffline::UpdateOCDBPRF(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ void AliTRDPreprocessorOffline::UpdateOCDBPRF(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalPad");
metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
+
AliCDBId id1("TRD/Calib/PRFWidth", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kPRF);
- if(calPad) gStorage->Put(calPad, id1, metaData);
+ if(calPad) storage->Put(calPad, id1, metaData);
}
+//_________________________________________________________________________________________________________________
+void AliTRDPreprocessorOffline::UpdateOCDBPHQ(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* storage)
+{
+ //
+ // Update OCDB entry
+ //
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("TObjArray");
+ metaData->SetResponsible("Raphaelle Bailhache and Xianguo Lu");
+ metaData->AddDateToComment();
+ metaData->SetBeamPeriod(1);
+
+ AliCDBId id1("TRD/Calib/PHQ", startRunNumber, endRunNumber);
+ TObjArray *cobj = (TObjArray *) fCalibObjects->At(kPHQ);
+ if(cobj){
+ //cobj->Print();
+ storage->Put(cobj, id1, metaData);
+ }
+}
+
//_________________________________________________________________________________________________________________
- void AliTRDPreprocessorOffline::UpdateOCDBChamberStatus(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ void AliTRDPreprocessorOffline::UpdateOCDBChamberStatus(Int_t startRunNumber, Int_t endRunNumber, AliCDBStorage* storage){
//
// Update OCDB entry
//
AliCDBMetaData *metaData= new AliCDBMetaData();
metaData->SetObjectClassName("AliTRDCalChamberStatus");
- metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->SetResponsible("Raphaelle Bailhache and Julian Book");
+ metaData->AddDateToComment();
metaData->SetBeamPeriod(1);
AliCDBId id1("TRD/Calib/ChamberStatus", startRunNumber, endRunNumber);
- AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(storagePath);
AliTRDCalChamberStatus *calChamberStatus = (AliTRDCalChamberStatus *) fCalibObjects->At(kChamberStatus);
- if(calChamberStatus) gStorage->Put(calChamberStatus, id1, metaData);
+ if(calChamberStatus) storage->Put(calChamberStatus, id1, metaData);
}
Double_t rmsdet = calDet->GetRMSRobust();
Double_t meanpad = calPad->GetMean();
//Double_t rmspad = calPad->GetRMS();
- //printf("T0::minimum %f, rmsdet %f,meanpad %f, rmspad %f\n",meandet,rmsdet,meanpad,rmspad);
- if((meandet > -1.5) && (meandet < 5.0) && (rmsdet < 4.0) && (meanpad < 5.0) && (meanpad > -0.5)) return kTRUE;
+ printf("T0::meandet %f, rmsdet %f,meanpad %f\n",meandet,rmsdet,meanpad);
+ if((meandet > fMinTimeOffsetValidate) && (meandet < 5.0) && (rmsdet < 4.0) && (meanpad < 5.0) && (meanpad > -0.5)) return kTRUE;
else {
fStatusPos = fStatusPos | kTimeOffsetErrorRange;
return kFALSE;