// 2. extraction of the information
//
if(ReadVdriftT0Global(file)) AnalyzeVdriftT0();
+ //printf("Finish PH\n");
if(ReadVdriftLinearFitGlobal(file)) AnalyzeVdriftLinearFit();
//
// 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
+ //
+ //
+ UpdateOCDBChamberStatus(startRunNumber,endRunNumber,ocdbStorage);
+
}
//______________________________________________________________________________________________________
Bool_t AliTRDPreprocessorOffline::Init(const Char_t* fileName){
// 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();
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);
+ // get calibration objects
+ AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ AliTRDCalDet *calDetVDrift = (AliTRDCalDet *) fCalibObjects->At(kVdriftLinear);
+
+ // Check
+ if((!calDetGain) || (!calDetVDrift)) return kFALSE;
+
+ // Gain
+ Double_t gainmean = calDetGain->GetMean();
+ Double_t vdriftmean = calDetVDrift->GetMean();
+
+ Double_t gainrms = calDetGain->GetRMSRobust();
+ Double_t vdriftrms = calDetVDrift->GetRMSRobust();
+
+ //printf("Gain mean: %f, rms: %f\n",gainmean,gainrms);
+ //printf("Vdrift mean: %f, rms: %f\n",vdriftmean,vdriftrms);
- if(TMath::Abs(gainout-1.0) > 0.000001) calDetGain->SetValue(det,gaininit*gainout);
- else calDetGain->SetValue(det,mean);
- }
+ // Check
+ if((TMath::Abs(gainrms) < 0.001) || (TMath::Abs(vdriftrms) < 0.001)) return kFALSE;
+ // mask chambers with empty gain entries
+ //Int_t counter = 0;
+ for (Int_t idet = 0; idet < 540; idet++) {
-}
-//________________________________________________________________________________________________
-void AliTRDPreprocessorOffline::CorrectFromDetVdriftUsed() {
- //
- // Correct from the drift velocity
- //
+ // ch2d
+ TH1I *projch = (TH1I *) fCH2d->ProjectionX("projch",idet+1,idet+1,(Option_t *)"e");
+ Double_t entries = projch->GetEntries();
- //printf("Correct for vdrift\n");
+ // gain
+ Double_t gain = calDetGain->GetValue(idet);
- AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
- if(!calDetGain) return;
+ // vdrift
+ Double_t vdrift = calDetVDrift->GetValue(idet);
- Int_t detVdrift = kVdriftPHDet;
- if(fMethodSecond) detVdrift = kVdriftLinear;
- AliTRDCalDet *calDetVdrift = (AliTRDCalDet *) fCalibObjects->At(detVdrift);
- if(!calDetVdrift) return;
- // Calculate mean
-
- for(Int_t det = 0; det < 540; det++) {
-
- Float_t vdriftinit = fCalDetVdriftUsed->GetValue(det);
- Float_t vdriftout = calDetVdrift->GetValue(det);
+ 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++;
+ }
- Float_t gain = calDetGain->GetValue(det);
- if(vdriftout > 0.0) gain = gain*vdriftinit/vdriftout;
- calDetGain->SetValue(det,gain);
+ /*
+ // 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;
+ }
+ */
-
- }
-
-}
-//_________________________________________________________________________________________________________________
-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);
-
+ if(projch) delete projch;
-}
-//___________________________________________________________________________________________________________________
-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);
-
- //
+ // 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);
+ }
+ }
+ }
- 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);
-
- }
+ fCalibObjects->AddAt(CalChamberStatus,kChamberStatus);
+ return kTRUE;
-}
-//________________________________________________________________________________________________________________________
-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::CorrectFromDetGainUsed() {
+ //
+ // Correct from the gas gain used afterwards
+ //
+ AliTRDCalDet *calDetGain = (AliTRDCalDet *) fCalibObjects->At(kGain);
+ if(!calDetGain) return;
-}
-//_________________________________________________________________________________________________________________
-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);
-
+ // Calculate mean
+ Double_t mean = 0.0;
+ Int_t nbdet = 0;
-}
-//__________________________________________________________________________________________________________________________
-Bool_t AliTRDPreprocessorOffline::ValidateGain() const {
- //
- // Validate OCDB entry
- //
+ for(Int_t det = 0; det < 540; det++) {
- 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;
-
+ Float_t gaininit = fCalDetGainUsed->GetValue(det);
+ Float_t gainout = calDetGain->GetValue(det);
-}
-//__________________________________________________________________________________________________________________________
-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->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;
- }
- else return kFALSE;
- }
+ if(TMath::Abs(gainout-1.0) > 0.000001) {
+ mean += (gaininit*gainout);
+ nbdet++;
+ }
+ }
+ if(nbdet > 0) mean = mean/nbdet;
- return ok;
+ for(Int_t det = 0; det < 540; det++) {
-}
-//__________________________________________________________________________________________________________________________
-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{
+ 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);
+ }
+
+
+ }
+ //________________________________________________________________________________________________
+ 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
+
+ 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;
+ calDetGain->SetValue(det,gain);
+
+
+ }
+
+ }
+ //_________________________________________________________________________________________________________________
+ 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);
+
+
+ }
+ //___________________________________________________________________________________________________________________
+ 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() const {
+ //
+ // 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 return kFALSE;
+ }
+ else return kFALSE;
+
+
+ }
+ //__________________________________________________________________________________________________________________________
+ 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))) 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;
+ }
+ 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 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
//
- 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;
+ 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++;
+ }
+ //printf("Number of chambers masked %d\n",detectormasked);
+ if(detectormasked > 29) return kFALSE;
+ else return kTRUE;
}
else return kFALSE;
-
}
//_____________________________________________________________________________
Int_t AliTRDPreprocessorOffline::GetVersion(TString name) const
}
-//_____________________________________________________________________________
-AliTRDCalChamberStatus *AliTRDPreprocessorOffline::ProduceChamberStatus()
-{
- //
- // Produce AliTRDCalChamberStatus out of calibration results
- //
-
- // 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 = static_cast<Int_t>(projch->GetEntries());
-
- // gain
- Double_t defaultgain = calDetGain->GetMean();
- Double_t gain = calDetGain->GetValue(idet);
-
- // vdrift
- Double_t defaultvdrift = calDetVDrift->GetMean();
- Double_t vdrift = calDetVDrift->GetValue(idet);
-
- 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++;
- }
-
- // 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;
-}