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 **************************************************************************/
16 //------------------------------------------------------------------------
17 // Jet reader base class
18 // manages the reading of input for jet algorithms
19 // Authors: jgcn@mda.cinvestav.mx
20 // magali.estienne@IReS.in2p3.fr
23 // implemented standard geometry (AliEMCALGeometry) (was AliJetDummyGeo implented separately in ESDReader and AODReader
24 // local2master matrices are now get from $ALICE_ROOT/OADB/PWG4/JetReconstruction/EMCALlocal2master.root
25 // you can choose the geometry (EMCAL_COMPLETE, EMCAL_FIRSTYEARv1, etc) via SetEMCALgeo2bLoad('Name_of_Geometry') in the Readerheader
26 // different options for survey(ed) matrice are provided too
28 // OADB path changed from '../OADB/PWG4/JetReconstruction/' to '../OADB/EMCAL/'
29 // marco.bregant@subatech.in2p3.fr
30 //-------------------------------------------------------------------------
35 #include <TClonesArray.h>
36 #include <TRefArray.h>
38 #include <TGeoManager.h>
41 #include "AliJetReader.h"
42 #include "AliJetReaderHeader.h"
43 #include "AliESDEvent.h"
44 #include "AliHeader.h"
45 #include "AliEMCALGeometry.h"
46 #include "AliEMCALEMCGeometry.h"
47 #include "AliJetESDFillUnitArrayTracks.h"
48 #include "AliJetESDFillUnitArrayEMCalDigits.h"
49 #include "AliJetUnitArray.h"
50 #include "AliJetHadronCorrectionv1.h"
51 #include "AliOADBContainer.h"
55 ClassImp(AliJetReader)
57 ////////////////////////////////////////////////////////////////////////
58 AliEMCALGeometry *AliJetReader::fGeom=0;
60 AliJetReader::AliJetReader():
65 fMomentumArray(new TClonesArray("TLorentzVector",4000)),
67 fFillUnitArray(new TTask("fillUnitArray","Fill unit array jet finder")),
73 fUnitArray(new TClonesArray("AliJetUnitArray",60000)),
75 fFillUAFromTracks(new AliJetESDFillUnitArrayTracks()),
76 fFillUAFromEMCalDigits(new AliJetESDFillUnitArrayEMCalDigits()),
85 // Default constructor
86 fSignalFlag = TArrayI();
90 ////////////////////////////////////////////////////////////////////////
92 AliJetReader::~AliJetReader()
96 fMomentumArray->Delete();
97 delete fMomentumArray;
101 fUnitArray->Delete();
105 if (fFillUnitArray) {
106 delete fFillUnitArray;
115 ////////////////////////////////////////////////////////////////////////
117 void AliJetReader::ClearArray()
119 if (fMomentumArray) fMomentumArray->Clear();
120 if (fFillUnitArray) fFillUnitArray->Clear();
123 Bool_t AliJetReader::SetEMCALGeometry()
126 // Set the EMCal Geometry
129 fDebug = fReaderHeader->GetDebug();
132 Info(" SetEMCALGeometry:","was already done.. it's called just once !!");
136 if(fDebug>9) cout<<"JetReader: Setting EMCALGeometry"<<endl;
138 //path to the OADB file
141 TString myPath= fReaderHeader ->GetMyOADBfile();
144 Bool_t customFile=kFALSE;
146 if(myPath.Length()) {
147 Info(" SetEMCALGeometry","custom version of OADB file: %s",myPath.Data());
150 } else OADBfile.Form("%s/EMCAL/EMCALlocal2master.root",(const char*) fJetanOADBpath);
152 AliOADBContainer EMCALgeoCont;
153 Info(" SetEMCALGeometry"," I'm going to read the matrices from %s",OADBfile.Data());
154 TObjArray *EmcalMatrArray;
155 if(fDebug>19) cout<<"array definito"<<endl;
157 EMCALgeoCont.InitFromFile((char*) OADBfile.Data(),"AliEMCALgeo");
158 EMCALgeoCont.GetDefaultList()->Print();
160 const char* geoType= fReaderHeader -> GetEMCALgeo2bLoad();
161 if(fDebug>19) cout<<"geometry: "<<geoType<<endl;
163 const char* loc2master = ((AliJetESDReaderHeader*) fReaderHeader)->GetEMCALmatrices2bLoad();
164 if(fDebug>19) cout<<"matrices: "<<loc2master<<endl;
167 if(fDebug>9) cout<<"geometry type is: "<<geoType<<endl;
168 if(fDebug>9) cout<<"survey matrices are: "<<loc2master<<endl;
170 // some crosschecks to avoid not existing cases
171 if(!(!strcmp(geoType, "EMCAL_COMPLETE") || !strcmp(geoType, "EMCAL_COMPLETEV1") || !strcmp(geoType, "EMCAL_FIRSTYEARV1")) )
172 Warning(" SetEMCALGeometry","%s is not a known good geometry! either your are using an old one or everything will crash right now!",geoType);
174 if(! (!strcmp(loc2master, "survey10") || !strcmp(loc2master, "survey11") || !strcmp(loc2master, "ideal") || !strcmp(loc2master, "test")) ) {
175 Warning(" SetEMCALGeometry"," %s is not one of the allowed cases (listed few lines above) !!----!!!", loc2master);
176 loc2master="survey11";
177 Warning(" SetEMCALGeometry"," to avoid crashes, your decision has been overrulled!, matrices '%s' will be used instead",loc2master);
178 if(fDebug>9) cout<<"survey matrices are (new, after overrulling): "<<loc2master<<endl;
182 // some warning for not so orthodox combination
183 if(!strcmp(geoType, "EMCAL_COMPLETE"))
184 Warning(" SetEMCALGeometry:", "!!----!! this geometry contains wrong tilt angles for stripmodules.. are you really sure? please consider using EMCAL_COMPLETEV1 !! ---!! ");
185 if( !strcmp(loc2master, "survey11") && strcmp(geoType, "EMCAL_COMPLETEV1") )
186 Warning(" SetEMCALGeometry:", "!!----!! survey11 matrices should be used with EMCAL_COMPLETEV1 geometry !!---!!");
187 if( !strcmp(loc2master, "survey10") && strcmp(geoType, "EMCAL_FIRSTYEARV1") )
188 Warning(" SetEMCALGeometry", "!!----!! survey10 matrices should be used ONLY with EMCAL_FIRSTYEARV1 geometry!!");
189 if(!strcmp(loc2master,"ideal"))
190 Warning(" SetEMCALGeometry","!!----!! ideal matrices are without any survey (misalignment correction)... is it really what you want?");
191 if(!strcmp(loc2master,"test") && !customFile)
192 Warning(" SetEMCALGeometry","!!----!! 'test' matrices will be used. but it seems you didn't provide a custom version of OADB file, the default 'test' is as 'ideal', no survey (misalignment correction) !!----!!");
193 if(!strcmp(loc2master,"test") && customFile)
194 Info(" SetEMCALGeometry"," !!----!! 'test' matrices read from the custom file you provided !!----!!");
196 EmcalMatrArray=(TObjArray*)EMCALgeoCont.GetObject(100,(char*) loc2master);
199 // Define EMCAL geometry
201 if(fDebug>10) cout<<"which EMCALgeometry is going to be uploaded?"<<geoType<<endl;
202 fGeom = AliEMCALGeometry::GetInstance(geoType);
205 for (Int_t mod=0;mod<(fGeom->GetEMCGeometry())->GetNumberOfSuperModules();mod+=1)
207 fGeom->SetMisalMatrix(((TGeoHMatrix*) EmcalMatrArray->At(mod)),mod);
208 if(fDebug>9) cout<<"and the matrix is: SM "<<mod<<" (to print the matrix, fDebug>11!) "<<endl;
210 cout<<"print the matrix, (will it work?)"<<endl;
211 ((TGeoHMatrix*) EmcalMatrArray->At(mod))->Print();
212 cout<<"if you read that, it did!"<<endl;
216 Info("\n SetEMCALGeometry:"," EMCal Geometry set ! \n");