*/
-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;
+
}
+