]>
Commit | Line | Data |
---|---|---|
9dc4f671 | 1 | // #include <Riostream.h> |
2 | // #include <TChain.h> | |
3 | // #include <TVectorT.h> | |
4 | // #include <TVector3.h> | |
5 | // #include <TFile.h> | |
6 | // #include <TH1.h> | |
7 | // #include <TClonesArray.h> | |
8 | // #include <TObjArray.h> | |
9 | // #include <TObjString.h> | |
10 | // #include <TFormula.h> | |
11 | // #include <TString.h> | |
12 | // #include <TRefArray.h> | |
13 | // #include <TNtuple.h> | |
14 | // #include <TArrayF.h> | |
15 | ||
16 | ||
17 | #include "AliJFilter.h" | |
18 | #include "AliAnalysisManager.h" | |
19 | #include "AliAnalysisTaskSE.h" | |
20 | #include "AliESDEvent.h" | |
21 | #include "AliMCEvent.h" | |
22 | #include "AliStack.h" | |
23 | #include "AliGenEventHeader.h" | |
24 | #include "AliGenCocktailEventHeader.h" | |
25 | #include "AliGenPythiaEventHeader.h" | |
26 | #include "AliInputEventHandler.h" | |
27 | #include "AliESDCaloCluster.h" | |
28 | #include "AliAODEvent.h" | |
29 | #include "AliAODHeader.h" | |
30 | #include "AliAODHandler.h" | |
31 | #include "AliLog.h" | |
32 | #include "AliESDVertex.h" | |
33 | #include "AliESDtrack.h" | |
34 | #include "AliAODTrack.h" | |
35 | #include "AliAnalysisFilter.h" | |
36 | #include "AliESDtrackCuts.h" | |
37 | #include "AliAODVertex.h" | |
38 | #include "AliAODTracklets.h" | |
39 | #include "AliAODPid.h" | |
40 | #include "AliAODMCHeader.h" | |
41 | #include "AliAODMCParticle.h" | |
42 | #include "AliESDUtils.h" | |
43 | //#include "AliESDVZERO.h" | |
44 | #include "AliCentrality.h" | |
45 | #include "AliAODTracklets.h" | |
46 | #include "AliMultiplicity.h" | |
47 | #include "AliJConst.h" | |
48 | #include "AliESDRun.h" | |
49 | #include "AliDAQ.h" | |
50 | #include "AliESDVZERO.h" | |
51 | #include "AliExternalTrackParam.h" | |
52 | #include "AliHeader.h" | |
53 | //== EMCAL | |
54 | #include "AliESDCaloCluster.h" | |
55 | #include "AliEMCALGeometry.h" | |
56 | #include "AliVCluster.h" | |
57 | #include "AliVCaloCells.h" | |
58 | #include "AliEMCALRecoUtils.h" | |
59 | #include "AliEMCALPIDUtils.h" | |
60 | ||
61 | #include "AliJTrack.h" | |
62 | #include "AliJMCTrack.h" | |
63 | #include "AliJPhoton.h" | |
64 | //#include "AliJCaloCell.h" | |
65 | #include "AliJEventHeader.h" | |
66 | #include "AliJRunHeader.h" | |
67 | ||
68 | #include "AliPIDResponse.h" | |
69 | #include "AliPIDCombined.h" | |
70 | #include "AliPHOSGeoUtils.h" | |
71 | #include "AliAnalysisUtils.h" | |
72 | ||
73 | ||
74 | ClassImp(AliJFilter); | |
75 | ||
76 | //______________________________________________________________________________ | |
77 | AliJFilter::AliJFilter() : | |
78 | TNamed(), | |
79 | fEsdTrackCuts(0x0), | |
80 | fESDFilter(0x0), | |
81 | fIsRealOrMC(0), | |
82 | fStoreEventPlaneSource(0), | |
83 | fOADBPath(), | |
84 | fCaloClustersArr(0), | |
85 | fClusterThreshold(0), | |
86 | fTrackThreshold(0), | |
87 | fEventSuccess(0), | |
88 | fMcMap(0), | |
89 | fTrackList(0), | |
90 | fMCTrackList(0x0), | |
91 | fPhotonList(0x0), | |
92 | fCaloCellList(0x0), | |
93 | fHeaderList(0x0), | |
94 | fRunInfoList(0x0), | |
95 | fPIDResponse(0x0), | |
96 | fPIDCombined(0x0), | |
97 | fVZEROData(0x0), | |
98 | fTZEROData(0x0), | |
99 | //fFMDData(0x0), | |
100 | fZDCData(0x0), | |
101 | fEMCLabels(0), | |
102 | fEMCTreeLabels(0), | |
103 | fAliJRunHeader(0x0), | |
104 | fEMCALGeometry(0x0), | |
105 | fEMCALRecoUtils(0x0), | |
106 | fPHOSGeom(0x0), | |
107 | fAnaUtils(0x0), | |
108 | fMyTask(0x0) | |
109 | { | |
110 | //Default constructor | |
111 | } | |
112 | ||
113 | //______________________________________________________________________________ | |
114 | AliJFilter::AliJFilter(const char *name,AliAnalysisTaskSE *task): | |
115 | TNamed(name,name), | |
116 | fEsdTrackCuts(0x0), | |
117 | fESDFilter(0x0), | |
118 | fIsRealOrMC(0), | |
119 | fStoreEventPlaneSource(0), | |
120 | fOADBPath(), | |
121 | fCaloClustersArr(0), | |
122 | fClusterThreshold(0), | |
123 | fTrackThreshold(0), | |
124 | fEventSuccess(0), | |
125 | fMcMap(0), | |
126 | fTrackList(0), | |
127 | fMCTrackList(0x0), | |
128 | fPhotonList(0x0), | |
129 | fCaloCellList(0x0), | |
130 | fHeaderList(0x0), | |
131 | fRunInfoList(0x0), | |
132 | fPIDResponse(0x0), | |
133 | fPIDCombined(0x0), | |
134 | fVZEROData(0x0), | |
135 | fTZEROData(0x0), | |
136 | //fFMDData(0x0), | |
137 | fZDCData(0x0), | |
138 | fEMCLabels(0), | |
139 | fEMCTreeLabels(0), | |
140 | fAliJRunHeader(0x0), | |
141 | fEMCALGeometry(0x0), | |
142 | fEMCALRecoUtils(0x0), | |
143 | fPHOSGeom(0x0), | |
144 | fAnaUtils(0x0), | |
145 | fMyTask(0x0) | |
146 | { | |
147 | // Constructor | |
148 | if(task->DebugLevel() > 5) cout << "---- AliJFilter Constructor ----"<<endl; | |
149 | ||
150 | } | |
151 | ||
152 | //____________________________________________________________________________ | |
153 | AliJFilter::AliJFilter(const AliJFilter& ap) : | |
154 | TNamed(ap.GetName(), ap.GetTitle()), | |
155 | fEsdTrackCuts(ap.fEsdTrackCuts), | |
156 | fESDFilter(ap.fESDFilter), | |
157 | fIsRealOrMC(ap.fIsRealOrMC), | |
158 | fStoreEventPlaneSource(ap.fStoreEventPlaneSource), | |
159 | fOADBPath(ap.fOADBPath), | |
160 | fCaloClustersArr(ap.fCaloClustersArr), | |
161 | fClusterThreshold(ap.fClusterThreshold), | |
162 | fTrackThreshold(ap.fTrackThreshold), | |
163 | fEventSuccess(ap.fEventSuccess), | |
164 | fMcMap(ap.fMcMap), | |
165 | fTrackList(ap.fTrackList), | |
166 | fMCTrackList(ap.fMCTrackList), | |
167 | fPhotonList(ap.fPhotonList), | |
168 | fCaloCellList(ap.fCaloCellList), | |
169 | fHeaderList(ap.fHeaderList), | |
170 | fRunInfoList(ap.fRunInfoList), | |
171 | fPIDResponse(ap.fPIDResponse), | |
172 | fPIDCombined(ap.fPIDCombined), | |
173 | fVZEROData(ap.fVZEROData), | |
174 | fTZEROData(ap.fTZEROData), | |
175 | //fFMDData(ap.fFMDData), | |
176 | fZDCData(ap.fZDCData), | |
177 | fEMCLabels(ap.fEMCLabels), | |
178 | fEMCTreeLabels(ap.fEMCTreeLabels), | |
179 | fAliJRunHeader(ap.fAliJRunHeader), | |
180 | fEMCALGeometry(ap.fEMCALGeometry), | |
181 | fEMCALRecoUtils(ap.fEMCALRecoUtils), | |
182 | fPHOSGeom(ap.fPHOSGeom), | |
183 | fAnaUtils(ap.fAnaUtils), | |
184 | fMyTask(ap.fMyTask) | |
185 | { | |
186 | // cpy ctor | |
187 | } | |
188 | ||
189 | //_____________________________________________________________________________ | |
190 | AliJFilter& AliJFilter::operator = (const AliJFilter& ap) | |
191 | { | |
192 | // assignment operator | |
193 | ||
194 | this->~AliJFilter(); | |
195 | new(this) AliJFilter(ap); | |
196 | return *this; | |
197 | } | |
198 | ||
199 | //______________________________________________________________________________ | |
200 | AliJFilter::~AliJFilter() | |
201 | { | |
202 | // destructor | |
203 | delete fMcMap; | |
204 | delete fTrackList; | |
205 | delete fMCTrackList; | |
206 | delete fPhotonList; | |
207 | delete fCaloCellList; | |
208 | delete fHeaderList; | |
209 | delete fAliJRunHeader; | |
210 | delete fRunInfoList; | |
211 | delete fPIDResponse; | |
212 | delete fPIDCombined; | |
213 | delete fEMCALRecoUtils; | |
214 | delete fEMCALGeometry; | |
215 | delete fPHOSGeom; | |
216 | delete fAnaUtils; | |
217 | delete fVZEROData; | |
218 | delete fTZEROData; | |
219 | delete fZDCData; | |
220 | // delete fFMDData; | |
221 | ||
222 | ||
223 | } | |
224 | ||
225 | //________________________________________________________________________ | |
226 | ||
227 | void AliJFilter::UserCreateOutputObjects() | |
228 | { | |
229 | //=== create the jcorran outputs objects | |
230 | if(fMyTask->DebugLevel() > 1) printf("AliJFilter::UserCreateOutPutData() \n"); | |
231 | ||
232 | //== RUN HEADER | |
233 | cout<<"TEST2 "<<fAliJRunHeader<<endl; | |
234 | if(!fAliJRunHeader) fAliJRunHeader = new AliJRunHeader(); | |
235 | fRunInfoList = new TList(); | |
236 | fRunInfoList->SetName("RunInfoList"); | |
237 | fRunInfoList->SetOwner(); | |
238 | fRunInfoList->Clear(); | |
239 | fRunInfoList->Add(fAliJRunHeader); | |
240 | ||
241 | //=== Other Objects | |
242 | fCaloClustersArr = new TRefArray(); | |
243 | fEMCALGeometry = AliEMCALGeometry::GetInstance("EMCAL_COMPLETEV1"); | |
244 | fEMCALRecoUtils = new AliEMCALRecoUtils(); | |
245 | fPHOSGeom = new AliPHOSGeoUtils(); | |
246 | fAnaUtils = new AliAnalysisUtils(); | |
247 | fAnaUtils->SetUseOutOfBunchPileUp( kTRUE ); | |
248 | fMcMap = new TArrayI(); | |
249 | ||
250 | //=== Set Tree and TClonesArray | |
251 | //== TRACKS | |
252 | AddList("AliJTrackList", "AliJTrack", &fTrackList, 1000); | |
253 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
254 | AddList("AliJPhotonList", "AliJPhoton", &fPhotonList, 1000); | |
255 | //BS AddList("AliJCaloCell", "AliJCaloCell", &fCaloCellList, 1000); | |
256 | } | |
257 | if( IsMC() ) | |
258 | AddList("AliJMCTrackList", "AliJMCTrack", &fMCTrackList, 1000); | |
259 | //== Event Header | |
260 | AddList("AliJEventHeaderList", "AliJEventHeader", &fHeaderList, 1000); | |
261 | ||
262 | //== EventPlane SRC | |
263 | if( fAliJRunHeader->GetStoreEventPlaneSource() ){ | |
264 | fVZEROData = new AliESDVZERO; | |
265 | fTZEROData = new AliESDTZERO; | |
266 | fZDCData = new AliESDZDC; | |
267 | } | |
268 | //== PID | |
269 | // fPIDCombined = new AliPIDCombined; | |
270 | // fPIDCombined->SetDefaultTPCPriors(); | |
271 | // fPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF); | |
272 | // fPIDResponse = ((AliInputEventHandler*) (man->GetInputEventHandler()))->GetPIDResponse(); | |
273 | // fPIDResponse->SetOADBPath(AliAnalysisManager::GetOADBPath()); | |
274 | // if (!fOADBPath.IsNull()) fPIDResponse->SetOADBPath(fOADBPath.Data()); | |
275 | ||
276 | cout << "Add(fAliJRunHeader) in UserCreateObject() ======= " << endl; | |
277 | ||
278 | } | |
279 | ||
280 | //______________________________________________________________________________ | |
281 | void AliJFilter::UserExec(Option_t* /*option*/) | |
282 | { | |
283 | // user loop | |
284 | AliJRunHeader *runh = fAliJRunHeader; | |
285 | Bool_t hasGoodTrack, hasGoodCluster; | |
286 | ||
287 | fEventSuccess = kFALSE; | |
288 | ||
289 | // Processing of one event | |
290 | DEBUG( 5, 1, "------- AliJFilter Exec-------" ); | |
291 | if(!((fMyTask->Entry()-1)%100)) AliInfo(Form(" Processing event # %lld", fMyTask->Entry())); | |
292 | ||
293 | //=== Init Variables | |
294 | fTrackList->Clear(); | |
295 | if( IsMC() ){ | |
296 | fMCTrackList->Clear(); | |
297 | fEMCLabels.clear(); | |
298 | fEMCTreeLabels.clear(); | |
299 | } | |
300 | ||
301 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
302 | fPhotonList->Clear("C"); | |
303 | fCaloCellList->Clear(); | |
304 | } | |
305 | fHeaderList->Clear(); | |
306 | ||
307 | hasGoodCluster = kTRUE; | |
308 | hasGoodTrack = kTRUE; | |
309 | ||
310 | //=== CHECK ESD, AOD, MC event | |
311 | if( !Event() ) return; | |
312 | ||
313 | if( FromESD() ) { //Reading ESD | |
314 | DEBUG( 5, 1, "\t------- Start ESD " ); | |
315 | if( !ESDEvent() ) return; | |
316 | if( runh->GetWithoutSDD() && !(ESDEvent()->GetTriggerMask() & (1<<13)) ) return; | |
317 | ||
318 | if( IsMC() ){ | |
319 | if( ! MCEvent() ) return; | |
320 | } | |
321 | } | |
322 | ||
323 | if( FromAOD() ) { | |
324 | DEBUG( 5, 1, "\t------- Start AOD " ); | |
325 | if( !AODEvent() ) return; | |
326 | } | |
327 | ||
328 | ||
329 | // pileup rejection | |
330 | if( fAnaUtils->IsPileUpEvent( Event() )) | |
331 | return; | |
332 | ||
333 | //--------------------------------------------------------------- | |
334 | // RUN Header | |
335 | //--------------------------------------------------------------- | |
336 | if(!runh->GetRunNumber()){ //new run has started : I suppose no change of run in process | |
337 | runh->SetRunNumber( Event()->GetRunNumber() ); | |
338 | if( FromESD() ){ | |
339 | //==== General ====// | |
340 | runh->SetBeamEnergy( ESDEvent()->GetBeamEnergy() ); | |
341 | runh->SetBeamType( ESDEvent()->GetBeamType() ); | |
342 | //==== Detector status ==// | |
343 | if( ESDEvent()->GetCurrentL3() > 0 ) runh->SetL3MagnetFieldPolarity(1); | |
344 | if( ESDEvent()->GetCurrentL3() < 0 ) runh->SetL3MagnetFieldPolarity(-1); | |
345 | runh->SetL3MagnetFieldIntensity( ESDEvent()->GetMagneticField() ); | |
346 | runh->SetCurrentL3( ESDEvent()->GetCurrentL3() ); | |
347 | runh->SetCurrentDip( ESDEvent()->GetCurrentDip() ); | |
348 | runh->SetUniformBMap( ESDEvent()->IsUniformBMap() ); | |
349 | //==== Triggers ====// | |
350 | const AliESDRun* esdRun = ESDEvent()->GetESDRun(); | |
351 | for(Int_t triggerBit=0; triggerBit<kRangeTriggerTableAlice; triggerBit++){ | |
352 | runh->SetActiveTriggersAlice( triggerBit, esdRun->GetTriggerClass(triggerBit) ); | |
353 | } | |
354 | } | |
355 | else if( FromAOD() ){ | |
356 | //==== General ====// | |
357 | cout << "Run # = "<< AODEvent()->GetRunNumber() << endl; | |
358 | runh->SetRunNumber( AODEvent()->GetRunNumber() ); | |
359 | //TODO runh->SetBeamEnergy( ESDEvent()->GetBeamEnergy() ); | |
360 | //TODO runh->SetBeamType( ESDEvent()->GetBeamType() ); | |
361 | //==== Detector status ==// | |
362 | //TODO runh->Setl3MgFieldPolarity(1); | |
363 | runh->SetL3MagnetFieldIntensity( AODEvent()->GetMagneticField() ); | |
364 | runh->SetCurrentL3( AODEvent()->GetMagneticField()*30000.0/5.00668 ); | |
365 | runh->SetCurrentDip( AODEvent()->GetMuonMagFieldScale()*6000.0 ); | |
366 | runh->SetUniformBMap( kFALSE ); // TODO is this? | |
367 | } | |
368 | cout << "Add(fAliJRunHeader) is done =============" << endl; | |
369 | } | |
370 | ||
371 | //--------------------------------------------------------------- | |
372 | // EventHeader and read Others | |
373 | //--------------------------------------------------------------- | |
374 | if( FromESD() ){ //Reading ESD | |
375 | DEBUG( 5, 1, "\t------- Start READ ESD " ); | |
376 | ||
377 | ReadESDHeader( ESDEvent() ); | |
378 | ReadESDTracks( ESDEvent() ); | |
379 | ||
380 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
381 | ReadESDCaloClusters( ESDEvent() ); | |
382 | ReadESDCaloCells( ESDEvent() ); | |
383 | } | |
384 | if( IsMC() ){ | |
385 | ReadMCTracksFromESD(); | |
386 | //RemapMCLabels(); | |
387 | } | |
388 | }else if( FromAOD() ){ | |
389 | DEBUG( 5, 1, "\t------- Start READ AOD " ); | |
390 | ReadAODHeader( AODEvent() ); | |
391 | ReadAODTracks( AODEvent() ); | |
392 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
393 | ReadAODCaloClusters( AODEvent() ); | |
394 | ReadAODCaloCells( AODEvent() ); | |
395 | } | |
396 | if( IsMC() ){ | |
397 | ReadMCTracksFromAOD(); | |
398 | //RemapMCLabels(); | |
399 | } | |
400 | ||
401 | }else{ | |
402 | cout << "Error: Not correct InputDataFormat especified " << endl; | |
403 | return; | |
404 | } | |
405 | ||
406 | if( hasGoodCluster || hasGoodTrack ){ | |
407 | //=== TODO : need this? | |
408 | AliAODHandler* outputHandler = | |
409 | (AliAODHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler()); | |
410 | outputHandler->SetFillAOD(kTRUE); | |
411 | outputHandler->SetFillExtension(kTRUE); | |
412 | fEventSuccess = kTRUE; | |
413 | } | |
414 | else{ | |
415 | fTrackList->Clear(); | |
416 | if( IsMC() ){ | |
417 | fMCTrackList->Clear(); | |
418 | fEMCLabels.clear(); | |
419 | fEMCTreeLabels.clear(); | |
420 | } | |
421 | ||
422 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
423 | fPhotonList->Clear("C"); | |
424 | fCaloCellList->Clear(); | |
425 | } | |
426 | fHeaderList->Clear(); | |
427 | } | |
428 | ||
429 | DEBUG( 5, 1, "\t------- End UserExec " ); | |
430 | } | |
431 | ||
432 | //______________________________________________________________________________ | |
433 | void AliJFilter::Init() | |
434 | { | |
435 | // Intialisation of parameters | |
436 | AliInfo("Doing initialization") ; | |
437 | ||
438 | // TString formula(fEsdTrackCuts->GetMaxDCAToVertexXYPtDep()); | |
439 | // if(formula.Length()>0){ // momentum dep DCA cut for AOD | |
440 | // formula.ReplaceAll("pt","x"); | |
441 | // } | |
442 | } | |
443 | ||
444 | //______________________________________________________________________________ | |
445 | void AliJFilter::Terminate(Option_t *) | |
446 | { | |
447 | // termination | |
448 | fTrackList->Clear(); | |
449 | if( IsMC() ) fMCTrackList->Clear(); | |
450 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
451 | fPhotonList->Clear(); | |
452 | fCaloCellList->Clear(); | |
453 | } | |
454 | fHeaderList->Clear(); | |
455 | ||
456 | // Processing when the event loop is ended | |
457 | cout<<"PWG4JCORRAN Analysis DONE !!"<<endl; | |
458 | ||
459 | } | |
460 | ||
461 | //______________________________________________________________________________ | |
462 | void AliJFilter::ReadESDTracks(AliESDEvent * esd) | |
463 | //void AliJFilter::ReadESDTracks(const AliESDEvent * esd) | |
464 | { | |
465 | // Read the AliESDtrack and fill the list of AliJTrack containers | |
466 | Int_t nt = esd->GetNumberOfTracks(); | |
467 | DEBUG( 5, 1 , Form("ESD::NumberOfTracks = %d",nt), "AliJFilter::ReadESDTracks" ); | |
468 | ||
469 | //==== Prepare TPC, GCG track ====// | |
470 | Float_t ptMaxTPC = 0; | |
471 | Float_t ptMinTPC = 1E10; | |
472 | Float_t ptMaxGCG = 0; | |
473 | Float_t ptMinGCG = 1E10; | |
474 | for(int i = 0;i<32;i++){ | |
475 | AliESDtrackCuts* cuts = (AliESDtrackCuts*)fESDFilter->GetCuts()->At(i); | |
476 | if(!cuts) continue; | |
477 | Float_t tmp1= 0,tmp2 = 0; | |
478 | cuts->GetPtRange(tmp1,tmp2); | |
479 | if( TESTBIT ( fAliJRunHeader->GetStoreTPCTrackBitMask(), i ) ){ | |
480 | if(tmp1<ptMinTPC)ptMinTPC=tmp1; | |
481 | if(tmp2>ptMaxTPC)ptMaxTPC=tmp2; | |
482 | } | |
483 | if( TESTBIT(fAliJRunHeader->GetStoreGCGTrackBitMask() , i ) ){ | |
484 | if(tmp1<ptMinGCG)ptMinGCG=tmp1; | |
485 | if(tmp2>ptMaxGCG)ptMaxGCG=tmp2; | |
486 | } | |
487 | } | |
488 | ||
489 | //==== loop over tracks ====// | |
490 | for(Int_t it = 0; it < nt; it++) { | |
491 | ||
492 | AliESDtrack *track = esd->GetTrack(it); | |
493 | if( !track ) continue; | |
494 | UInt_t filterMap = fESDFilter->IsSelected( track ); | |
495 | if(! filterMap ) continue; // apply track selection criteria | |
496 | ||
497 | //====create a new AliJTrack and fill the track info | |
498 | AliJTrack * ctrack = new( (*fTrackList)[fTrackList->GetEntriesFast()] ) AliJTrack; | |
499 | ctrack->SetPxPyPzE(track->Px(), track->Py(), track->Pz(), 0 ); | |
500 | Double32_t pos[3]; | |
501 | track->GetXYZ(pos); | |
502 | ctrack->SetTrackPos( pos ); | |
503 | ctrack->SetTPCdEdx( track->GetTPCsignal() ); | |
504 | ctrack->SetParticleType(kJNone); | |
505 | ctrack->SetCharge(track->Charge()); | |
506 | ctrack->SetFilterMap( filterMap ); | |
507 | ctrack->SetLabel( track->GetLabel() ); | |
508 | ||
509 | ReadESDPID( track, ctrack ); | |
510 | //==== TPC Tracks ====// | |
511 | if( filterMap & fAliJRunHeader->GetStoreTPCTrackBitMask() ) { | |
512 | ConvertESDTPCOnlyTracks( esd, it, ctrack, ptMinTPC, ptMaxTPC ); | |
513 | } | |
514 | //==== GCG Tracks ====// | |
515 | if( filterMap & fAliJRunHeader->GetStoreGCGTrackBitMask() ) { | |
516 | ConvertESDGCGTracks( esd, it, ctrack, ptMinGCG, ptMaxGCG ); | |
517 | } | |
518 | ||
519 | Float_t b[2]; | |
520 | Float_t bCov[3]; | |
521 | track->GetImpactParameters(b,bCov); | |
522 | // ctrack->SetDCAtoVertexXY( b[0] ); | |
523 | // ctrack->SetDCAtoVertexZ( b[1] ); | |
524 | ||
525 | //if( track->P()>1 ) DEBUG( 5, 1, Form("P = %f", track->P() ) ) ; | |
526 | ||
527 | } // end tracks loop | |
528 | } | |
529 | ||
530 | //______________________________________________________________________________ | |
531 | void AliJFilter::ConvertESDTPCOnlyTracks(AliESDEvent* esd, int iTrack, AliJTrack * ctrack, double ptmin, double ptmax) | |
532 | { | |
533 | ||
534 | const AliESDVertex *vtxSPD = esd->GetPrimaryVertexSPD(); | |
535 | ||
536 | Double_t pos[3] = { 0. }; | |
537 | Double_t covTr[21]={0.}; | |
538 | //Double_t pid[10]={0.}; | |
539 | ||
540 | Double_t p[3] = { 0. }; | |
541 | ||
542 | Double_t pDCA[3] = { 0. }; // momentum at DCA | |
543 | Double_t rDCA[3] = { 0. }; // position at DCA | |
544 | Float_t dDCA[2] = {0.}; // DCA to the vertex d and z | |
545 | Float_t cDCA[3] = {0.}; // covariance of impact parameters | |
546 | ||
547 | ||
548 | AliESDtrack* esdTrack = esd->GetTrack(iTrack); //carefull do not modify it othwise need to work with a copy | |
549 | ||
550 | // Track selection | |
551 | ||
552 | AliESDtrack *track = AliESDtrackCuts::GetTPCOnlyTrack(const_cast<AliESDEvent*>(esd),esdTrack->GetID()); | |
553 | if(!track) return; | |
554 | ||
555 | if(track->Pt()>0.) | |
556 | { | |
557 | // only constrain tracks above threshold | |
558 | AliExternalTrackParam exParam; | |
559 | // take the B-field from the ESD, no 3D fieldMap available at this point | |
560 | Bool_t relate = false; | |
561 | relate = track->RelateToVertexTPC(vtxSPD,esd->GetMagneticField(),kVeryBig,&exParam); | |
562 | if(!relate){ | |
563 | delete track; | |
564 | return; | |
565 | } | |
566 | // fetch the track parameters at the DCA (unconstraint) | |
567 | if(track->GetTPCInnerParam()){ | |
568 | track->GetTPCInnerParam()->GetPxPyPz(pDCA); | |
569 | track->GetTPCInnerParam()->GetXYZ(rDCA); | |
570 | } | |
571 | // get the DCA to the vertex: | |
572 | track->GetImpactParametersTPC(dDCA,cDCA); | |
573 | // set the constrained parameters to the track | |
574 | track->Set(exParam.GetX(),exParam.GetAlpha(),exParam.GetParameter(),exParam.GetCovariance()); | |
575 | } | |
576 | ||
577 | track->GetPxPyPz(p); | |
578 | ||
579 | double p2[3]; | |
580 | esdTrack->GetInnerPxPyPz(p2); | |
581 | ||
582 | Float_t pT = track->Pt(); | |
583 | if(pT<ptmin||pT>ptmax){ | |
584 | delete track; | |
585 | return; | |
586 | } | |
587 | ||
588 | track->GetXYZ(pos); | |
589 | track->GetCovarianceXYZPxPyPz(covTr); | |
590 | ||
591 | ctrack->SetTPCTrack(p[0], p[1], p[2]); | |
592 | ||
593 | delete track; | |
594 | } | |
595 | ||
596 | ||
597 | void AliJFilter::ConvertESDGCGTracks(AliESDEvent *esd, int iTrack, AliJTrack *ctrack, double ptMin, double ptMax) | |
598 | { | |
599 | ||
600 | Double_t pos[3] = { 0. }; | |
601 | Double_t covTr[21]={0.}; | |
602 | Double_t p[3] = { 0. }; | |
603 | ||
604 | Double_t pDCA[3] = { 0. }; // momentum at DCA | |
605 | Double_t rDCA[3] = { 0. }; // position at DCA | |
606 | Float_t dDCA[2] = {0.}; // DCA to the vertex d and z | |
607 | Float_t cDCA[3] = {0.}; // covariance of impact parameters | |
608 | ||
609 | ||
610 | AliESDtrack* esdTrack = esd->GetTrack(iTrack); //carefull do not modify it othwise need to work with a copy | |
611 | const AliExternalTrackParam * exParamGC = esdTrack->GetConstrainedParam(); | |
612 | if(!exParamGC) return; | |
613 | ||
614 | // fetch the track parameters at the DCA (unconstrained) | |
615 | esdTrack->GetPxPyPz(pDCA); | |
616 | esdTrack->GetXYZ(rDCA); | |
617 | // get the DCA to the vertex: | |
618 | esdTrack->GetImpactParameters(dDCA,cDCA); | |
619 | ||
620 | if (!esdTrack->GetConstrainedPxPyPz(p)) return; | |
621 | ||
622 | ||
623 | Float_t pT = exParamGC->Pt(); | |
624 | if(pT<ptMin||pT>ptMax){ | |
625 | return; | |
626 | } | |
627 | ||
628 | esdTrack->GetConstrainedXYZ(pos); | |
629 | exParamGC->GetCovarianceXYZPxPyPz(covTr); | |
630 | ||
631 | ctrack->SetGCGTrack(p[0], p[1], p[2]); | |
632 | } | |
633 | ||
634 | ||
635 | ||
636 | //_________________________________________________________________________________- | |
637 | void AliJFilter::ReadESDPID(AliESDtrack *track, AliJTrack *ctrack) | |
638 | { | |
639 | // To reduce the size of output, the variables which cannot be calculated later are only kept | |
640 | // expected TOF signal, TPC momentum for expected TPC signal. Measured values are stored in ReadESDTrack() | |
641 | // 1. expected TOF signal | |
642 | Double_t times[AliPID::kSPECIES]; | |
643 | track->GetIntegratedTimes(times); | |
644 | for(int ip=0; ip < (AliJTrack::kNAliJTrkPID); ip++) { | |
645 | ctrack->SetExpectedTOFsignal(AliJTrack::AliJTrkPID(ip), times[ip]); | |
646 | ||
647 | } | |
648 | // 2. TPC momentum | |
649 | Double_t momTPC = track->GetTPCmomentum(); | |
650 | ctrack->SetTPCmomentum(momTPC); | |
651 | } | |
652 | ||
653 | //______________________________________________________________________________ | |
654 | Bool_t AliJFilter::ReadAODTracks(const AliAODEvent * aod) | |
655 | { | |
656 | // AOD track reader | |
657 | Bool_t hasGoodTrack; | |
658 | hasGoodTrack = kFALSE; | |
659 | ||
660 | // Read the AliAODtrack and fill the list of AliJTrack containers | |
661 | Int_t nt = aod->GetNumberOfTracks(); | |
662 | Int_t listnt = 0; | |
663 | ||
664 | DEBUG(5, 1, Form("AOD::NumberOfTracks = %d",nt) ); | |
665 | ||
666 | //==== loop over tracks ====// | |
667 | for(Int_t it = 0; it < nt; it++) { | |
668 | ||
319e6239 | 669 | AliAODTrack *track = dynamic_cast<AliAODTrack*>(aod->GetTrack(it)); |
670 | if(!track) AliFatal("Not a standard AOD track"); | |
9dc4f671 | 671 | //if(track->GetFilterMap() & (1 << 7) ) continue; |
672 | //if(!AcceptAODTrack(track)) continue; | |
673 | //if(! fEsdTrackCuts->IsSelected(track)) continue; //apply loose selection criteria | |
674 | //FK//if(track->GetType() != AliAODTrack::kPrimary) continue; // only primaries | |
675 | // | |
676 | ||
677 | AliJTrack * ctrack = new( (*fTrackList)[listnt++] ) AliJTrack; | |
678 | ctrack->SetID( track->GetID() ); | |
679 | ctrack->SetPxPyPzE(track->Px(), track->Py(), track->Pz(), 0 ); | |
680 | Double32_t pos[3]; | |
681 | track->GetXYZ(pos); | |
682 | ctrack->SetTrackPos( pos ); | |
683 | //TODO if( fStoreTPCTrack ) | |
684 | ctrack->SetParticleType(kJNone); | |
685 | ctrack->SetCharge(track->Charge()); | |
686 | ctrack->SetStatus(track->GetStatus());// | |
687 | ctrack->SetFlags( track->GetFlags() ); | |
688 | ctrack->SetLabel( track->GetLabel() ); | |
689 | // //FilterMap | |
690 | // UInt_t filterMap=0; | |
691 | // for( unsigned int i=0;i<sizeof(filterMap)*8;i++ ){ | |
692 | // if( track->TestFilterBit( BIT(i) )){ | |
693 | // SETBIT( filterMap , i); | |
694 | // } | |
695 | // } | |
696 | ctrack->SetFilterMap( track->GetFilterMap() ); | |
697 | ||
698 | //PID TODO | |
699 | double const * pid = track->PID(); | |
700 | ctrack->SetPID(AliJTrack::kElectronAliJ,pid[AliAODTrack::kElectron],AliJTrack::kTOF); | |
701 | ctrack->SetPID(AliJTrack::kMuonAliJ, pid[AliAODTrack::kMuon], AliJTrack::kTOF); | |
702 | ctrack->SetPID(AliJTrack::kPionAliJ, pid[AliAODTrack::kPion], AliJTrack::kTOF); | |
703 | ctrack->SetPID(AliJTrack::kKaonAliJ, pid[AliAODTrack::kKaon], AliJTrack::kTOF); | |
704 | ctrack->SetPID(AliJTrack::kProtonAliJ, pid[AliAODTrack::kProton], AliJTrack::kTOF); | |
705 | //TPC | |
706 | ctrack->SetTPCnClust(track->GetTPCNcls()); | |
707 | ctrack->SetTPCdEdx( track->GetTPCsignal() ); | |
708 | ctrack->SetTOFsignal( track->GetTOFsignal() ); | |
709 | ctrack->SetLabel( track->GetLabel() ); | |
710 | for( int i=0;i<int(sizeof(UInt_t)*8);i++ ){ | |
711 | ctrack->SetBit( i, track->TestBit( i )); | |
712 | } | |
713 | ||
714 | // check track threshold | |
715 | if( track->Pt() > fTrackThreshold ) | |
716 | hasGoodTrack = kTRUE; | |
717 | ||
718 | //if(fMyTask->DebugLevel() > 5 && track->P()>1 ) cout << "P = " << track->P() << endl; | |
719 | } // end tracks loop | |
720 | ||
721 | return hasGoodTrack; | |
722 | } | |
723 | ||
724 | ||
725 | //______________________________________________________________________________ | |
726 | AliJEventHeader* AliJFilter::ReadCommonHeader(AliVEvent *event){ | |
727 | //Read the AliVEvent and fill the list of AliJEventHeader containers | |
728 | //create a header and fill it | |
729 | AliJEventHeader *hdr = new( (*fHeaderList)[fHeaderList->GetEntriesFast()] ) AliJEventHeader; | |
730 | ||
731 | ||
732 | // Get Centrality as a percent from 0% to 100% | |
733 | AliCentrality *cent = event->GetCentrality(); | |
734 | if( cent ){ | |
735 | hdr->SetCentrality( cent->GetCentralityPercentile("V0M")); | |
736 | hdr->SetCentralityArray(AliJEventHeader::kcV0M, cent->GetCentralityPercentile("V0M")); | |
737 | hdr->SetCentralityArray(AliJEventHeader::kcFMD, cent->GetCentralityPercentile("FMD")); | |
738 | hdr->SetCentralityArray(AliJEventHeader::kcTRK, cent->GetCentralityPercentile("TRK")); | |
739 | hdr->SetCentralityArray(AliJEventHeader::kcTKL, cent->GetCentralityPercentile("TKL")); | |
740 | hdr->SetCentralityArray(AliJEventHeader::kcCL0, cent->GetCentralityPercentile("CL0")); | |
741 | hdr->SetCentralityArray(AliJEventHeader::kcCL1, cent->GetCentralityPercentile("CL1")); | |
742 | hdr->SetCentralityArray(AliJEventHeader::kcV0MvsFMD, cent->GetCentralityPercentile("V0MvsFMD")); | |
743 | hdr->SetCentralityArray(AliJEventHeader::kcTKLvsV0, cent->GetCentralityPercentile("TKLvsV0")); | |
744 | hdr->SetCentralityArray(AliJEventHeader::kcZEMvsZDC, cent->GetCentralityPercentile("ZEMvsZDC")); | |
745 | hdr->SetCentralityArray(AliJEventHeader::kcV0A, cent->GetCentralityPercentile("V0A")); | |
746 | hdr->SetCentralityArray(AliJEventHeader::kcV0C, cent->GetCentralityPercentile("V0C")); | |
747 | } | |
748 | hdr->SetTriggerMaskAlice(event->GetTriggerMask()); //ULong64_t | |
749 | hdr->SetTriggerMaskJCorran(ConvertTriggerMask()); //UInt_t | |
750 | hdr->SetEventType(event->GetEventType()); | |
751 | hdr->SetBunchCrossNumber(event->GetBunchCrossNumber()); | |
752 | ||
753 | int ncontributors = 0; | |
754 | const AliVVertex * vtxESD = event->GetPrimaryVertex(); | |
755 | if(vtxESD){ | |
756 | hdr->SetXVertex(vtxESD->GetX()); //FK// EFF | |
757 | hdr->SetYVertex(vtxESD->GetY()); //FK// EFF | |
758 | hdr->SetZVertex(vtxESD->GetZ()); | |
759 | //hdr->SetZVertexErr(vtxESD->GetZRes()); | |
760 | double covMat[6]; | |
761 | vtxESD->GetCovarianceMatrix(covMat); | |
762 | hdr->SetZVertexErr(TMath::Sqrt(covMat[5])); // GetZRes := TMath::Sqrt(fCovZZ) | |
763 | ncontributors = vtxESD->GetNContributors(); // get number of contributors to vertex | |
764 | hdr->SetVtxMult( vtxESD->GetNContributors() ); | |
765 | }else{ | |
766 | hdr->SetZVertex(9999); | |
767 | hdr->SetZVertexErr(9999); | |
768 | } | |
769 | hdr->SetVtxMult(ncontributors); //FK// EFF contrib to vertex | |
770 | return hdr; | |
771 | } | |
772 | //______________________________________________________________________________ | |
773 | void AliJFilter::ReadESDHeader(AliESDEvent *esd) | |
774 | { | |
775 | // Read the AliESDEvent and fill the list of AliJEventHeader containers | |
776 | if(!esd) return; | |
777 | if( fAliJRunHeader->GetRefitESDVertexTracks() ) | |
778 | AliESDUtils::RefitESDVertexTracks( esd ); // TODO only for LHC11a right? | |
779 | AliJEventHeader *hdr = ReadCommonHeader( esd ); | |
780 | // AliMultiplicity *fSPDMult =(AliMultiplicity *) esd->GetMultiplicity(); | |
781 | // if(fSPDMult) hdr->SetSPDTrackletMult(fSPDMult->GetNumberOfTracklets()); | |
782 | // This is moved from ReadCommonHeader. AOD should have same.TODO!! | |
783 | AliESDVZERO *v0 = esd->GetVZEROData(); | |
784 | ||
785 | if( v0 ) hdr->SetV0Mult(v0->GetMTotV0A() + v0->GetMTotV0C()); | |
786 | if( v0 ) hdr->SetV0AMult(v0->GetMTotV0A()); | |
787 | if( v0 ) hdr->SetV0CMult(v0->GetMTotV0C()); | |
788 | ||
789 | const AliESDRun* esdRun = esd->GetESDRun(); | |
790 | //cout <<"========================"<<endl; | |
791 | //cout << (esdRun->GetDetectorsInReco() & AliDAQ::kSPD) << endl; | |
792 | //cout << (esdRun->GetDetectorsInReco() & AliDAQ::kSSD) << endl; | |
793 | //cout << (esdRun->GetDetectorsInReco() & AliDAQ::kSDD) << endl; | |
794 | //cout << (esdRun->GetDetectorsInReco() & AliDAQ::kTPC) << endl; | |
795 | if(esdRun->GetDetectorsInReco() & AliDAQ::kSPD) hdr->SetSPDTrackletMult(AliESDtrackCuts::GetReferenceMultiplicity( esd, AliESDtrackCuts::kTracklets, 1.0 )); | |
796 | if((esdRun->GetDetectorsInReco() & AliDAQ::kSSD) || (esdRun->GetDetectorsInReco() & AliDAQ::kSDD)) hdr->SetITSSATrackletMult(AliESDtrackCuts::GetReferenceMultiplicity( esd, AliESDtrackCuts::kTrackletsITSSA, 1.0 )); | |
797 | if(esdRun->GetDetectorsInReco() & AliDAQ::kTPC) hdr->SetITSTPCTrackletMult(AliESDtrackCuts::GetReferenceMultiplicity( esd, AliESDtrackCuts::kTrackletsITSTPC, 1.0 )); | |
798 | ||
799 | ||
800 | //TODO Store Detector data | |
801 | if( fAliJRunHeader->GetStoreEventPlaneSource() ){ | |
802 | *fVZEROData = *esd->GetVZEROData(); | |
803 | *fTZEROData = AliESDTZERO(*esd->GetESDTZERO()); | |
804 | *fZDCData = *esd->GetESDZDC(); | |
805 | } | |
806 | hdr->SetEventID( esd->GetEventNumberInFile()); | |
807 | //const AliESDVertex * vtxESD = esd->GetPrimaryVertex(); | |
808 | //if( vtxESD->GetStatus() == 0 ) hdr->SetVtxMult( 0 ); | |
809 | // if fNcontributes > 0 then status is always true. do we need this? | |
810 | ||
811 | //==== MC ====/ | |
812 | if( IsMC() ){ | |
813 | const AliVVertex * primaryMCVertex = MCEvent()->GetPrimaryVertex(); | |
814 | //cout<<"AliMCEvent = "<<MCEvent()<<endl; | |
815 | //cout<<"AliVVertex = "<<primaryMCVertex<<endl; | |
816 | if( primaryMCVertex ){ | |
817 | hdr->SetXVertexMC( primaryMCVertex->GetX() ); | |
818 | hdr->SetYVertexMC( primaryMCVertex->GetY() ); | |
819 | hdr->SetZVertexMC( primaryMCVertex->GetZ() ); | |
820 | } | |
821 | AliESDHeader * esdHeader = esd->GetHeader(); | |
822 | hdr->SetL0TriggerInputs( esdHeader->GetL0TriggerInputs() ); | |
823 | } | |
824 | } | |
825 | ||
826 | //______________________________________________________________________________ | |
827 | void AliJFilter::ReadAODHeader(AliAODEvent *aod) | |
828 | { | |
829 | //Read the AliAODEvent and fill the list of AliJEventHeader containers | |
830 | AliJEventHeader *hdr = ReadCommonHeader( aod ); | |
831 | ||
832 | const AliAODTracklets *trackletsSPD = aod->GetTracklets(); | |
833 | if(trackletsSPD){ | |
834 | hdr->SetSPDTrackletMult(trackletsSPD->GetNumberOfTracklets()); | |
835 | } | |
836 | ||
837 | hdr->SetFiredTriggers( aod->GetFiredTriggerClasses() ); | |
838 | //TODO hdr->SetEventID( esd->GetEventNumberInFile()); | |
839 | //==== MC ====// | |
840 | if( IsMC() ){ | |
841 | AliAODMCHeader *aodMCheader = (AliAODMCHeader *) aod->FindListObject(AliAODMCHeader::StdBranchName()); | |
842 | hdr->SetXVertexMC( aodMCheader->GetVtxX() ); | |
843 | hdr->SetYVertexMC( aodMCheader->GetVtxY() ); | |
844 | hdr->SetZVertexMC( aodMCheader->GetVtxZ() ); | |
845 | } | |
846 | ||
319e6239 | 847 | AliAODHeader * ah = dynamic_cast<AliAODHeader*>(aod->GetHeader()); |
848 | if(!ah) AliFatal("Not a standard AOD"); | |
9dc4f671 | 849 | hdr->SetESDFileName( ah->GetESDFileName() ); |
850 | hdr->SetEventNumberESDFile( ah->GetEventNumberESDFile() ); | |
851 | } | |
852 | ||
853 | //______________________________________________________________________________ | |
854 | Int_t AliJFilter::GetSuperModuleNumber(bool isemcal, AliVCluster *cluster, AliVCaloCells *cells, Int_t absId) | |
855 | { | |
856 | //get super module number | |
857 | if(isemcal){ | |
858 | Int_t absIdMax = -1, iSM =-1, ieta = -1, iphi = -1; | |
859 | Bool_t shared = kFALSE; | |
860 | fEMCALRecoUtils->GetMaxEnergyCell(fEMCALGeometry, cells, cluster, absIdMax, iSM, ieta, iphi, shared); | |
861 | ||
862 | if(iSM < 0 || iphi < 0 || ieta < 0 ) | |
863 | { | |
864 | AliFatal(Form("Negative value for super module: %d, or cell ieta: %d, or cell iphi: %d, check EMCAL geometry name\n", | |
865 | iSM,ieta,iphi)); | |
866 | } | |
867 | ||
868 | return iSM ; | |
869 | ||
870 | } else { | |
871 | Int_t relId[4]; | |
872 | if ( absId >= 0) { | |
873 | fPHOSGeom->AbsToRelNumbering(absId,relId); | |
874 | fPHOSGeom->AbsToRelNumbering(absId,relId); | |
875 | return relId[0]-1; | |
876 | } else return -1; | |
877 | }//PHOS | |
878 | ||
879 | return -1; | |
880 | } | |
881 | ||
882 | //______________________________________________________________________________ | |
883 | Double_t * AliJFilter::GetCellsAmplitude( bool isemcal, AliVCluster *cluster, AliVCaloCells *emCells, AliVCaloCells *phoCells ) | |
884 | { | |
885 | // cell amplitude reader | |
886 | Int_t iCell, nCell; | |
887 | UShort_t *cellAddrs; | |
888 | Double_t *amps; | |
889 | ||
890 | // get cluster cells | |
891 | nCell = cluster->GetNCells(); | |
892 | ||
893 | amps = new Double_t[nCell]; | |
894 | ||
895 | // get the cell addresses | |
896 | cellAddrs = cluster->GetCellsAbsId(); | |
897 | ||
898 | // get the cell amplitudes | |
899 | for( iCell = 0; iCell < nCell; iCell++ ){ | |
900 | if( isemcal ) | |
901 | amps[iCell] = emCells->GetCellAmplitude( cellAddrs[iCell] ); | |
902 | else | |
903 | amps[iCell] = phoCells->GetCellAmplitude( cellAddrs[iCell] ); | |
904 | ||
905 | } | |
906 | ||
907 | return amps; | |
908 | } | |
909 | ||
910 | //_____________________________________________________________________________ | |
911 | ||
912 | UInt_t AliJFilter::ConvertTriggerMask(){ | |
913 | ||
914 | //convert alice trigger mask to jcorran trigger mask | |
915 | UInt_t triggerMaskJC=0; | |
916 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
917 | ->IsEventSelected() & AliVEvent::kMB){ | |
918 | // minimum bias TBit 0 | |
919 | triggerMaskJC |= (1<<kMinBiasTriggerBitJCorran); | |
920 | fAliJRunHeader->SetActiveTriggersJCorran( kMinBiasTriggerBitJCorran, "MinBiasTriggerBitJCorran"); | |
921 | } | |
922 | ||
923 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
924 | ->IsEventSelected() & AliVEvent::kHighMult){ | |
925 | //high multiplicity trigger TBit 1 | |
926 | triggerMaskJC |= (1<<kHighMultTriggerBitJCorran); | |
927 | fAliJRunHeader->SetActiveTriggersJCorran( kHighMultTriggerBitJCorran,"HighMultTriggerBitJCorran"); | |
928 | } | |
929 | ||
930 | if((((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
931 | ->IsEventSelected() & AliVEvent::kEMC1) || | |
932 | (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
933 | ->IsEventSelected() & AliVEvent::kEMC7 )){ | |
934 | //EMCAL L0 TBit2 | |
935 | triggerMaskJC |= (1<<kEmc0TriggerBitJCorran); | |
936 | fAliJRunHeader->SetActiveTriggersJCorran( kEmc0TriggerBitJCorran,"Emc0TriggerBitJCorran"); | |
937 | } | |
938 | ||
939 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
940 | ->IsEventSelected() & AliVEvent::kEMCEGA){ | |
941 | //EMCAL Gamma TBit3 | |
942 | triggerMaskJC |= (1<<kEmc1GammaTriggerBitJCorran); | |
943 | fAliJRunHeader->SetActiveTriggersJCorran( kEmc1GammaTriggerBitJCorran,"Emc1GammaTriggerBitJCorran"); | |
944 | } | |
945 | ||
946 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
947 | ->IsEventSelected() & AliVEvent::kEMCEJE){ | |
948 | //EMCAL JET TBit4 | |
949 | triggerMaskJC |= (1<<kEmc1JetTriggerBitJCorran); | |
950 | fAliJRunHeader->SetActiveTriggersJCorran( kEmc1JetTriggerBitJCorran,"Emc1JetTriggerBitJCorran"); | |
951 | } | |
952 | ||
953 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
954 | ->IsEventSelected() & AliVEvent::kCentral){ | |
955 | //central trigger TBit 5 | |
956 | triggerMaskJC |= (1<<kCentralTriggerBitJCorran); | |
957 | fAliJRunHeader->SetActiveTriggersJCorran( kCentralTriggerBitJCorran,"CentralTriggerBitJCorran"); | |
958 | } | |
959 | ||
960 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
961 | ->IsEventSelected() & AliVEvent::kSemiCentral){ | |
962 | //semi-central trigger TBit 6 | |
963 | triggerMaskJC |= (1<<kSemiCentralTriggerBitJCorran); | |
964 | fAliJRunHeader->SetActiveTriggersJCorran( kSemiCentralTriggerBitJCorran,"SemiCentralTriggerBitJCorran"); | |
965 | } | |
966 | ||
967 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
968 | ->IsEventSelected() & AliVEvent::kFastOnly){ | |
969 | //semi-central trigger TBit 6 | |
970 | triggerMaskJC |= (1<<kFastOnlyBitJCorran); | |
971 | fAliJRunHeader->SetActiveTriggersJCorran( kFastOnlyBitJCorran ,"FastOnlyBitJCorran"); | |
972 | } | |
973 | ||
974 | if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler())) | |
975 | ->IsEventSelected() & AliVEvent::kINT7){ | |
976 | // minimum bias TBit 0 | |
977 | triggerMaskJC |= (1<<kINT7TriggerBitJCorran); | |
978 | fAliJRunHeader->SetActiveTriggersJCorran( kINT7TriggerBitJCorran, "INT7TriggerBitJCorran"); | |
979 | } | |
980 | ||
981 | return triggerMaskJC; | |
982 | } | |
983 | ||
984 | ||
985 | //______________________________________________________________________________ | |
986 | void AliJFilter::ReadMCTracksFromESD(){ | |
987 | //store MC information from AliStack | |
988 | if(!MCEvent()) return; | |
989 | AliStack *stack = MCEvent()->Stack(); | |
990 | if(!stack) return; | |
991 | Int_t np = MCEvent()->GetNumberOfTracks(); | |
992 | ||
993 | // AliGenEventHeader* genHeader = fMC->GenEventHeader(); | |
994 | // AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader); | |
995 | // Double_t ptHard = 0; | |
996 | // Double_t nTrials = 1; // Trials for MC trigger weigth for real data | |
997 | // nTrials = pythiaGenHeader->Trials(); | |
998 | // ptHard = pythiaGenHeader->GetPtHard(); | |
999 | // Int_t nprim = stack->GetNtrack(); | |
1000 | ||
1001 | Long64_t ntrack = 0; | |
1002 | ||
1003 | for(Long64_t iTrack = 0; iTrack < np; iTrack++){ | |
1004 | AliMCParticle *track = (AliMCParticle*) MCEvent()->GetTrack(iTrack); | |
1005 | if(!track){ | |
1006 | Printf("ERROR: Could not receive track %d",(int) iTrack); | |
1007 | continue; | |
1008 | } | |
1009 | Bool_t isPrimary = stack->IsPhysicalPrimary(iTrack); | |
1010 | if(isPrimary){ | |
1011 | //create a new JMCTrack and fill the track info | |
1012 | AliJMCTrack *ctrack = new( (*fMCTrackList)[ntrack++] ) AliJMCTrack; | |
1013 | ||
1014 | TParticle *partStack = stack->Particle(iTrack); | |
1015 | Int_t pdg = partStack->GetPdgCode(); | |
1016 | ||
1017 | Char_t ch = (Char_t) partStack->GetPDG()->Charge(); | |
1018 | Int_t label = track->GetLabel(); | |
1019 | ||
1020 | ctrack->SetLabel(label); | |
1021 | ctrack->SetPdgCode(pdg); | |
1022 | ctrack->SetPxPyPzE( partStack->Px(), partStack->Py(), partStack->Pz(), partStack->Energy()); | |
1023 | ctrack->SetCharge(ch); | |
1024 | ctrack->SetFlag(AliJMCTrack::kPrimary, isPrimary); | |
1025 | ||
1026 | ctrack->SetProductionVertex(partStack->Vx(),partStack->Vy(),partStack->Vz()); | |
1027 | }// loop for al primary tracks | |
1028 | } | |
1029 | } | |
1030 | ||
1031 | //-------------------------------------------------------------------- | |
1032 | void AliJFilter::ReadMCTracksFromAOD(){ | |
1033 | //retreive MC particles from event //FKEFF// | |
1034 | if(!AODEvent()) return; TClonesArray *mcArray = (TClonesArray*) AODEvent()-> | |
1035 | FindListObject(AliAODMCParticle::StdBranchName()); | |
1036 | if(!mcArray){ | |
1037 | Printf("No MC particle branch found"); | |
1038 | return; | |
1039 | } | |
1040 | ||
1041 | Long64_t ntrack = 0; | |
1042 | Long64_t np = mcArray->GetEntriesFast(); | |
1043 | ||
1044 | for(Long64_t it = 0; it < np; it++) { | |
1045 | AliAODMCParticle *track = (AliAODMCParticle*) mcArray->At(it); | |
1046 | if(!track){ | |
1047 | Error("ReadEventAODMC", "Could not receive particle %d",(int) it); | |
1048 | continue; | |
1049 | } | |
1050 | bool isPrimary = track->IsPhysicalPrimary(); | |
1051 | if(isPrimary){ | |
1052 | //create a new JMCTrack and fill the track info | |
1053 | AliJMCTrack *ctrack = new ((*fMCTrackList)[ntrack++]) AliJMCTrack;; | |
1054 | ||
1055 | Int_t pdg = track->GetPdgCode(); | |
1056 | ||
1057 | Char_t ch = (Char_t) track->Charge(); | |
1058 | Int_t label = track->GetLabel(); | |
1059 | ||
1060 | ctrack->SetLabel(label); | |
1061 | ctrack->SetPdgCode(pdg); | |
1062 | ctrack->SetPxPyPzE( track->Px(), track->Py(), track->Pz(), track->E()); | |
1063 | ctrack->SetCharge(ch); | |
1064 | ctrack->SetFlag(AliJMCTrack::kPrimary, isPrimary); | |
1065 | ||
1066 | ctrack->SetProductionVertex(track->Xv(),track->Yv(),track->Zv()); | |
1067 | } | |
1068 | } | |
1069 | ||
1070 | } | |
1071 | ||
1072 | ||
1073 | //-------------------------------------------------------------------- | |
1074 | void AliJFilter::RemapMCLabels(){ | |
1075 | // remaps all MC labels to the new arrays | |
1076 | ||
1077 | Int_t i, j, label, mother0, mother1; | |
1078 | AliJTrack *track; | |
1079 | AliJPhoton *cluster; | |
1080 | // BS AliJCaloCell *cell; | |
1081 | AliJMCTrack *mctrack; | |
1082 | ||
1083 | // tracks | |
1084 | for( i = 0; i < fTrackList->GetEntries(); i++ ){ | |
1085 | track = (AliJTrack*)fTrackList->At( i ); | |
1086 | ||
1087 | track->SetLabel( fMcMap->At( track->GetLabel() )); | |
1088 | } | |
1089 | ||
1090 | // clusters | |
1091 | if( fAliJRunHeader->GetStoreEMCalInfo() ){ | |
1092 | for( i = 0; i < fPhotonList->GetEntries(); i++ ){ | |
1093 | cluster = (AliJPhoton*)fPhotonList->At( i ); | |
1094 | for( j = 0; j < cluster->GetNEMCLabel(); j++ ){ | |
1095 | label = cluster->GetEMCLabel( j ); | |
1096 | // no label clusters protection | |
1097 | if( label >= 0 ) | |
1098 | cluster->SetEMCLabel( j, fMcMap->At( label )); | |
1099 | } | |
1100 | } | |
1101 | ||
1102 | /* BS | |
1103 | // cells | |
1104 | for( i = 0; i < fCaloCellList->GetEntries(); i++ ){ | |
1105 | cell = (AliJCaloCell*)fCaloCellList->At( i ); | |
1106 | label = cell->GetMcLabel(); | |
1107 | // no label cells protection | |
1108 | if( label >= 0 ) | |
1109 | cell->SetMcLabel( fMcMap->At( cell->GetMcLabel() )); | |
1110 | } | |
1111 | */ | |
1112 | } | |
1113 | ||
1114 | // MC particles | |
1115 | for( i = 0; i < fMCTrackList->GetEntries(); i++ ){ | |
1116 | mctrack = (AliJMCTrack*)fMCTrackList->At( i ); | |
1117 | ||
1118 | mother0 = mctrack->GetMother( 0 ); | |
1119 | mother1 = mctrack->GetMother( 1 ); | |
1120 | ||
1121 | if( mother0 >= 0 ) | |
1122 | mother0 = fMcMap->At( mother0 ); | |
1123 | if( mother1 >= 0 ) | |
1124 | mother1 = fMcMap->At( mother1 ); | |
1125 | ||
1126 | mctrack->SetMother( mother0, mother1 ); | |
1127 | } | |
1128 | } | |
1129 | ||
1130 | //-------------------------------------------------------------------- | |
1131 | ||
1132 | ||
1133 | void AliJFilter::PrintOut() const { | |
1134 | //AliJRunHeader * RunInfo = fAliJRunHeader; | |
1135 | } | |
1136 | ||
1137 | //******************************************** | |
1138 | // UTILS | |
1139 | //******************************************** | |
1140 | void AliJFilter::AddList(const char* aname, const char* cname, TClonesArray **obj, int nlist){ | |
1141 | *obj = new TClonesArray(cname, nlist); | |
1142 | (*obj)->SetName(aname); | |
1143 | (*obj)->SetOwner(); | |
1144 | } | |
1145 |