1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 /* History of cvs commits:
20 * Revision 1.4 2007/01/24 16:57:14 gustavo
21 * Calibratio file sources machines are now not hardcoded but retreived from shuttle
23 * Revision 1.3 2006/12/20 10:53:28 gustavo
24 * Change const char * by TString, change AliInfos per AliPreprocessor::Log or AliDebug
26 * Revision 1.2 2006/12/12 17:16:09 gustavo
27 * Detector name hardcoded in Preprocesor with new detector name notation (3 letters). New way to take reference histogram to avoid problems in case of low number of entries or no existing histogram. Change return 0 by return 1
29 * Revision 1.1 2006/12/07 16:32:16 gustavo
30 * First shuttle code, online calibration histograms producer, EMCAL preprocessor
34 ///////////////////////////////////////////////////////////////////////////////
35 // EMCAL Preprocessor class. It runs by Shuttle at the end of the run,
36 // calculates calibration coefficients and dead/bad channels
37 // to be posted in OCDB
39 // Author: Boris Polichtchouk, 4 October 2006
40 // Adapted for EMCAL by Gustavo Conesa Balbastre, October 2006
41 ///////////////////////////////////////////////////////////////////////////////
51 #include "TObjString.h"
54 #include "AliEMCALPreprocessor.h"
56 #include "AliCDBMetaData.h"
57 #include "AliEMCALCalibData.h"
59 ClassImp(AliEMCALPreprocessor)
61 //_______________________________________________________________________________________
62 AliEMCALPreprocessor::AliEMCALPreprocessor() :
63 AliPreprocessor("EMC",0)
68 //_______________________________________________________________________________________
69 AliEMCALPreprocessor::AliEMCALPreprocessor(AliShuttleInterface* shuttle):
70 AliPreprocessor("EMC",shuttle)
75 //_______________________________________________________________________________________
76 UInt_t AliEMCALPreprocessor::Process(TMap* /*valueSet*/)
78 // process data retrieved by the Shuttle
80 // The fileName with the histograms which have been produced by
81 // AliEMCALCalibHistoProducer.
82 // It is a responsibility of the SHUTTLE framework to form the fileName
84 AliEMCALCalibData calibData;
87 TList* list = GetFileSources(kDAQ, "AMPLITUDES");
90 AliInfo("The following sources produced files with the id AMPLITUDES");
94 while ((source = dynamic_cast<TObjString *> (iter.Next()))) {
95 //TObjString * str = dynamic_cast<TObjString*> (list->At(0));//Only one source?
96 AliInfo(Form("found source %s", source->String().Data()));
98 TString fileName = GetFile(kDAQ, "AMPLITUDES", source->GetName());
100 //TString fileName = GetFile(kDAQ, "AMPLITUDES", "GDC");
101 Log(Form("Got filename: %s",fileName.Data()));
106 Log(Form("File %s is not opened, something goes wrong!",fileName.Data()));
111 const Int_t nMod=12; // 1:5 modules
112 const Int_t nCol=48; //1:56 columns in each module
113 Int_t nRow=24; //1:64 rows in each module
114 const Int_t nRowHalfSM = 12; //Supermodules 11 and 12 are half supermodules
121 //Get reference histogram
122 TList * keylist = f.GetListOfKeys();
123 Int_t nkeys = f.GetNkeys();
126 TString refHistoName= "";
129 TH1F* hRef = new TH1F();
131 //Check if the file contains any histogram
133 Log(Form("Not enough histograms for calibration, nhist = %d",nkeys));
138 ikey = gRandom->Integer(nkeys);
139 key = (TKey*)keylist->At(ikey);
140 refHistoName = key->GetName();
141 hRef = (TH1F*)f.Get(refHistoName);
143 // Check if the reference has too little statistics and
144 // if the histogram has the correct name (2 kinds, mod#col#row for
145 // reference here, and mod#, see AliEMCALHistoProducer.
146 if(refHistoName.Contains("col") && hRef->GetEntries()>2 && hRef->GetMean()>0)
148 if(!ok && counter >= nMod*nCol*nRow+nMod){
149 Log("No histogram with enough statistics for reference");
154 Double_t refMean=hRef->GetMean();
156 // Calculates relative calibration coefficients for all non-zero channels
158 for(Int_t mod=0; mod<nMod; mod++) {
159 if(mod > 10) nRow = nRowHalfSM ;
160 for(Int_t col=0; col<nCol; col++) {
161 for(Int_t row=0; row<nRow; row++) {
162 sprintf(hnam,"mod%dcol%drow%d",mod,col,row);
163 histo = (TH1F*)f.Get(hnam);
164 //TODO: dead channels exclusion!
165 if(histo && histo->GetMean() > 0) {
166 coeff = histo->GetMean()/refMean;
167 calibData.SetADCchannel(mod+1,col+1,row+1,1./coeff);
168 AliDebug(1,Form("mod %d col %d row %d coeff %f\n",mod,col,row,coeff));
171 calibData.SetADCchannel(mod+1,col+1,row+1,-111);
179 Log("Sources not found for id AMPLITUDES");
183 AliCDBMetaData metaData;
184 Int_t result = Store("Calib", "Data", &calibData, &metaData);