]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGPP/CalibMacros/CPass0/makeOCDB.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGPP / CalibMacros / CPass0 / makeOCDB.C
index 323461b205f2086a22a7d47f65d56bed1e337a38..a84823723cdf644688d43e85f2bba1d1bbc56031 100644 (file)
 
 */
 
-void PrintDetectoStatus();
+void printCalibStat(Int_t run, const char * fname,  TTreeSRedirector * pcstream);
 
-
-
-void makeOCDB(TString runNumberString, TString  ocdbStorage="")
+void makeOCDB(Int_t runNumber, TString  targetOCDBstorage="", TString sourceOCDBstorage="raw://", Int_t detectorBitsQualityFlag = -1)
 {
   //
-  // extract TPC OCDB entries
+  // extract OCDB entries for detectors participating in the calibration for the current run
   //
-  gROOT->Macro("LoadLibraries.C");
-  gROOT->LoadMacro("ConfigCalibTrain.C");
+
+  gROOT->Macro("$ALICE_ROOT/PWGPP/CalibMacros/CPass0/LoadLibraries.C");
+  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/CalibMacros/CPass0/ConfigCalibTrain.C");
 
   // switch off log info
   AliLog::SetClassDebugLevel("AliESDEvent",0);
 
   // config GRP
-  Int_t runNumber = runNumberString.Atoi();
   printf("runNumber from runCalibTrain = %d\n",runNumber);
-  ConfigCalibTrain(runNumber, "raw://");
+  ConfigCalibTrain(runNumber, sourceOCDBstorage.Data());
+
+  // check the presence of the detectors
+  AliCDBEntry* entry = AliCDBManager::Instance()->Get("GRP/GRP/Data");
+  AliGRPObject* grpData = dynamic_cast<AliGRPObject*>(entry->GetObject());
+  if (!grpData) {printf("Failed to get GRP data for run",runNumber); return;}
+  Int_t activeDetectors = grpData->GetDetectorMask();
+  TString detStr = AliDAQ::ListOfTriggeredDetectors(activeDetectors);
+  printf("Detectors in the data:\n%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
-//ocdbStorage+="?se=ALICE::CERN::SE";
 
-  AliCDBManager::Instance()->SetSpecificStorage("*/*/*",ocdbStorage.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 (ocdbStorage.Length()==0) ocdbStorage+="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
-  TFile fcalib("CalibObjects.root");
-  AliTPCPreprocessorOffline procesTPC;
+  AliTPCPreprocessorOffline *procesTPC = 0;
+  if (detStr.Contains("TPC") && TPC_qf){
+    Printf("\n******* Calibrating TPC *******");
+    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);
+    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,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") && TOF_qf){
+    procesTOF = new AliTOFAnalysisTaskCalibPass0;
+    Printf("\n******* Calibrating TOF *******");
+    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);
+  }
 
-  // switch on parameter validation
-  procesTPC.SetTimeGainRange(0.5,3.0);
-  procesTPC.SwitchOnValidation();
+  // T0 part
+  AliT0PreprocessorOffline *procesT0= 0;
+  if (detStr.Contains("T0") && T0_qf) {
+    Printf("\n******* Calibrating T0 *******");
+    // Make  calibration of channels offset
+    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);
+  }
 
-  // Make timegain calibration
-  //proces.CalibTimeGain("CalibObjects.root", runNumber,AliCDBRunRange::Infinity(),ocdbStorage);
-  procesTPC.CalibTimeGain("CalibObjects.root", runNumber,runNumber,ocdbStorage);
+  //TRD part
+  AliTRDPreprocessorOffline *procesTRD = 0;
+  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);
+    procesTRD->SetMinStatsGain(600);
+    procesTRD->SetLimitValidateNoData(60);
+    procesTRD->SetLimitValidateBadCalib(60);
+    procesTRD->SetAlternativeDriftVelocityFit(kTRUE);
+    procesTRD->Init("CalibObjects.root");
+    Int_t versionVdriftUsed = procesTRD->GetVersionVdriftUsed();
+    Int_t subversionVdriftUsed = procesTRD->GetSubVersionVdriftUsed();
+    Int_t versionGainUsed = procesTRD->GetVersionGainUsed();
+    Int_t subversionGainUsed = procesTRD->GetSubVersionGainUsed();
+    Int_t versionExBUsed = procesTRD->GetVersionExBUsed();
+    Int_t subversionExBUsed = procesTRD->GetSubVersionExBUsed();
+    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,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") && SPD_qf) {
+    Printf("\n******* Calibrating MeanVertex *******");
+    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);
+  }
 
