/************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /////////////////////////////////////////////////////////////////////////////// // PHOS Preprocessor class. It runs by Shuttle at the end of the run, // calculates calibration coefficients and dead/bad channels // to be posted in OCDB // // Author: Hisayuki Torii, 11 August 2009 /////////////////////////////////////////////////////////////////////////////// #include "AliLog.h" #include "TFile.h" #include "TKey.h" #include "TList.h" #include "TString.h" #include "TObjString.h" #include "AliPHOSPreprocessorPHYS.h" ClassImp(AliPHOSPreprocessorPHYS) //_______________________________________________________________________________________ AliPHOSPreprocessorPHYS::AliPHOSPreprocessorPHYS() : AliPreprocessor("PHS",0) { //default constructor } //_______________________________________________________________________________________ AliPHOSPreprocessorPHYS::AliPHOSPreprocessorPHYS(AliShuttleInterface* shuttle): AliPreprocessor("PHS",shuttle) { // Constructor AddRunType("PHYSICS"); AddRunType("COSMICS"); // Does this exist?? } //_______________________________________________________________________________________ UInt_t AliPHOSPreprocessorPHYS::Process(TMap* /*valueSet*/){ // process data retrieved by the Shuttle // TString runType = GetRunType(); Log(Form("Run type: %s",runType.Data())); if( runType=="PHYSICS" || runType=="COSMICS") { Bool_t calibEmc_OK = CalibratePhys(); if(calibEmc_OK) return 0; else return 1; } Log(Form("Unknown run type %s. Do nothing and return OK.",runType.Data())); return 0; } //_______________________________________________________________________________________ Bool_t AliPHOSPreprocessorPHYS::CalibratePhys(){ //process PHYSICS event retrieved by the Shuttle // TList* list = 0; list = GetFileSources(kDAQ,"PHOSDApi0mip"); if(!list) { Log(Form("DAQ sources list not found!")); return kFALSE; } if(!list->GetEntries()) { Log(Form("Got empty sources list. It seems PHYS DA did not produce any files!")); return kFALSE; } TIter iter(list); TObjString *source; while ((source = dynamic_cast (iter.Next()))) { AliInfo(Form("found source %s", source->String().Data())); TString fileName = GetFile(kDAQ, "PHOSDApi0mip", source->GetName()); AliInfo(Form("Got filename: %s",fileName.Data())); TFile* file = TFile::Open(fileName); if(!file) { Log(Form("File %s is not opened, something goes wrong!",fileName.Data())); return kFALSE; } file->ls(); //TList * keylist = file->GetListOfKeys(); Int_t nkeys = file->GetNkeys(); if(nkeys==0){ Log(Form("Not enough (%d) for calibration.",nkeys)); return 1; // it's not fatal! May be short run.. } file->Close(); delete file; } return kTRUE; } //_______________________________________________________________________________________