1 /**************************************************************************
2 * Copyright(c) 1998-2007, 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 **************************************************************************/
16 /* $Id: AliEMCALFolder.cxx 24500 2008-03-13 23:39:38Z jklay $ */
18 //_________________________________________________________________________
19 // Top EMCAL folder which will keep all
20 // information about EMCAL itself,
21 // super Modules (SM), modules, towers,
22 // set of hists and so on.
24 //*-- Author: Aleksei Pavlinov (WSU, Detroit, USA)
26 #include "AliEMCALFolder.h"
27 #include "AliEMCALHistoUtilities.h"
28 #include "AliEMCALGeometry.h"
29 #include "AliEMCALSuperModule.h"
30 #include "AliEMCALCell.h"
31 #include "AliESDCaloCluster.h"
35 #include "AliEMCALCalibData.h"
36 #include "AliCDBMetaData.h"
38 #include "AliCDBEntry.h"
39 #include "AliCDBManager.h"
40 #include "AliCDBStorage.h"
42 #include "AliEMCALCalibCoefs.h"
43 #include "AliEMCALDigit.h"
44 #include "AliEMCALRecPoint.h"
46 #include "AliEMCALPi0SelectionParam.h"
57 #include <TClonesArray.h>
61 #include <TLegendEntry.h>
64 const TString AliEMCALFolder::fgkBaseFolderName("EMCAL");
65 const TString AliEMCALFolder::fgkCCFirstName("CCFIRST");
66 const TString AliEMCALFolder::fgkCCinName("CCIN");
67 const TString AliEMCALFolder::fgkCCoutName("CCOUT");
68 const TString AliEMCALFolder::fgkDirOfRootFiles("$HOME/ALICE/SHISHKEBAB/RF/CALIB/JUL16/");
70 typedef AliEMCALHistoUtilities u;
72 ClassImp(AliEMCALFolder)
74 //AliEMCALGeometry* AliEMCALFolder::fGeometry = 0;
76 //_____________________________________________________________
77 AliEMCALFolder::AliEMCALFolder() :
79 fCounter(0), fGeometry(0), fNumOfCell(0), fLhists(0), fLofCells(0),fPi0SelPar(0),fCalibData(0),
80 fCellNtuple(0),fLobj(0)
85 //_____________________________________________________________
86 AliEMCALFolder::AliEMCALFolder(const AliEMCALFolder& folder) :
87 TFolder(folder.GetName(),folder.GetTitle()),
88 fCounter(folder.fCounter),
89 fGeometry(folder.fGeometry), fNumOfCell(folder.fNumOfCell),
90 fLhists(folder.fLhists), fLofCells(folder.fLofCells),
91 fPi0SelPar(folder.fPi0SelPar),fCalibData(folder.fCalibData),
92 fCellNtuple(folder.fCellNtuple),fLobj(folder.fLobj)
97 //_____________________________________________________________
98 AliEMCALFolder::AliEMCALFolder(const char* name, const char* title, Bool_t putToBrowser) :
100 fCounter(-1), fGeometry(0), fNumOfCell(0), fLhists(0), fLofCells(0),fPi0SelPar(0),fCalibData(0),
101 fCellNtuple(0),fLobj(0)
106 //_____________________________________________________________
107 AliEMCALFolder::AliEMCALFolder(const Int_t it, const char* title, Bool_t putToBrowser) :
108 TFolder(Form("%s_%2.2i", AliEMCALFolder::fgkBaseFolderName.Data(),it),title),
109 fCounter(it), fGeometry(0), fNumOfCell(0), fLhists(0), fLofCells(0),fPi0SelPar(0),fCalibData(0),
110 fCellNtuple(0),fLobj(0)
115 //_____________________________________________________________
116 AliEMCALFolder::~AliEMCALFolder()
121 //_____________________________________________________________
122 void AliEMCALFolder::Init(Bool_t putToBrowser)
124 // Initialize all data structure
126 fLobj->SetName("Objects"); // name is good ?
127 this->Add((TObject*)fLobj);
128 //this->AddObject((TObject*)fLobj, kTRUE);
129 // Get default geometry - "SHISH_77_TRD1_2X2_FINAL_110DEG"; May 29, 2007
130 fGeometry = AliEMCALGeometry::GetInstance(); // should be define before
131 fLobj->Add(fGeometry);
133 // Initial cc with decalibration
135 // Jul 13 - See ~/macros/ALICE/sim.C for choice of CDB
136 AliEMCALCalibData *calData[1];
137 // Get from defined arrea;
138 // First table is table which used in rec.points finder.
139 Add(AliEMCALCalibCoefs::GetCalibTableFromDb(fgkCCFirstName.Data(),calData));
140 fCalibData = calData[0];
141 fLobj->Add(fCalibData);
142 if(GetIterationNumber()<=1) {
143 Add(AliEMCALCalibCoefs::GetCalibTableFromDb(fgkCCinName.Data(), calData));
146 // Selection Parameter
147 fPi0SelPar = AliEMCALPi0SelectionParam::Set1();
148 this->Add(fPi0SelPar);
150 fLhists = BookHists();
153 // dimension should be get from geometry - 4*12*24*11);
154 fNumOfCell = fGeometry->GetNCells();
155 fLofCells = new AliEMCALCell*[fNumOfCell];
156 for(int i=0; i<fNumOfCell; i++) fLofCells[i] = 0;
158 printf("<I> Create AliEMCALFolder : it %i : name %s\n ", fCounter, GetName());
160 if(putToBrowser) gROOT->GetListOfBrowsables()->Add(this); // for testing purpuse
163 //_____________________________________________________________
164 AliEMCALSuperModule* AliEMCALFolder::GetSuperModule(const Int_t nm)
167 AliEMCALSuperModule *sm = 0;
169 TObject *set = FindObject(Form("SM%2.2i",nm));
170 if(set) sm = (AliEMCALSuperModule*)set;
175 //_____________________________________________________________
176 AliEMCALCell* AliEMCALFolder::GetCell(const Int_t absId)
178 if(absId<0 || absId >= fNumOfCell) return 0;
179 else return fLofCells[absId];
182 //_____________________________________________________________
183 void AliEMCALFolder::SetCell(AliEMCALCell *cell, const Int_t absId)
186 if(absId>=0 && absId < fNumOfCell) {
187 fLofCells[absId] = cell;
191 //_____________________________________________________________
192 AliEMCALPi0SelectionParRec* AliEMCALFolder::GetPi0SelectionParRow(Int_t nrow)
195 AliEMCALPi0SelectionParRec* r=0;
197 r = fPi0SelPar->GetTable(nrow);
202 //_____________________________________________________________
203 void AliEMCALFolder::FillPi0Candidate(const Double_t mgg, AliESDCaloCluster* cl1, AliESDCaloCluster* cl2)
206 static Int_t absIdMax, nm1, nm2;
208 u::FillH1(fLhists, 0, 1.); // number entries
209 u::FillH1(fLhists, 1, mgg);
211 nm1 = GetSMNumber(cl1);
212 nm2 = GetSMNumber(cl2);
214 if(nm1==-1 || nm2==-1) assert(0);
216 if(nm1 != nm2) return; // Both cluster should be in the same SM
218 AliESDCaloCluster* cl = cl1;
219 if(cl1->E() < cl2->E()) cl = cl2; // Get cluster with highest energy
221 const Int_t kNdigits = cl->GetNumberOfDigits();
222 const Short_t* absId = cl->GetDigitIndex()->GetArray();
224 AliEMCALCalibCoefs *tFirst = GetCCFirst();
225 AliEMCALCalibCoef *rFirst=0;
227 int indMax = 0, id=0;
228 id = Int_t(absId[0]);
229 rFirst = tFirst->GetTable(id);
230 double emax = 0;//cl->GetTrueDigitEnergy(indMax, rFirst->fCc);
232 for(int i=1; i<kNdigits; i++) {
233 id = Int_t(absId[i]);
234 rFirst = tFirst->GetTable(id);
235 if(emax < 0){//cl->GetTrueDigitEnergy(i, rFirst->fCc)) {
237 emax = 0;//cl->GetTrueDigitEnergy(i, rFirst->fCc);
241 if(emax/cl->E() > 0.5) { // more than 50% of cluster energy
242 u::FillH1(fLhists, 0, 2.); // number "good" entries
243 absIdMax = Int_t(absId[indMax]);
244 FillPi0Candidate(mgg, absIdMax, nm1);
248 //_____________________________________________________________
249 void AliEMCALFolder::FillPi0Candidate(const Double_t mgg, Int_t absIdMax, Int_t nm)
252 static Int_t nSupModMax, nModuleMax, nIphiMax, nIetaMax, iphiCellMax, ietaCellMax;
253 static AliEMCALCell* cell;
255 static AliEMCALSuperModule *sm;
257 fGeometry->GetCellIndex(absIdMax, nSupModMax, nModuleMax, nIphiMax, nIetaMax);
258 if(nm != nSupModMax) assert(0);
260 fGeometry->GetCellPhiEtaIndexInSModule(nSupModMax, nModuleMax, nIphiMax, nIetaMax, iphiCellMax, ietaCellMax);
265 if(GetCell(absIdMax)==0) {
266 cell = new AliEMCALCell(absIdMax, Form("sm%2.2i:phi%2.2i:eta%2.2i(%4.4i)",nSupModMax,iphiCellMax,ietaCellMax,absIdMax));
267 SetCell(cell, absIdMax);
269 set = dynamic_cast<TFolder*>(FindObject(Form("SM%2.2i",nSupModMax)));
271 sm = new AliEMCALSuperModule(nSupModMax);
276 sm = dynamic_cast<AliEMCALSuperModule*>(set);
279 sm->AddCellToEtaRow(cell, ietaCellMax);
283 cell->SetCCfromCCTable(GetCCIn());
285 cell = GetCell(absIdMax);
286 set = dynamic_cast<TFolder*>(FindObject(Form("SM%2.2i",nm)));
287 if(set) sm = (AliEMCALSuperModule*)set;
289 if(sm == 0) assert(0);
290 if(nm != sm->GetSMNumber()) assert(0);
292 u::FillH1(sm->GetHists(), 0, mgg);
293 cell->FillEffMass(mgg);
296 //_____________________________________________________________
297 void AliEMCALFolder::FitAllSMs()
299 // Only first SM now - should be changed in the future
300 AliEMCALSuperModule *sm0 = GetSuperModule(0);
301 sm0->FitForAllCells();
302 // Get input calibration table
303 AliEMCALCalibCoefs *ccIn = GetCCIn();
305 printf("<E> no input cc \n");
308 // New calibration table
309 AliEMCALCalibCoefs *ccOut = new AliEMCALCalibCoefs(fgkCCoutName.Data(), ccIn->GetNRows());
310 AliEMCALCalibCoef *rIn=0, rOut;
311 for(Int_t i=0; i<ccIn->GetNRows(); i++){
312 rIn = ccIn->GetTable(i);
314 AliEMCALCell* cell = GetCell(rIn->fAbsId);
315 if(cell && cell->GetSupMod() == 0) { // only first module now
316 rOut.fCc = cell->GetCcOut();
324 //_____________________________________________________________
325 AliEMCALCalibCoefs* AliEMCALFolder::GetCCTable(const char* name) const
328 TObject *obj = FindObject(name);
329 if(obj) return (AliEMCALCalibCoefs*)obj;
333 //_____________________________________________________________
334 Int_t AliEMCALFolder::GetSMNumber(AliESDCaloCluster* cl)
337 static Int_t absId, nSupMod, nModule, nIphi, nIeta;
338 nSupMod = -1; // if negative something wrong
340 absId = Int_t(cl->GetDigitIndex()->At(0));
341 fGeometry->GetCellIndex(absId, nSupMod, nModule, nIphi, nIeta);
346 // Recalibration staf - Jun 18,2007
347 //_____________________________________________________________
348 AliEMCALRecPoint* AliEMCALFolder::GetRecPoint(AliESDCaloCluster *cl, AliEMCALCalibCoefs *tOld,AliEMCALCalibCoefs *tNew,
349 TList *l, Double_t deff, Double_t w0, Double_t phiSlope)
353 // Get recalibrated rec.point from ESD cluster
354 // If tNew == 0 -> get ideal calibration with adcCHANNELEC
356 static Double_t adcCHANNELEC = 0.0153; // Update 24 Apr 2007: 250./16/1024 - width of one ADC channel in GeV
357 //static Float_t ECAW0 = 4.5; // hard coded now - see AliEMCALClusterizerv1::InitParameters()
358 static Double_t eCAW0 = 5.5; // Beter case for simulation
359 Int_t ampDigi=0, indMax=-1;
360 Double_t eDigiNew=0.0, eDigiMax=0.0;
363 if(w0 > 0.5) eCAW0 = w0;
364 AliEMCALRecPoint *rp=0;
365 AliEMCALCalibCoef *rOld=0, *rNew=0;
366 // printf(" AliEMCALFolder::GetRecPoint() : RECALIBRATION : w0 %f eCAW0 %f \n", w0, eCAW0);
368 // cl->PrintClusterInfo(1);
369 const Int_t kNdg = cl->GetNumberOfDigits();
370 // const Int_t nkPrim = cl->GetNumberOfPrimaries();
372 const Short_t kPrim = cl->GetLabel();
373 const Short_t* dgAbsId = cl->GetDigitIndex()->GetArray();
374 // const UShort_t* dgAmp = cl->GetDigitAmplitude(); // This is energy - bad definition
376 rp = new AliEMCALRecPoint(""); // opt=""
377 rp->SetClusterType(AliESDCaloCluster::kEMCALClusterv1);
379 TClonesArray digits("AliEMCALDigit", kNdg);
381 ed.Set(kNdg); // resize array
382 for(Int_t i=0; i<kNdg; i++){
383 // Save just abs id and amplitude of digits which will be used for recalculation of
384 // cluster energy and position
385 absId = Int_t(dgAbsId[i]);
386 rOld = tOld->GetTable(absId);
387 //ampDigi = cl->GetTrueDigitAmplitude(i, rOld->fCc); // True amplitude
389 new(digits[i]) AliEMCALDigit(Int_t(kPrim),0, absId, ampDigi, 0.0, i, 0.0);
390 dg = (AliEMCALDigit*)digits[i];
392 if(tNew) rNew = tNew->GetTable(absId);
394 rNew = tNew->GetTable(absId);
395 eDigiNew = Double_t(ampDigi) * rNew->fCc; // Recalibrate with new cc
397 eDigiNew = Double_t(ampDigi) * adcCHANNELEC; // Ideal calibration
399 //eDigiNew = Double_t(cl->GetTrueDigitEnergy(i)); // Copy from ESD for checking
400 rp->AddDigit(*dg, Float_t(eDigiNew));
402 if(eDigiMax<eDigiNew) {
406 u::FillH1(l, 14, eDigiNew);
407 u::FillH1(l, 15, Double_t(absId));
408 //printf("<I> digit %i amp %i rOld->fCc %6.5f GeV rNew->fCc %6.5f GeV\n", i, ampDigi, rOld->fCc, rNew->fCc);
410 //printf("<I> recalibration of digits was done ! \n");
411 // rp->EvalAll(eCAW0, &digits);
412 if(indMax>=0) rp->SetIndMaxDigit(indMax);
413 if(deff > 0.0) { // for fit
414 rp->EvalLocalPositionFit(deff, eCAW0, phiSlope, &digits); // I need just position
415 } else { // get w0 and deff from parametrisation - Sep 4, 2007
416 rp->EvalLocalPosition2(&digits, ed);
420 //rp->Print("print");
424 //_____________________________________________________________
425 //void AliEMCALFolder::Save(const char *fn, const char *opt)
428 // // Jun 5, 2007; See TFileIter and StFMC.cxx
429 // // Jul 16 - added fgkDirOfRootFiles
430 // // Sep 7, 2007 - should be changed without TFileIter
432 // TString FN = fgkDirOfRootFiles;
434 // if(FN.Contains(".root")==0) FN += ".root";
435 // TFileIter f(FN.Data(),opt,"EMCAL object");
436 // UInt_t eventNum = 0; // just one object
437 // UInt_t runNumber = 0; // 0 now, - may statistics on selector
438 // f.NextEventPut(this, eventNum, runNumber);
439 // printf(" Save %s to file %s\n", GetName(), FN.Data());
441 // //if(fn || opt);//For what is this?, commented due to compilation warnings
445 //_____________________________________________________________
446 AliEMCALFolder* AliEMCALFolder::ReadFolder(const char *fn, const char *opt)
450 // Jul 16 - added fgkDirOfRootFiles
452 printf("<I> AliEMCALFolder::ReadFolder(%s,%s)\n",fn,opt);
453 AliEMCALFolder* emcal = 0;
454 TH1::AddDirectory(0); // this is obligatory
456 TString sfn = fgkDirOfRootFiles;
458 if(sfn.Contains(".root")==0) sfn += ".root";
460 TFile f(sfn.Data(),opt);
462 TList *l = f.GetListOfKeys();
463 printf("<I> The total number of the objects: %d \n File %s\n", l->GetSize(), sfn.Data());
465 TKey *key = (TKey*)l->At(0);
466 emcal = (AliEMCALFolder*)key->ReadObj();
468 if(emcal) emcal->InitAfterRead();
473 //_____________________________________________________________
474 void AliEMCALFolder::InitAfterRead()
477 fLobj = (TList*)FindObject("Objects");
479 fLhists = (TList*)fLobj->FindObject("HistsOfEmcal");
483 //_____________________________________________________________
484 void AliEMCALFolder::DrawQA(const int nsm)
490 AliEMCALSuperModule* sm = GetSuperModule(nsm);
492 TList *l = sm-> GetHists();
493 Int_t nx=2, ny=2, wh=530, ww=750;
495 TCanvas *c = new TCanvas(Form("QA_%i",GetIterationNumber()), Form("QA_%i",GetIterationNumber()),
501 TH1 *h1 = (TH1*)l->At(0);
502 sm->FitEffMassHist();
504 h1->SetAxisRange(0.03, 0.28);
508 TH1 *hccin = (TH1*)l->At(1);
509 hccin->SetAxisRange(14., 20.);
511 gStyle->SetOptStat(1111);
513 TH1 *hmass = (TH1*)l->At(3);
514 u::DrawHist(hmass, 2);
515 hmass->SetAxisRange(0.12, 0.16);
518 TH1 *hres = (TH1*)l->At(4);
519 u::DrawHist(hres, 2);
520 hres->SetAxisRange(0.05, 0.120);
524 u::DrawHist((TH1*)l->At(5), 2);
527 u::DrawHist((TH1*)l->At(6), 2);
532 //_____________________________________________________________
533 TList* AliEMCALFolder::BookHists()
537 TH1::AddDirectory(1);
539 new TH1F("00_HStat", "hist of common EMCAL statistics", 100, 0.5, 100.5);
540 new TH1F("01_EffMassAll", "effective mass of #gamma,#gamma(m_{#pi^{0}}=134.9766 MeV) - whole EMCAL", 250,0.0,0.5);
542 TList *l = AliEMCALHistoUtilities::MoveHistsToList("HistsOfEmcal", kFALSE);
544 TH1::AddDirectory(0);
548 //_____________________________________________________________
549 void AliEMCALFolder::CreateCellNtuple()
552 if(fCellNtuple) { // Already exist
553 fCellNtuple->Print();
557 Int_t bsize = int(1.e+5);
558 fCellNtuple = new TNtuple("cells","Cells Ntuple for quick analysis",
559 "fAbsId:fSupMod:fModule:fPhi:fEta:fPhiCell:fEtaCell:fCcIn:fCcOut", bsize);
560 AliEMCALCell *cell=0;
562 AliEMCALSuperModule* sm = GetSuperModule(0);
563 if(sm) printf(" TNtuple was created ! sm0 %s \n", sm->GetName());
564 for(int eta=0; eta<48; eta++) { // eta row
565 TFolder *setEta = dynamic_cast<TFolder*>(sm->FindObject(Form("ETA%2.2i",eta)));
567 printf(" ***** eta row %s ******\n", setEta->GetName());
568 TList* l = (TList*)setEta->GetListOfFolders();
569 for(int phi=0; phi<l->GetSize(); phi++) { // cycle on cells (phi directions)
570 cell = (AliEMCALCell*)l->At(phi);
572 cell->FillCellNtuple(fCellNtuple);
573 //printf(" fill cell %s : %s \n", cell->GetName(), cell->GetTitle());
578 fCellNtuple->Print();
579 fLobj->Add(fCellNtuple);
582 //_____________________________________________________________
583 void AliEMCALFolder::CreateAndFillAdditionalHists()
587 TH1::AddDirectory(0);
588 fLhists->Add(new TH1F("02_CCoutOnEdge", "cc out on edge of calorimeter (in MeV)", 70, 12., 19.));
589 fLhists->Add(new TH1F("03_CCoutInside", "cc out inside of calorimeter (in MeV)", 70, 12., 19.));
590 fLhists->Add(new TH1F("04_CCoutOnEdge2", "cc out on edge of calorimeter(2) (in MeV)", 70, 12., 19.));
593 for(Int_t i=0; i<(Int_t)fCellNtuple->GetEntries(); i++){
594 fCellNtuple->GetEvent(i);
595 args = fCellNtuple->GetArgs();
596 Int_t phi = (Int_t)args[5];
597 Int_t eta = (Int_t)args[6];
598 Double_t cc = (Double_t)args[8]*1000.;
599 if ((phi==0||phi==23) || (eta==0||eta==47)) u::FillH1(fLhists, 2, cc);
600 else if((phi==1||phi==22) || (eta==1||eta==46)) u::FillH1(fLhists, 4, cc); // next to edge
601 else u::FillH1(fLhists, 3, cc);
604 Int_t wh=530, ww=750;
605 TCanvas *c = new TCanvas("c_edge","CEDGE", 10, 10, ww, wh);
607 gStyle->SetOptStat(1100);
608 gStyle->SetOptFit(111);
609 TH1 *h1 = (TH1*)fLhists->At(3);
610 TF1 *g = u::Gausi("ccInside", 14.7, 16.4, h1);
611 g->SetLineColor(kRed);
612 h1->Fit(g,"Q+","", 14.7, 16.4);
614 h1->SetTitle("CC distribution after #pi^{0} calibration");
615 h1->SetXTitle(" MeV ");
616 h1->SetYTitle(" N ");
617 // TLatex *lat1 = u::Lat(Form("rel.width = %4.2f%%",
618 //100.*h1->GetRMS()/ h1->GetMean()), 16.5, 100., 12, 0.045);
619 //TLatex *lat2 = u::Lat(Form("rel.width = %4.2f%% (from fit)",
620 // 100.*g->GetParameter(2)/ g->GetParameter(1)), 16.5, 70., 12, 0.045);
623 TH1 *h2 = (TH1*)fLhists->At(2);
624 u::DrawHist(h2,2,1,"same",2);
627 TH1F *hccFirst = AliEMCALCalibCoefs::GetHistOfCalibTableFromDb("ccTmp");
628 u::DrawHist(hccFirst,2,1,"same",3);
631 // Ideal calibration - Jul 18, 2007
632 Double_t adcCHANNELEC = 0.0153, ccIdeal = adcCHANNELEC*1.e+3;
633 Double_t ym = h1->GetMaximum();
634 TLine *l = new TLine(ccIdeal,-ym*0.05, ccIdeal,ym*1.05);
635 l->SetLineColor(kBlue);
638 TLegend *leg = new TLegend(0.1,0.6, 0.45,0.85);
639 leg->AddEntry(hccFirst, "Initial cc ", "L");
640 leg->AddEntry(h1, "Final cc", "L");
643 le = leg->AddEntry(l, "Ideal calibration", "L");
644 le->SetTextColor(l->GetLineColor());
647 TH1 *hCcEdge = (TH1*)fLhists->At(2);
648 TH1 *hCcEdge2 = (TH1*)fLhists->At(4);
650 u::DrawHist(hCcEdge,2,kGreen,"same",1);
651 le = leg->AddEntry(hCcEdge , "Edge cell", "L");
652 le->SetTextColor(hCcEdge->GetLineColor());
654 u::DrawHist(hCcEdge2,2, 28,"same",1); // 28 - like brown
655 le = leg->AddEntry(hCcEdge2 , "Edge cell (2)", "L");
656 le->SetTextColor(hCcEdge2->GetLineColor());
657 u::DrawHist(h1,2,1,"same");
665 //_____________________________________________________________
666 void AliEMCALFolder::TestSMStruct()
668 // testing May 22, 2007
669 for(int m=0; m<12; m++) {
670 AliEMCALSuperModule *sm = new AliEMCALSuperModule(m);