-  // Make vdrift calibration
-  //proces.CalibTimeVdrift("CalibObjects.root",runNumber,AliCDBRunRange::Infinity(),ocdbStorage);
-  procesTPC.CalibTimeVdrift("CalibObjects.root",runNumber,runNumber,ocdbStorage);
   //
-  // TOF part
+  // Print calibration status into the stdout
+  //
+  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->GetStatus():0;
+  Int_t meanVtxStatus = (procesMeanVtx) ? procesMeanVtx->GetStatus():0;
+  //
+  printf("\n");
+  printf("******* CPass0 calibration status *******\n");
+  printf("TRD calibration status=%d\n",trdStatus);
+  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);
   //
-  AliTOFAnalysisTaskCalibPass0 calibTask;
-  Printf("Calibrating TOF");
-  calibTask.ProcessOutput("CalibObjects.root", ocdbStorage);
-//
-//
-
-// T0 part
-  AliT0PreprocessorOffline procesT0;
-  // Make  calibration of channels offset
-   procesT0.setDArun(175000);
-   procesT0.Process("CalibObjects.root",runNumber, runNumber, ocdbStorage);
-
-
-
-   //TRD part
-   AliTRDPreprocessorOffline procestrd;
-   procestrd.SetLinearFitForVdrift(kTRUE);
-   procestrd.SetMinStatsVdriftT0PH(600*10);
-   procestrd.SetMinStatsVdriftLinear(50);
-   procestrd.SetMinStatsGain(600);
-   procestrd.SetLimitValidateNoData(40);
-   procestrd.SetLimitValidateBadCalib(40);
-   procestrd.SetAlternativeDriftVelocityFit(kTRUE);
-   procestrd.Init("CalibObjects.root");
-   Int_t versionVdriftUsed = procestrd.GetVersionVdriftUsed();
-   Int_t subversionVdriftUsed = procestrd.GetSubVersionVdriftUsed();
-   Int_t versionGainUsed = procestrd.GetVersionGainUsed();
-   Int_t subversionGainUsed = procestrd.GetSubVersionGainUsed();
-   Int_t versionExBUsed = procestrd.GetVersionExBUsed();
-   Int_t subversionExBUsed = procestrd.GetSubVersionExBUsed();
-   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,ocdbStorage);
+  TTreeSRedirector *pcstream = new TTreeSRedirector("cpassStat.root","recreate");
+  printCalibStat(runNumber, "CalibObjects.root",pcstream);
+  delete pcstream;
+  return;
+}
+
+
+// function to print statistics used to calibrate the various detectors
+
+void printCalibStat(Int_t run, const char * fname,  TTreeSRedirector * pcstream){
+
+  //
+  // Dump the statistical information about all histograms in the calibration files 
+  //    into the statistical tree, print on the screen (log files) as well 
+  //
+  //
+  // 1. Default dump for all histograms
+  //    Information to dump:
+  //    stat =Entries, Mean, MeanError,  RMS, MaxBin
+  //    Branch naming convention:
+  //    <detName>_<hisName><statName>
+  //
+  // 2. Detector statistical information  - to be implemented by expert
+  //                                      - First version implemented by MI 
+  //  
+  // 
+
+  TFile *fin = TFile::Open(fname);
+  if (!fin) return;
+  const Double_t kMaxHis=10000;
   
+  TList * keyList = fin->GetListOfKeys();
+  Int_t nkeys=keyList->GetEntries();
+  Double_t *hisEntries = new Double_t[kMaxHis];
+  Double_t *hisMean = new Double_t[kMaxHis];
+  Double_t *hisMeanError = new Double_t[kMaxHis];
+  Double_t *hisRMS = new Double_t[kMaxHis];
+  Double_t *hisMaxBin = new Double_t[kMaxHis];
+  Int_t counter=0;
   
-   //Mean Vertex
-   AliMeanVertexPreprocessorOffline procesMeanVtx;
-   procesMeanVtx.ProcessOutput("CalibObjects.root", ocdbStorage, runNumber);
-
-   //
-   // Print calibration status into the stdout
-   //
-   Int_t trdStatus = procestrd.GetStatus();
-   Int_t tofStatus = calibTask.GetStatus();
-   Int_t tpcStatus = ((processTPC.ValidateTimeDrift() || processTPC.ValidateTimeGain())==kFALSE);
-   //
-   printf("\n\n\n\n");
-   printf("CPass0 calibration status\n");
-   printf("TRD calibration status=%d\n",trdStatus);
-   printf("TOF calibration status=%d\n",tofStatus);
-   printf("TPC calibration status=%d\n",tpcStatus);
-   PrintDetectorStatus();
-   return;
-}
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"run="<<run;
+  for (Int_t ikey=0; ikey<nkeys; ikey++){
+    TObject * object = fin->Get(keyList->At(ikey)->GetName());
+    if (!object) continue;
+    if (object->InheritsFrom("TCollection")==0) continue;
+    TSeqCollection *collection  = (TSeqCollection*)object; 
+    Int_t nentries= collection->GetEntries();
+    for (Int_t ihis=0; ihis<nentries; ihis++){
+      TObject * ohis = collection->At(ihis);
+      if (!ohis) continue;
+      if (ohis->InheritsFrom("TH1")==0) continue;
+      TH1* phis = (TH1*)ohis;
+      hisEntries[counter]=phis->GetEntries();  
+      Int_t idim=1;
+      if (ohis->InheritsFrom("TH2")) idim=2;
+      if (ohis->InheritsFrom("TH3")) idim=3;        
+      hisMean[counter]=phis->GetMean(idim);    
+      hisMeanError[counter]=phis->GetMeanError(idim);  
+      hisRMS[counter]=phis->GetRMS(idim);      
+      hisMaxBin[counter]=phis->GetBinCenter(phis->GetMaximumBin());    
+      if (pcstream) (*pcstream)<<"calibStatAll"<<
+                     Form("%s_%sEntries=",keyList->At(ikey)->GetName(), phis->GetName())<<hisEntries[counter]<<        
+                     Form("%s_%sMean=",keyList->At(ikey)->GetName(), phis->GetName())<<hisMean[counter]<<      
+                     Form("%s_%sMeanError=",keyList->At(ikey)->GetName(), phis->GetName())<<hisMeanError[counter]<<    
+                     Form("%s_%sRMS=",keyList->At(ikey)->GetName(), phis->GetName())<<hisRMS[counter]<<        
+                     Form("%s_%sMaxBin=",keyList->At(ikey)->GetName(), phis->GetName())<<hisMaxBin[counter];   
+      //printf("Histo:\t%s_%s\t%f\t%d\n",keyList->At(ikey)->GetName(), phis->GetName(), hisEntries[counter],idim);
+      counter++;
+    }
+    delete object;
+  }    
+  
+  //
+  // Expert dump example (MI first iteration):
+  //
+  // 0.)  TOF dump
+  //
 
