ClassImp(AliTRDPreprocessorOffline)
-AliTRDPreprocessorOffline::AliTRDPreprocessorOffline():
+ AliTRDPreprocessorOffline::AliTRDPreprocessorOffline():
TNamed("TPCPreprocessorOffline","TPCPreprocessorOffline"),
fMethodSecond(kTRUE),
fNameList("TRDCalib"),
fAliTRDCalibraVdriftLinearFit(0x0),
fNEvents(0x0),
fAbsoluteGain(0x0),
- fPlots(new TObjArray(8)),
- fCalibObjects(new TObjArray(8)),
+ fPlots(new TObjArray(9)),
+ fCalibObjects(new TObjArray(9)),
fVersionGainUsed(0),
fSubVersionGainUsed(0),
+ fFirstRunVdriftUsed(0),
fVersionVdriftUsed(0),
fSubVersionVdriftUsed(0),
fSwitchOnValidation(kTRUE),
fMinStatsVdriftT0PH(800*20),
fMinStatsVdriftLinear(800),
fMinStatsGain(800),
- fMinStatsPRF(600)
+ fMinStatsPRF(600),
+ fBackCorrectGain(kFALSE),
+ fBackCorrectVdrift(kTRUE),
+ fNotEnoughStatisticsForTheGain(kFALSE),
+ fNotEnoughStatisticsForTheVdriftLinear(kFALSE),
+ fStatus(0)
{
//
// default constructor
//
fVdriftValidated = kTRUE;
fT0Validated = kTRUE;
+ fNotEnoughStatisticsForTheVdriftLinear = kFALSE;
//
// 2. extraction of the information
//
- if(ReadVdriftT0Global(file)) AnalyzeVdriftT0();
if(ReadVdriftLinearFitGlobal(file)) AnalyzeVdriftLinearFit();
+ if(ReadVdriftT0Global(file)) AnalyzeVdriftT0();
//
// 3. Append QA plots
//
//
if(fVdriftValidated) UpdateOCDBVdrift(startRunNumber,endRunNumber,ocdbStorage);
if(fT0Validated) UpdateOCDBT0(startRunNumber,endRunNumber,ocdbStorage);
+ UpdateOCDBExB(startRunNumber,endRunNumber,ocdbStorage);
}
//_________________________________________________________________________________________________________________
// - if empty - local storage 'pwd' uesed
if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
//
+ fNotEnoughStatisticsForTheGain = kFALSE;
+ //
// 1. Initialization
if(!ReadGainGlobal(file)) return;
//
// 2. extraction of the information
//
AnalyzeGain();
- if(fCalDetGainUsed) CorrectFromDetGainUsed();
- if(fCalDetVdriftUsed) CorrectFromDetVdriftUsed();
+ if(fBackCorrectGain) CorrectFromDetGainUsed();
+ if(fBackCorrectVdrift) CorrectFromDetVdriftUsed();
//
// 3. Append QA plots
//
//
UpdateOCDBPRF(startRunNumber,endRunNumber,ocdbStorage);
+}
+//________________________________________________________________________________________________________________
+
+void AliTRDPreprocessorOffline::CalibChamberStatus(Int_t startRunNumber, Int_t endRunNumber, TString ocdbStorage){
+ //
+ // make calibration of the chamber status
+ // Input parameters:
+ // startRunNumber, endRunNumber - run validity period
+ // ocdbStorage - path to the OCDB storage
+ // - if empty - local storage 'pwd' uesed
+ if (ocdbStorage.Length()<=0) ocdbStorage="local://"+gSystem->GetFromPipe("pwd")+"/OCDB";
+ //
+ //
+ // 2. extraction of the information
+ //
+ if(!AnalyzeChamberStatus()) return;
+ //
+ // 3. Append QA plots
+ //
+ //MakeDefaultPlots(fVdriftArray,fVdriftArray);
+ //
+ //
+ //
+ // 4. validate OCDB entries
+ //
+ if(fSwitchOnValidation==kTRUE && ValidateChamberStatus()==kFALSE) {
+ AliError("TRD Chamber status OCDB parameters not ok!");
+ return;
+ }
+ //
+ // 5. update of OCDB
+ //
+ //
+ if((!fNotEnoughStatisticsForTheGain) && (!fNotEnoughStatisticsForTheGain)) UpdateOCDBChamberStatus(startRunNumber,endRunNumber,ocdbStorage);
+
}
//______________________________________________________________________________________________________
Bool_t AliTRDPreprocessorOffline::Init(const Char_t* fileName){
if(ReadVdriftT0Global(fileName)) {
TString nameph = fPH2d->GetTitle();
+ fFirstRunVdriftUsed = GetFirstRun(nameph);
fVersionVdriftUsed = GetVersion(nameph);
fSubVersionVdriftUsed = GetSubVersion(nameph);
}
+ if((fVersionVdriftUsed == 0) && (fVersionGainUsed == 0)) fStatus = -1;
+
return kTRUE;
}
if ((nbtg > 0) &&
(nbfit >= 0.5*nbE) && (nbE > 30)) {
// create the cal objects
- if(!fCalDetGainUsed) {
+ if(!fBackCorrectGain) {
calibra->PutMeanValueOtherVectorFit(1,kTRUE);
meanother = kTRUE;
}
//
ok = kTRUE;
}
+ else {
+ fNotEnoughStatisticsForTheGain = kTRUE;
+ Double_t gainoverallnotnormalized = calibra->AnalyseCHAllTogether(fCH2d);
+ if(fCalDetGainUsed && (gainoverallnotnormalized > 0.0)) {
+ AliTRDCalDet *calDetGain = new AliTRDCalDet(*fCalDetGainUsed);
+ Double_t oldmean = fCalDetGainUsed->CalcMean(kFALSE);
+ //printf("oldmean %f\n",oldmean);
+ if(oldmean > 0.0) {
+ Double_t scalefactor = calibra->GetScaleFactorGain();
+ //printf("Correction factor %f\n",gainoverallnotnormalized*scalefactor);
+ calDetGain->Multiply(gainoverallnotnormalized*scalefactor/oldmean);
+ //printf("newmean %f\n",calDetGain->CalcMean(kFALSE));
+ TH1F *coefGain = calDetGain->MakeHisto1DAsFunctionOfDet();
+ fCalibObjects->AddAt(calDetGain,kGain);
+ fPlots->AddAt(coefGain,kGain);
+ //
+ ok = kTRUE;
+ fStatus += 1000000;
+ }
+ else {
+ fStatus += 1000;
+ }
+ }
+ else {
+ fStatus += 1000;
+ }
+ }
calibra->ResetVectorFit();
//
ok = kTRUE;
}
+ else {
+ fStatus += 100;
+ }
calibra->ResetVectorFit();
return ok;
// Analyze vdrift linear fit - produce the calibration objects
//
+ //printf("Analyse linear fit\n");
+
+
AliTRDCalibraFit *calibra = AliTRDCalibraFit::Instance();
calibra->SetMinEntries(fMinStatsVdriftLinear); // If there is less than 1000 entries in the histo: no fit
+ //printf("Fill PE Array\n");
fAliTRDCalibraVdriftLinearFit->FillPEArray();
+ //printf("AliTRDCalibraFit\n");
calibra->AnalyseLinearFitters(fAliTRDCalibraVdriftLinearFit);
+ //printf("After\n");
//Int_t nbtg = 540;
Int_t nbfit = calibra->GetNumberFit();
object = calibra->GetVectorFit2();
AliTRDCalDet *calDetLorentz = calibra->CreateDetObjectLorentzAngle(&object);
TH1F *coefLorentzAngle = calDetLorentz->MakeHisto1DAsFunctionOfDet();
+ //if(!calDetLorentz) printf("No lorentz created\n");
// Put them in the array
fCalibObjects->AddAt(calDetVdrift,kVdriftLinear);
fCalibObjects->AddAt(calDetLorentz,kLorentzLinear);
//
ok = kTRUE;
}
+ else {
+ fNotEnoughStatisticsForTheVdriftLinear = kTRUE;
+ Double_t vdriftoverall = calibra->AnalyseLinearFittersAllTogether(fAliTRDCalibraVdriftLinearFit);
+ if(fCalDetVdriftUsed && (vdriftoverall > 0.0)) {
+ AliTRDCalDet *calDetVdrift = new AliTRDCalDet(*fCalDetVdriftUsed);
+ Double_t oldmean = fCalDetVdriftUsed->CalcMean(kFALSE);
+ //printf("oldmean %f\n",oldmean);
+ if(oldmean > 0.0) {
+ //printf("Correction factor %f\n",vdriftoverall);
+ calDetVdrift->Multiply(vdriftoverall/oldmean);
+ //printf("newmean %f\n",calDetVdrift->CalcMean(kFALSE));
+ TH1F *coefDriftLinear = calDetVdrift->MakeHisto1DAsFunctionOfDet();
+ // Put them in the array
+ fCalibObjects->AddAt(calDetVdrift,kVdriftLinear);
+ fPlots->AddAt(coefDriftLinear,kVdriftLinear);
+ //
+ ok = kTRUE;
+ fStatus += 10000;
+ }
+ else fStatus += 1;
+ }
+ else fStatus += 1;
+ }
calibra->ResetVectorFit();
return ok;
}
-//________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CorrectFromDetGainUsed() {
+
+//_____________________________________________________________________________
+Bool_t AliTRDPreprocessorOffline::AnalyzeChamberStatus()
+{
//
- // Correct from the gas gain used afterwards
+ // Produce AliTRDCalChamberStatus out of calibration results
//
- AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
- if(!calDetGain) return;
-
- // Calculate mean
- Double_t mean = 0.0;
- Int_t nbdet = 0;
- for(Int_t det = 0; det < 540; det++) {
-
- Float_t gaininit = fCalDetGainUsed->GetValue(det);
- Float_t gainout = calDetGain->GetValue(det);
+ // set up AliTRDCalChamberStatus
+ AliTRDCalChamberStatus *CalChamberStatus = new AliTRDCalChamberStatus();
+ for(Int_t det = 0; det < 540; det++) CalChamberStatus->SetStatus(det,1);
-
- if(TMath::Abs(gainout-1.0) > 0.000001) {
- mean += (gaininit*gainout);
- nbdet++;
- }
- }
- if(nbdet > 0) mean = mean/nbdet;
-
- for(Int_t det = 0; det < 540; det++) {
-
- Float_t gaininit = fCalDetGainUsed->GetValue(det);
- Float_t gainout = calDetGain->GetValue(det);
-
- if(TMath::Abs(gainout-1.0) > 0.000001) calDetGain->SetValue(det,gaininit*gainout);
- else calDetGain->SetValue(det,mean);
- }
+ // get calibration objects
+ AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ AliTRDCalDet *calDetVDrift = (AliTRDCalDet *) fCalibObjects->At(kVdriftLinear);
+ // Check
+ if((!calDetGain) || (!calDetVDrift) || (!fCH2d)) return kFALSE;
-}
-//________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CorrectFromDetVdriftUsed() {
- //
- // Correct from the drift velocity
- //
+ // Gain
+ Double_t gainmean = calDetGain->GetMean();
+ Double_t vdriftmean = calDetVDrift->GetMean();
- //printf("Correct for vdrift\n");
+ Double_t gainrms = calDetGain->GetRMSRobust();
+ Double_t vdriftrms = calDetVDrift->GetRMSRobust();
- AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
- if(!calDetGain) return;
+ //printf("Gain mean: %f, rms: %f\n",gainmean,gainrms);
+ //printf("Vdrift mean: %f, rms: %f\n",vdriftmean,vdriftrms);
+
+ // Check
+ if((TMath::Abs(gainrms) < 0.001) || (TMath::Abs(vdriftrms) < 0.001)) return kFALSE;
- Int_t detVdrift = kVdriftPHDet;
- if(fMethodSecond) detVdrift = kVdriftLinear;
- AliTRDCalDet *calDetVdrift = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
- if(!calDetVdrift) return;
+ // mask chambers with empty gain entries
+ //Int_t counter = 0;
+ for (Int_t idet = 0; idet < 540; idet++) {
- // Calculate mean
-
- for(Int_t det = 0; det < 540; det++) {
-
- Float_t vdriftinit = fCalDetVdriftUsed->GetValue(det);
- Float_t vdriftout = calDetVdrift->GetValue(det);
+ // ch2d
+ TH1I *projch = (TH1I *) fCH2d->ProjectionX("projch",idet+1,idet+1,(Option_t *)"e");
+ Double_t entries = projch->GetEntries();
- Float_t gain = calDetGain->GetValue(det);
- if(vdriftout > 0.0) gain = gain*vdriftinit/vdriftout;
- calDetGain->SetValue(det,gain);
+ // gain
+ Double_t gain = calDetGain->GetValue(idet);
-
- }
-
-}
-//_________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
- //
- // Update OCDB entry
- //
-
- AliCDBMetaData *metaData= new AliCDBMetaData();
- metaData->SetObjectClassName("AliTRDCalDet");
- metaData->SetResponsible("Raphaelle Bailhache");
- 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);
-
+ // vdrift
+ Double_t vdrift = calDetVDrift->GetValue(idet);
-}
-//___________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::UpdateOCDBVdrift(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
- //
- // Update OCDB entry
- //
- Int_t detVdrift = kVdriftPHDet;
-
- if(fMethodSecond) detVdrift = kVdriftLinear;
-
- AliCDBMetaData *metaData= new AliCDBMetaData();
- metaData->SetObjectClassName("AliTRDCalDet");
- metaData->SetResponsible("Raphaelle Bailhache");
- 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(entries<=0.5 ||
+ TMath::Abs(gainmean-gain) > (15.0*gainrms) ||
+ TMath::Abs(vdriftmean-vdrift) > (15.0*vdriftrms)) {
+
+ //printf(" chamber det %03d masked \n",idet);
+ //printf(" gainmean %f and gain %f, gainrms %f \n",gainmean,gain,gainrms);
+ //printf(" vdriftmean %f and vdrift %f, vdriftrms %f \n",vdriftmean,vdrift,vdriftrms);
+ CalChamberStatus->SetStatus(idet,AliTRDCalChamberStatus::kMasked);
+ //counter++;
+ }
- if(!fMethodSecond) {
-
- AliCDBMetaData *metaDataPad= new AliCDBMetaData();
- metaDataPad->SetObjectClassName("AliTRDCalPad");
- metaDataPad->SetResponsible("Raphaelle Bailhache");
- metaDataPad->SetBeamPeriod(1);
+ /*
+ // installed supermodules+1 -> abort
+ if(counter > (7+1)*30) {
+ printf("ERROR: more than one SM to be masked!! \n Abort...\n");
+ if(projch) delete projch;
+ return 0x0;
+ }
+ */
+
+ delete projch;
- AliCDBId id1Pad("TRD/Calib/LocalVdrift", startRunNumber, endRunNumber);
- AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kVdriftPHPad);
- if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
+ }
+
+ // 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->IsMasked(detector)) counter++;
+ }
+ if(counter >= 10) {
+ for(Int_t det = 0; det < 30; det++){
+ Int_t detector = sm*30+det;
+ CalChamberStatus->SetStatus(detector,AliTRDCalChamberStatus::kInstalled);
+ }
+ }
+ }
+
+ fCalibObjects->AddAt(CalChamberStatus,kChamberStatus);
+ return kTRUE;
+
+ }
+
+
+ //________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::CorrectFromDetGainUsed() {
+ //
+ // Correct from the gas gain used afterwards
+ //
+ AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ if(!calDetGain) return;
+
+ // Calculate mean
+ Double_t mean = 0.0;
+ Int_t nbdet = 0;
+
+ for(Int_t det = 0; det < 540; det++) {
+
+ Float_t gaininit = fCalDetGainUsed->GetValue(det);
+ Float_t gainout = calDetGain->GetValue(det);
+
+
+ if(TMath::Abs(gainout-1.0) > 0.000001) {
+ mean += (gaininit*gainout);
+ nbdet++;
+ }
+ }
+ if(nbdet > 0) mean = mean/nbdet;
+
+ for(Int_t det = 0; det < 540; det++) {
+
+ Float_t gaininit = fCalDetGainUsed->GetValue(det);
+ Float_t gainout = calDetGain->GetValue(det);
+
+ if(TMath::Abs(gainout-1.0) > 0.000001) {
+ Double_t newgain = gaininit*gainout;
+ if(newgain < 0.1) newgain = 0.1;
+ if(newgain > 1.9) newgain = 1.9;
+ calDetGain->SetValue(det,newgain);
+ }
+ else {
+ Double_t newgain = mean;
+ if(newgain < 0.1) newgain = 0.1;
+ if(newgain > 1.9) newgain = 1.9;
+ calDetGain->SetValue(det,newgain);
+ }
+ }
+
+
+ }
+ //________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::CorrectFromDetVdriftUsed() {
+ //
+ // Correct from the drift velocity
+ //
+
+ //printf("Correct for vdrift\n");
+
+ AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ if(!calDetGain) return;
+
+ Int_t detVdrift = kVdriftPHDet;
+ if(fMethodSecond) detVdrift = kVdriftLinear;
+ AliTRDCalDet *calDetVdrift = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
+ if(!calDetVdrift) return;
+
+ // Calculate mean
+ if(!fNotEnoughStatisticsForTheGain) {
+ for(Int_t det = 0; det < 540; det++) {
+
+ Float_t vdriftinit = fCalDetVdriftUsed->GetValue(det);
+ Float_t vdriftout = calDetVdrift->GetValue(det);
+
+ Float_t gain = calDetGain->GetValue(det);
+ if(vdriftout > 0.0) gain = gain*vdriftinit/vdriftout;
+ if(gain < 0.1) gain = 0.1;
+ if(gain > 1.9) gain = 1.9;
+ calDetGain->SetValue(det,gain);
+ }
+ }
+ else {
- }
+ Float_t vdriftinit = fCalDetVdriftUsed->CalcMean(kFALSE);
+ Float_t vdriftout = calDetVdrift->CalcMean(kFALSE);
+ Float_t factorcorrectif = 1.0;
+ if(vdriftout > 0.0) factorcorrectif = vdriftinit/vdriftout;
+ for(Int_t det = 0; det < 540; det++) {
+ Float_t gain = calDetGain->GetValue(det);
+ gain = gain*factorcorrectif;
+ if(gain < 0.1) gain = 0.1;
+ if(gain > 1.9) gain = 1.9;
+ calDetGain->SetValue(det,gain);
+ }
+
+ }
+
+ }
+//_________________________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::UpdateOCDBGain(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ //
+ // Update OCDB entry
+ //
-}
-//________________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::UpdateOCDBT0(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
- //
- // Update OCDB entry
- //
-
- AliCDBMetaData *metaData= new AliCDBMetaData();
- metaData->SetObjectClassName("AliTRDCalDet");
- metaData->SetResponsible("Raphaelle Bailhache");
- 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);
-
- //
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("AliTRDCalDet");
+ metaData->SetResponsible("Raphaelle Bailhache");
+ metaData->SetBeamPeriod(1);
- AliCDBMetaData *metaDataPad= new AliCDBMetaData();
- metaDataPad->SetObjectClassName("AliTRDCalPad");
- metaDataPad->SetResponsible("Raphaelle Bailhache");
- metaDataPad->SetBeamPeriod(1);
-
- AliCDBId id1Pad("TRD/Calib/LocalT0", startRunNumber, endRunNumber);
- AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kT0PHPad);
- if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
-
+ 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);
-}
-//_________________________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::UpdateOCDBPRF(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
- //
- // Update OCDB entry
- //
-
- AliCDBMetaData *metaData= new AliCDBMetaData();
- metaData->SetObjectClassName("AliTRDCalPad");
- metaData->SetResponsible("Raphaelle Bailhache");
- 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);
-
+ }
+ //___________________________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::UpdateOCDBExB(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ //
+ // Update OCDB entry
+ //
+
+ Int_t detExB = kLorentzLinear;
+ if(!fMethodSecond) return;
-}
-//__________________________________________________________________________________________________________________________
-Bool_t AliTRDPreprocessorOffline::ValidateGain() const {
- //
- // Validate OCDB entry
- //
+ //printf("Pass\n");
+
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("AliTRDCalDet");
+ metaData->SetResponsible("Raphaelle Bailhache");
+ 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) printf("No caldet\n");
+
+ }
+ //___________________________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::UpdateOCDBVdrift(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ //
+ // Update OCDB entry
+ //
+
+ Int_t detVdrift = kVdriftPHDet;
+
+ if(fMethodSecond) detVdrift = kVdriftLinear;
+
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("AliTRDCalDet");
+ metaData->SetResponsible("Raphaelle Bailhache");
+ 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(!fMethodSecond) {
+
+ AliCDBMetaData *metaDataPad= new AliCDBMetaData();
+ metaDataPad->SetObjectClassName("AliTRDCalPad");
+ metaDataPad->SetResponsible("Raphaelle Bailhache");
+ metaDataPad->SetBeamPeriod(1);
+
+ AliCDBId id1Pad("TRD/Calib/LocalVdrift", startRunNumber, endRunNumber);
+ AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kVdriftPHPad);
+ if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
+
+ }
+
+ }
+ //________________________________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::UpdateOCDBT0(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ //
+ // Update OCDB entry
+ //
+
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("AliTRDCalDet");
+ metaData->SetResponsible("Raphaelle Bailhache");
+ 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);
+
+ //
+
+ AliCDBMetaData *metaDataPad= new AliCDBMetaData();
+ metaDataPad->SetObjectClassName("AliTRDCalPad");
+ metaDataPad->SetResponsible("Raphaelle Bailhache");
+ metaDataPad->SetBeamPeriod(1);
+
+ AliCDBId id1Pad("TRD/Calib/LocalT0", startRunNumber, endRunNumber);
+ AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kT0PHPad);
+ if(calPad) gStorage->Put(calPad, id1Pad, metaDataPad);
+
+
+
+ }
+ //_________________________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::UpdateOCDBPRF(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ //
+ // Update OCDB entry
+ //
+
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("AliTRDCalPad");
+ metaData->SetResponsible("Raphaelle Bailhache");
+ 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);
+
+
+ }
+ //_________________________________________________________________________________________________________________
+ void AliTRDPreprocessorOffline::UpdateOCDBChamberStatus(Int_t startRunNumber, Int_t endRunNumber, const Char_t *storagePath){
+ //
+ // Update OCDB entry
+ //
+
+ AliCDBMetaData *metaData= new AliCDBMetaData();
+ metaData->SetObjectClassName("AliTRDCalChamberStatus");
+ metaData->SetResponsible("Raphaelle Bailhache");
+ 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);
+
+
+ }
+ //__________________________________________________________________________________________________________________________
+ Bool_t AliTRDPreprocessorOffline::ValidateGain() {
+ //
+ // Validate OCDB entry
+ //
+
+ AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ if(calDet) {
+ Double_t mean = calDet->GetMean();
+ Double_t rms = calDet->GetRMSRobust();
+ if((mean > 0.2) && (mean < 1.4) && (rms < 0.5)) return kTRUE;
+ //if((mean > 0.2) && (mean < 1.4)) return kTRUE;
+ else {
+ fStatus += 1000000000;
+ return kFALSE;
+ }
+ }
+ else return kFALSE;
+
- AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kGain);
- if(calDet) {
- Double_t mean = calDet->GetMean();
- Double_t rms = calDet->GetRMS();
- if((mean > 0.2) && (mean < 1.4) && (rms < 0.5)) return kTRUE;
- else return kFALSE;
- }
- else return kFALSE;
-
-}
-//__________________________________________________________________________________________________________________________
-Bool_t AliTRDPreprocessorOffline::ValidateVdrift(){
+ }
+ //__________________________________________________________________________________________________________________________
+ Bool_t AliTRDPreprocessorOffline::ValidateVdrift(){
+ //
+ // Update OCDB entry
+ //
+
+ Int_t detVdrift = kVdriftPHDet;
+ Bool_t ok = kTRUE;
+
+ if(fMethodSecond) detVdrift = kVdriftLinear;
+
+ AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
+ if(calDet) {
+ Double_t mean = calDet->GetMean();
+ Double_t rms = calDet->GetRMSRobust();
+ //printf("Vdrift::mean %f, rms %f\n",mean,rms);
+ if(!((mean > 1.0) && (mean < 2.0) && (rms < 0.5))) {
+ fStatus += 10000000;
+ ok = kFALSE;
+ }
+ }
+ else return kFALSE;
+
+ if(!fMethodSecond) {
+ AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kVdriftPHPad);
+ if(calPad) {
+ Double_t mean = calPad->GetMean();
+ Double_t rms = calPad->GetRMS();
+ //printf("Vdrift::meanpad %f, rmspad %f\n",mean,rms);
+ if(!((mean > 0.9) && (mean < 1.1) && (rms < 0.6))) {
+ fStatus += 10000000;
+ ok = kFALSE;
+ }
+ }
+ else return kFALSE;
+ }
+
+ return ok;
+
+ }
+ //__________________________________________________________________________________________________________________________
+ Bool_t AliTRDPreprocessorOffline::ValidateT0(){
+ //
+ // Update OCDB entry
+ //
+
+ AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kT0PHDet);
+ AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kT0PHPad);
+ if(calDet && calPad) {
+ Double_t meandet = calDet->GetMean();
+ 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;
+ else {
+ fStatus += 100000000;
+ return kFALSE;
+ }
+ }
+ else return kFALSE;
+
+ }
+ //__________________________________________________________________________________________________________________________
+ Bool_t AliTRDPreprocessorOffline::ValidatePRF() const{
+ //
+ // Update OCDB entry
+ //
+
+ AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kPRF);
+ if(calPad) {
+ Double_t meanpad = calPad->GetMean();
+ Double_t rmspad = calPad->GetRMS();
+ //printf("PRF::meanpad %f, rmspad %f\n",meanpad,rmspad);
+ if((meanpad < 1.0) && (rmspad < 0.8)) return kTRUE;
+ else return kFALSE;
+ }
+ else return kFALSE;
+
+
+ }
+ //__________________________________________________________________________________________________________________________
+Bool_t AliTRDPreprocessorOffline::ValidateChamberStatus() const{
//
// Update OCDB entry
//
-
- Int_t detVdrift = kVdriftPHDet;
- Bool_t ok = kTRUE;
-
- if(fMethodSecond) detVdrift = kVdriftLinear;
- AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
- if(calDet) {
- Double_t mean = calDet->GetMean();
- Double_t rms = calDet->GetRMS();
- //printf("Vdrift::mean %f, rms %f\n",mean,rms);
- if(!((mean > 1.0) && (mean < 2.0) && (rms < 0.5))) ok = kFALSE;
- }
- else return kFALSE;
-
- if(!fMethodSecond) {
- AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kVdriftPHPad);
- if(calPad) {
- Double_t mean = calPad->GetMean();
- Double_t rms = calPad->GetRMS();
- //printf("Vdrift::meanpad %f, rmspad %f\n",mean,rms);
- if(!((mean > 0.9) && (mean < 1.1) && (rms < 0.6))) ok = kFALSE;
+ AliTRDCalChamberStatus *calChamberStatus = (AliTRDCalChamberStatus *) fCalibObjects->At(kChamberStatus);
+ if(calChamberStatus) {
+ Int_t detectormasked = 0;
+ for(Int_t det = 0; det < 540; det++) {
+ if(calChamberStatus->IsMasked(det)) detectormasked++;
}
- else return kFALSE;
- }
-
- return ok;
-
-}
-//__________________________________________________________________________________________________________________________
-Bool_t AliTRDPreprocessorOffline::ValidateT0(){
- //
- // Update OCDB entry
- //
-
- AliTRDCalDet *calDet = (AliTRDCalDet *) fCalibObjects->At(kT0PHDet);
- AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kT0PHPad);
- if(calDet && calPad) {
- Double_t meandet = calDet->GetMean();
- Double_t rmsdet = calDet->GetRMS();
- 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;
- else return kFALSE;
- }
- else return kFALSE;
-
-}
-//__________________________________________________________________________________________________________________________
-Bool_t AliTRDPreprocessorOffline::ValidatePRF() const{
- //
- // Update OCDB entry
- //
-
- AliTRDCalPad *calPad = (AliTRDCalPad *) fCalibObjects->At(kPRF);
- if(calPad) {
- Double_t meanpad = calPad->GetMean();
- Double_t rmspad = calPad->GetRMS();
- //printf("PRF::meanpad %f, rmspad %f\n",meanpad,rmspad);
- if((meanpad < 1.0) && (rmspad < 0.8)) return kTRUE;
- else return kFALSE;
+ //printf("Number of chambers masked %d\n",detectormasked);
+ if(detectormasked > 40) return kFALSE;
+ else return kTRUE;
}
else return kFALSE;
-
}
//_____________________________________________________________________________
Int_t AliTRDPreprocessorOffline::GetVersion(TString name) const
// Some patterns
const Char_t *version = "Ver";
if(!strstr(name.Data(),version)) return -1;
-
+ const Char_t *after = "Subver";
+ if(!strstr(name.Data(),after)) return -1;
+
for(Int_t ver = 0; ver < 999999999; ver++) {
TString vertry(version);
vertry += ver;
- vertry += "Subver";
+ vertry += after;
//printf("vertry %s and name %s\n",vertry.Data(),name.Data());
// Some patterns
const Char_t *subversion = "Subver";
if(!strstr(name.Data(),subversion)) return -1;
+ const Char_t *after = "FirstRun";
+ if(!strstr(name.Data(),after)) {
+ after = "Nz";
+ }
+ if(!strstr(name.Data(),after)) return -1;
+
for(Int_t ver = 0; ver < 999999999; ver++) {
TString vertry(subversion);
vertry += ver;
- vertry += "Nz";
+ vertry += after;
//printf("vertry %s and name %s\n",vertry.Data(),name.Data());
}
//_____________________________________________________________________________
-AliTRDCalChamberStatus *AliTRDPreprocessorOffline::ProduceChamberStatus()
+Int_t AliTRDPreprocessorOffline::GetFirstRun(TString name) const
{
//
- // Produce AliTRDCalChamberStatus out of calibration results
+ // Get first run from the title
//
-
- // set up AliTRDCalChamberStatus
- AliTRDCalChamberStatus *CalChamberStatus = new AliTRDCalChamberStatus();
-
- // get calibration objects
- AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
- AliTRDCalDet *calDetVDrift = (AliTRDCalDet *) fCalibObjects->At(kVdriftLinear);
- // mask chambers with empty gain entries
- Int_t counter = 0;
- for (Int_t idet = 0; idet < 540; idet++) {
-
- // ch2d
- TH1I *projch = (TH1I *) fCH2d->ProjectionX("projch",idet+1,idet+1,(Option_t *)"e");
- if (!projch) continue;
-
- Int_t entries = projch->GetEntries();
+ // Some patterns
+ const Char_t *firstrun = "FirstRun";
+ if(!strstr(name.Data(),firstrun)) return -1;
+ const Char_t *after = "Nz";
+ if(!strstr(name.Data(),after)) return -1;
+
+
+ for(Int_t ver = 0; ver < 999999999; ver++) {
- // gain
- Double_t defaultgain = calDetGain->GetMean();
- Double_t gain = calDetGain->GetValue(idet);
+ TString vertry(firstrun);
+ vertry += ver;
+ vertry += after;
- // vdrift
- Double_t defaultvdrift = calDetVDrift->GetMean();
- Double_t vdrift = calDetVDrift->GetValue(idet);
+ //printf("vertry %s and name %s\n",vertry.Data(),name.Data());
- if(entries<=0 ||
- TMath::Abs(defaultgain-gain) < 0.5 ||
- TMath::Abs(defaultvdrift-vdrift) < 0.1) {
-
- printf(" chamber det %03d masked \n",idet);
- CalChamberStatus->SetStatus(idet,2);
- counter++;
- }
+ if(strstr(name.Data(),vertry.Data())) return ver;
- // installed supermodules+1 -> abort
- if(counter > (7+1)*30) {
- printf("ERROR: more than one SM to be masked!! \n Abort...\n");
- delete projch;
- return 0x0;
- }
-
- delete projch;
-
}
- return CalChamberStatus;
+
+ return -1;
+
}
+