+  Int_t tofEvents=0;
+  Int_t tofTracks=0;
+  TList * TOFCalib = (TList*)fin->Get("TOFHistos");      
+  if (TOFCalib) {
+    TH1 *histoEvents = (TH1*)TOFCalib->FindObject("hHistoVertexTimestamp");
+    TH1 *histoTracks = (TH1*)TOFCalib->FindObject("hHistoDeltatTimestamp");
+    if (histoEvents && histoTracks){
+      tofEvents = TMath::Nint(histoEvents->GetEntries());
+      tofTracks = TMath::Nint(histoTracks->GetEntries());
+    }
+    delete TOFCalib;
+  }
+  printf("Monalisa TOFevents\t%d\n",tofEvents);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"TOFevents="<<tofEvents;
+  printf("Monalisa TOFtracks\t%d\n",tofTracks);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"TOFtracks="<<tofTracks;
 
+  //
+  // 1.)  TPC  dump - usefull events/tracks  for the calibration
+  //
+  Int_t tpcEvents=0;
+  Int_t tpcTracks=0;
+  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;
+  printf("Monalisa TPCtracks\t%d\n",tpcTracks);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"TPCtracks="<<tpcTracks;
 
+  //
+  // 2. TRD dump 
+  //
+  Int_t trdEvents=0;
+  Int_t trdTracks=0;
+  TList * TRDCalib = (TList*)fin->Get("TRDCalib");      
+  if (TRDCalib) {
+    TH1  *histoEvents = (TH1*)TRDCalib->FindObject("NEventsInput_AliTRDCalibTask");
+    TH1  *histoTracks = (TH1*)TRDCalib->FindObject("AbsoluteGain_AliTRDCalibTask");
+    if (histoEvents && histoTracks){
+      trdEvents= TMath::Nint(histoEvents->GetEntries());
+      trdTracks= TMath::Nint(histoTracks->GetEntries());
+    }
+    delete TRDCalib;
+  }
+  printf("Monalisa TRDevents\t%d\n",trdEvents);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"TRDevents="<<trdEvents;
+  printf("Monalisa TRDtracks\t%d\n",trdTracks);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"TRDtracks="<<trdTracks;
+
+  //
+  // 3. T0 dump 
+  //
+  Int_t T0Events=0;
+  TList * T0Calib = (TList*)fin->Get("T0Calib");      
+  if (T0Calib) {
+    TH1  *histoEvents = (TH1*) T0Calib->FindObject("fTzeroORAplusORC");
+    if (histoEvents){
+      T0Events= TMath::Nint(histoEvents->GetEntries());
+    }
+    delete T0Calib;
+  }
+  printf("Monalisa T0events\t%d\n",T0Events);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"T0events="<<T0Events;
 
-void PrintDetectoStatus(){
   //
-  // GetStatus for the detector which did not implement GetStatus function: 
+  // 4. Mean vertex -   dump 
+    Int_t meanVertexEvents=0;
+  TList * meanVertexCalib = (TList*)fin->Get("MeanVertex");      
+  if (meanVertexCalib) {
+    TH1  *histoEvents = (TH1*) meanVertexCalib->FindObject("hTRKVertexX");
+    if (histoEvents){
+      meanVertexEvents = TMath::Nint(histoEvents->GetEntries());
+    }
+    delete meanVertexCalib;
+  }
+  printf("Monalisa MeanVertexevents\t%d\n",meanVertexEvents);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"MeanVertexevents="<<meanVertexEvents;
+
   //
-  // AliTOFAnalysisTaskCalibPass0 calibTask;            // GetStatus implemented
-  // AliTRDPreprocessorOffline procestrd;               // GetStatus implemented 
-  // AliTPCPreprocessorOffline proces;                  // GetStatus not implemented (next release)
-  //                                                    // Logical or of the Validation function used instead
+  // 5. SDD dump 
   //
-  // AliMeanVertexPreprocessorOffline procesMeanVtx;    // GetStatus not implemented 
-  // AliT0PreprocessorOffline procesT0;                 // GetStatus not implemented 
-  // SDDcalib                                           // Not automatic update - Not needed 
+  Int_t sddEvents=0;
+  Int_t sddTracks=0;
+  TList * SDDCalib = (TList*)fin->Get("clistSDDCalib");      
+  if (SDDCalib) {
+    TH1  *histoEvents = (TH1*) SDDCalib->FindObject("hNEvents");
+    if (histoEvents ){
+      sddEvents = TMath::Nint(histoEvents->GetBinContent(4));
+      sddTracks = TMath::Nint(histoEvents->GetBinContent(5));
+    }
+    delete SDDCalib;
+  }
+  printf("Monalisa SDDevents\t%d\n",sddEvents);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"SDDevents="<<sddEvents;
+  printf("Monalisa SDDtracks\t%d\n",sddTracks);
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"SDDtracks="<<sddTracks;
+
   //
-  // CODE TO BE WRITTEN HERE FOR DETECTOT WITHOUT STATUS 
+  if (pcstream) (*pcstream)<<"calibStatAll"<<"\n";
+  delete fin;
+
 }
+