]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/hfe/AliHFEdebugTreeTaskAOD.cxx
Update
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEdebugTreeTaskAOD.cxx
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 *                                                                        *
4 * Author: The ALICE Off-line Project.                                    *
5 * Contributors are mentioned in the code where appropriate.              *
6 *                                                                        *
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 **************************************************************************/
15 //
16 // Debug tree task
17 // 
18 // Authors:
19 //   R.Bailhache <R.Bailhache@gsi.de>
20 //
21 #include <TBits.h>
22 #include <TString.h>
23 #include <TArrayI.h>
24 #include <TTree.h>
25
26 #include "AliAnalysisManager.h"
27 #include "AliCentrality.h"
28 #include "AliAODTrack.h"
29 #include "AliAODEvent.h"
30 #include "AliHFEcuts.h"
31 #include "AliHFEextraCuts.h"
32 #include "AliInputEventHandler.h"
33 #include "AliLog.h"
34 #include "AliPIDResponse.h"
35 #include "AliVEvent.h"
36 #include "AliHFEpidTPC.h"
37 #include "TTreeStream.h"
38 #include "AliESDtrack.h"
39 #include "TClonesArray.h"
40 #include "AliAODMCHeader.h"
41 #include "AliHFEsignalCuts.h"
42 #include "AliAODMCParticle.h"
43 #include "AliVTrack.h"
44 #include "AliAODVertex.h"
45
46 #include "AliHFEdebugTreeTaskAOD.h"
47
48 ClassImp(AliHFEdebugTreeTaskAOD)
49
50 AliHFEdebugTreeTaskAOD::AliHFEdebugTreeTaskAOD():
51   AliAnalysisTaskSE(),
52   fAODMCHeader(NULL),
53   fAODArrayMCInfo(NULL),
54   fTrackCuts(NULL),
55   fExtraCuts(NULL),
56   fSignalCuts(NULL),
57   fTPCpid(NULL),
58   fEventNumber(0),
59   fNclustersTPC(70),
60   fNclustersTPCPID(0),
61   fNclustersITS(2),
62   fFilename("HFEtree.root"),
63   fDebugstream(kFALSE),
64   fDebugTree(NULL),
65   fDebugTreee(NULL),
66   fCentrality(-1.),
67   fRun(-1),
68   fDoublec(0),
69   fMomentum(0.),
70   fMomentumTPC(0.),
71   fTransverseMomentum(0.),
72   fEta(0.),
73   fPhi(0.),
74   fCharge(-1),
75   fNClustersTPCall(0),
76   fNClustersTPCPID(0),
77   fNClustersTPCshared(0),
78   fNCrossedRowsTPC(0),
79   fClusterRatioTPCall(0.),
80   fNClustersITS(0),
81   fStatusL0(-1),
82   fStatusL1(-1),
83   fSigmaTOF(0.),
84   fSigmaTPC(0.),
85   fDcaxy(0.),
86   fDcaz(0.),
87   fFilter2(0),
88   fFilter4(0),
89   fSource(-1),
90   fEr(0.0),
91   fSignal(0.)
92 {
93
94 }
95
96 AliHFEdebugTreeTaskAOD::AliHFEdebugTreeTaskAOD(const char *name):
97   AliAnalysisTaskSE(name),
98   fAODMCHeader(NULL),
99   fAODArrayMCInfo(NULL),
100   fTrackCuts(NULL),
101   fExtraCuts(NULL),
102   fSignalCuts(NULL),
103   fTPCpid(NULL),
104   fEventNumber(0),
105   fNclustersTPC(70),
106   fNclustersTPCPID(0),
107   fNclustersITS(2),
108   fFilename("HFEtree.root"),
109   fDebugstream(kFALSE),
110   fDebugTree(NULL),
111   fDebugTreee(NULL),
112   fCentrality(-1.),
113   fRun(-1),
114   fDoublec(0),
115   fMomentum(0.),
116   fMomentumTPC(0.),
117   fTransverseMomentum(0.),
118   fEta(0.),
119   fPhi(0.),
120   fCharge(-1),
121   fNClustersTPCall(0),
122   fNClustersTPCPID(0),
123   fNClustersTPCshared(0),
124   fNCrossedRowsTPC(0),
125   fClusterRatioTPCall(0.),
126   fNClustersITS(0),
127   fStatusL0(-1),
128   fStatusL1(-1),
129   fSigmaTOF(0.),
130   fSigmaTPC(0.),
131   fDcaxy(0.),
132   fDcaz(0.),
133   fFilter2(0),
134   fFilter4(0),
135   fSource(-1),
136   fEr(0.0),
137   fSignal(0.)
138 {
139   fTPCpid = new AliHFEpidTPC("QAtpcPID");
140   DefineOutput(1, TTree::Class());
141 }
142
143 AliHFEdebugTreeTaskAOD::~AliHFEdebugTreeTaskAOD(){
144
145     if(fDebugTree) delete fDebugTree;
146     if(fTPCpid) delete fTPCpid;
147     //if(fDebugTreee) delete fDebugTreee;
148 }
149
150 void AliHFEdebugTreeTaskAOD::UserCreateOutputObjects(){
151   //
152   // Create debug tree, signal cuts and track cuts
153   //
154
155   //printf("test\n");
156   if(fDebugstream) {
157     fDebugTree = new TTreeSRedirector(fFilename.Data());
158   }
159   else {
160     // other possibility
161     fDebugTreee =  new TTree("PIDdebug","PIDdebug");
162     fDebugTreee->Branch("centrality",&fRun);
163     fDebugTreee->Branch("run",&fDoublec);
164     fDebugTreee->Branch("p",&fMomentum);
165     fDebugTreee->Branch("ptpc",&fMomentumTPC);
166     fDebugTreee->Branch("pt",&fTransverseMomentum);
167     fDebugTreee->Branch("eta",&fEta);
168     fDebugTreee->Branch("phi",&fPhi);
169     fDebugTreee->Branch("charge",&fCharge);
170     fDebugTreee->Branch("nclustersTPCall",&fNClustersTPCall);
171     fDebugTreee->Branch("nclustersTPCPID",&fNClustersTPCPID);
172     fDebugTreee->Branch("nclustersTPCshared",&fNClustersTPCshared);
173     fDebugTreee->Branch("nCrossedRowsTPC",&fNCrossedRowsTPC);
174     fDebugTreee->Branch("clusterRatioTPCall",&fClusterRatioTPCall);
175     fDebugTreee->Branch("nclustersITS",&fNClustersITS);
176     fDebugTreee->Branch("statusL0",&fStatusL0);
177     fDebugTreee->Branch("statusL1",&fStatusL1);
178     fDebugTreee->Branch("sigmaTOF",&fSigmaTOF);
179     fDebugTreee->Branch("sigmaTPC",&fSigmaTPC);
180     fDebugTreee->Branch("dcaxy",&fDcaxy);
181     fDebugTreee->Branch("dcaz",&fDcaz);
182     fDebugTreee->Branch("filter2",&fFilter2);
183     fDebugTreee->Branch("filter4",&fFilter4);
184     fDebugTreee->Branch("source",&fSource);
185     fDebugTreee->Branch("eR",&fEr);
186     fDebugTreee->Branch("signal",&fSignal);
187     PostData(1,fDebugTreee);
188   }
189
190  // printf("testa\n");
191   fSignalCuts = new AliHFEsignalCuts("HFEsignalCuts", "HFE MC Signal definition");
192   //printf("testb\n");
193   
194   fTrackCuts = new AliHFEcuts("fTrackCuts", "Basic HFE track cuts");
195   fTrackCuts->CreateStandardCuts();
196   fTrackCuts->SetAOD();
197   // Track cuts
198   fTrackCuts->SetMinNClustersTPC(fNclustersTPC);
199   fTrackCuts->SetMinRatioTPCclusters(0);
200   fTrackCuts->SetTPCmodes(AliHFEextraCuts::kFound, AliHFEextraCuts::kFoundOverFindable); 
201   fTrackCuts->SetMinNClustersTPCPID(fNclustersTPCPID);
202   fTrackCuts->SetMinNClustersITS(fNclustersITS);
203   // Event cuts
204   fTrackCuts->SetUseMixedVertex(kTRUE);
205   fTrackCuts->SetVertexRange(10.);
206   //printf("testa\n");
207   fTrackCuts->Initialize();
208   //printf("testb\n");
209
210   fExtraCuts = new AliHFEextraCuts("hfeExtraCuts","HFE Extra Cuts");
211
212 }
213
214 void AliHFEdebugTreeTaskAOD::UserExec(Option_t *){
215   //
216   // User Exec: Fill debug Tree
217   // 
218
219   // Get PID response
220   AliPIDResponse *pid = NULL;
221   AliInputEventHandler *handler = dynamic_cast<AliInputEventHandler *>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
222   if(handler){
223 //    printf("testb\n");
224     pid = handler->GetPIDResponse();
225   } else {
226     AliError("No Handler");
227   }
228   if(!pid){
229  //   printf("testc\n");
230     AliError("No PID response");
231     return;
232   }
233   if(!fInputEvent) {
234     AliError("No Input event");
235     return;
236   }
237
238   // MC info
239   Bool_t mcthere = kTRUE;
240   AliAODEvent *aodE = dynamic_cast<AliAODEvent *>(fInputEvent);
241   if(!aodE){
242  //        printf("testd\n");
243     AliError("No AOD Event");
244     return;
245   }
246   fAODMCHeader = dynamic_cast<AliAODMCHeader *>(fInputEvent->FindListObject(AliAODMCHeader::StdBranchName()));
247   if(!fAODMCHeader){ 
248       mcthere = kFALSE;
249  //   return;
250   }
251   fAODArrayMCInfo = dynamic_cast<TClonesArray *>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
252   if(!fAODArrayMCInfo){ 
253       mcthere = kFALSE;
254   //  return;
255   }
256   else {
257     fSignalCuts->SetMCAODInfo(fAODArrayMCInfo);
258     fTrackCuts->SetMCEvent(aodE);
259   }
260   
261   // Set for track cuts
262   fTrackCuts->SetRecEvent(fInputEvent);
263
264   if(!fTrackCuts->CheckEventCuts("fCutsEvRec", fInputEvent)){
265     AliDebug(1, "Event rejected by the event cuts\n");
266     return;
267   }
268   if(!fExtraCuts){
269     fExtraCuts = new AliHFEextraCuts("hfeExtraCuts","HFE Extra Cuts");
270   }
271   fExtraCuts->SetRecEventInfo(fInputEvent);
272
273   // Get run number
274   fRun = fInputEvent->GetRunNumber();
275   
276   // Derive trigger 
277   UInt_t trigger = fInputHandler->IsEventSelected();
278   Bool_t isMBTrigger = trigger & AliVEvent::kMB;
279   Bool_t isCentralTrigger = trigger & AliVEvent::kCentral;
280   Bool_t isSemicentralTrigger = trigger & AliVEvent::kSemiCentral;
281   Bool_t isEMCALTrigger = trigger & AliVEvent::kEMCEJE;
282
283   // Get Primary Vertex
284   const AliVVertex *vertex = fInputEvent->GetPrimaryVertex();
285   Double_t vtx[3];
286   vertex->GetXYZ(vtx);
287   Double_t ncontrib = fInputEvent->GetPrimaryVertex()->GetNContributors();
288
289   // Get centrality
290   fCentrality = -1.;
291   AliCentrality *hicent = fInputEvent->GetCentrality();
292   fCentrality = hicent->GetCentralityPercentile("V0M");
293   
294
295   // Look for kink mother
296   Int_t numberofvertices = aodE->GetNumberOfVertices();
297   Double_t listofmotherkink[numberofvertices];
298   Int_t numberofmotherkink = 0;
299   //printf("Number of vertices %d\n",numberofvertices);
300   for(Int_t ivertex=0; ivertex < numberofvertices; ivertex++) {
301     AliAODVertex *aodvertex = aodE->GetVertex(ivertex);
302     if(!aodvertex) continue;
303     //printf("Type %d\n",aodvertex->GetType());
304     if(aodvertex->GetType()==AliAODVertex::kKink) {
305       //printf("Find one kink\n");
306       AliAODTrack *mother = (AliAODTrack *) aodvertex->GetParent();
307       if(!mother) continue;
308       Int_t idmother = mother->GetID();
309       listofmotherkink[numberofmotherkink] = idmother;
310       //printf("ID %d\n",idmother);
311       numberofmotherkink++;
312     }
313   }
314   //printf("Number of kink mother in the events %d\n",numberofmotherkink);
315   
316   // Common variables
317   //Double_t charge, eta, phi, momentum, momentumTPC, transversemomentum;
318
319   //
320   // Loop on reconstructed tracks
321   //
322
323   TArrayI *arraytrack = new TArrayI(fInputEvent->GetNumberOfTracks());
324   
325   AliAODTrack *track = 0x0;
326   AliAODMCParticle *mctrack = NULL;
327   for(Int_t itrack = 0; itrack < fInputEvent->GetNumberOfTracks(); itrack++){
328     // fill the tree
329     track = dynamic_cast<AliAODTrack *>(fInputEvent->GetTrack(itrack));
330     if(!track) continue;
331     // Cut track (Only basic track cuts)
332 //    printf("testv\n");
333     if(!fTrackCuts->CheckParticleCuts(AliHFEcuts::kNcutStepsMCTrack + AliHFEcuts::kStepRecKineITSTPC, track)) continue;
334     //
335     //printf("testu\n");
336     fSigmaTOF = pid->NumberOfSigmasTOF(track, AliPID::kElectron);
337     fSigmaTPC = pid->NumberOfSigmasTPC(track, AliPID::kElectron);
338     Double_t tPCdEdx = track->GetDetPid() ? track->GetDetPid()->GetTPCsignal() : 0.;
339    
340     // Kinematics
341     fCharge = track->Charge() > 0 ? 1. : -1.;
342     fEta = track->Eta();
343     fPhi = track->Phi();
344     fMomentum = track->P() * fCharge;
345     fTransverseMomentum = track->Pt() * fCharge;
346     fMomentumTPC = track->GetDetPid() ? track->GetDetPid()->GetTPCmomentum() : track->P();
347   
348     // status
349     ULong_t status = track->GetStatus();
350     Int_t itsrefit=0;
351     if((status & AliESDtrack::kITSrefit) == AliESDtrack::kITSrefit) itsrefit = 1;
352     Int_t tpcrefit=0;
353     if((status & AliESDtrack::kTPCrefit) == AliESDtrack::kTPCrefit) tpcrefit = 1;
354
355     // ITS number of clusters
356     fNClustersITS = (Int_t) track->GetITSNcls();
357     // TPC number of clusters (different definitions)
358     UChar_t nclustersTPCfit = track->GetTPCNcls();
359     //UChar_t nclustersTPCall = 0;
360     const TBits &clusterTPC = track->GetTPCClusterMap();
361     fNClustersTPCall = (Int_t) clusterTPC.CountBits();
362     fNClustersTPCPID = (Int_t) track->GetTPCsignalN();
363     UChar_t nfindableTPC =  track->GetTPCNclsF();
364     Double_t clusterRatioTPCfit = 0.0;
365     if((static_cast<Double_t>(nfindableTPC))>0.0) clusterRatioTPCfit = static_cast<Double_t>(nclustersTPCfit)/static_cast<Double_t>(nfindableTPC);
366     //Double_t clusterRatioTPCall = 0.0;
367     if((static_cast<Double_t>(nfindableTPC))>0.0) fClusterRatioTPCall = static_cast<Float_t>(fNClustersTPCall)/static_cast<Float_t>(nfindableTPC);
368     fNClustersTPCshared = 0;
369     fNCrossedRowsTPC = (Int_t) track->GetTPCNCrossedRows();
370     const TBits &sharedTPC = track->GetTPCSharedMap();
371     for(Int_t ibit = 0; ibit < 160; ibit++) if(sharedTPC.TestBitNumber(ibit)) fNClustersTPCshared++;
372     // TRD clusters and tracklets
373     UChar_t nclustersTRD = track->GetTRDncls();
374     UChar_t ntrackletsTRDPID = track->GetTRDntrackletsPID();
375     Int_t   nslicesTRD = track->GetNumberOfTRDslices();
376     Int_t   chi2TRD = track->GetTRDchi2();
377     // ITS and TRD acceptance maps
378     UChar_t itsPixel = track->GetITSClusterMap();
379     fStatusL0 = 0;
380     if(TESTBIT(itsPixel, 0)) fStatusL0 = 1; 
381     fStatusL1 = 0;
382     if(TESTBIT(itsPixel, 1)) fStatusL1 = 1; 
383
384     // HFE DCA
385     fDcaxy = -999.;
386     fDcaz = -999.;
387     fExtraCuts->GetImpactParameters((AliVTrack *)track,fDcaxy,fDcaz);
388
389     // Kink
390     Int_t kink = 0;
391     if(fExtraCuts->IsKinkDaughter(track)) kink = 1;
392
393     // kink mother
394     Int_t kinkmotherpass = 0;
395     for(Int_t kinkmother = 0; kinkmother < numberofmotherkink; kinkmother++) {
396       if(track->GetID() == listofmotherkink[kinkmother]) {
397         kinkmotherpass = 1;
398         continue;
399       }
400     }
401     
402     // ID track to see if negative
403     Int_t id = track->GetID();
404
405     // Double counted
406     fDoublec = 0;
407     for(Int_t l=0; l < itrack; l++){
408       Int_t iTrack2 = arraytrack->At(l);
409       if(iTrack2==id) fDoublec=1;
410     }
411     //printf("Doublec %d\n",doublec);
412
413     // Add the id at this place
414     arraytrack->AddAt(id,itrack);
415
416     // Filter
417     Int_t filter[20];
418     for(Int_t k=0; k<20; k++) {
419       filter[k]=0;
420       Int_t u = 1<<k;     
421       if((track->TestFilterBit(u))) {
422         filter[k] = 1;
423       } 
424     }
425     Int_t filter0 = filter[0];
426     Int_t filter1 = filter[1];
427     fFilter2 = filter[2];
428     Int_t filter3 = filter[3];
429     fFilter4 = filter[4];
430     Int_t filter5 = filter[5];
431     Int_t filter6 = filter[6];
432     Int_t filter7 = filter[7];
433     Int_t filter8 = filter[8];
434     Int_t filter9 = filter[9];
435     Int_t filter10 = filter[10];
436     Int_t filter11 = filter[11];
437     Int_t filter12 = filter[12];
438     Int_t filter13 = filter[13];
439     Int_t filter14 = filter[14];
440     Int_t filter15 = filter[15];
441     Int_t filter16 = filter[16];
442     Int_t filter17 = filter[17];
443     Int_t filter18 = filter[18];
444     Int_t filter19 = filter[19];
445
446     Int_t eventnb = fEventNumber;
447
448     //printf("track\n");
449
450     // Monte-Carlo info
451     Double_t vx,vy,vz;
452     fEr = 0.0;
453     Double_t chargemc, etamc, phimc, momentummc, transversemomentummc;
454     Int_t pdg;
455     fSignal = 0;
456     fSource = 0;
457     if(mcthere){
458       Int_t label = TMath::Abs(track->GetLabel());
459       if(label && label < fAODArrayMCInfo->GetEntriesFast())
460         mctrack = dynamic_cast<AliAODMCParticle *>(fAODArrayMCInfo->At(label));
461       if(!mctrack) continue;
462       if(fTrackCuts->CheckParticleCuts(static_cast<UInt_t>(AliHFEcuts::kStepMCGenerated), mctrack)) fSignal = 1;
463       // Kinematics
464       chargemc = mctrack->Charge() > 0. ? 1. : -1.;
465       momentummc = mctrack->P() * chargemc;
466       transversemomentummc = mctrack->Pt() * chargemc;
467       etamc = mctrack->Eta();
468       phimc = mctrack->Phi();
469       pdg = mctrack->GetPdgCode();
470       
471       // Get Production Vertex in radial direction
472       vx = mctrack->Xv();
473       vy = mctrack->Yv(); 
474       vz = mctrack->Zv(); 
475       fEr = TMath::Sqrt(vx*vx+vy*vy);
476       
477       // Get Mother PDG code of the particle
478       Int_t motherPdg = 0;
479       Int_t motherlabel = TMath::Abs(mctrack->GetMother());
480       if(motherlabel >= 0 && motherlabel < fAODArrayMCInfo->GetEntriesFast()){
481         AliAODMCParticle *mother = dynamic_cast<AliAODMCParticle *>(fAODArrayMCInfo->At(motherlabel));
482         if(mother) motherPdg = mother->GetPdgCode();
483       }
484       
485       // derive source
486       fSource = 5;
487       if(fSignalCuts->IsCharmElectron(mctrack)) fSource = 0;
488       else if(fSignalCuts->IsBeautyElectron(mctrack)) fSource = 1;
489       else if(fSignalCuts->IsGammaElectron(mctrack)) fSource = 2;
490       else if(fSignalCuts->IsNonHFElectron(mctrack)) fSource = 3;
491       else if(TMath::Abs(pdg) == 11) fSource = 4;
492       else fSource = 5;
493       
494     }
495
496     
497     // Fill Tree
498     //printf("Fill\n");
499     if(fDebugstream) {
500       (*fDebugTree) << "PIDdebug"
501                     << "centrality="          << fCentrality
502                     << "MBtrigger="           << isMBTrigger 
503                     << "CentralTrigger="      << isCentralTrigger
504                     << "SemicentralTrigger="  << isSemicentralTrigger
505                     << "EMCALtrigger="        << isEMCALTrigger
506                     << "run="                 << fRun
507                     << "eventnb="             << eventnb
508                     << "vx="                  << vtx[0]
509                     << "vy="                  << vtx[1]
510                     << "vz="                  << vtx[2]
511                     << "ncontrib="            << ncontrib
512                     << "id="                  << id
513                     << "dc="                  << fDoublec
514                     << "p="                   << fMomentum
515                     << "ptpc="                << fMomentumTPC
516                     << "pt="                  << fTransverseMomentum
517                     << "eta="                 << fEta
518                     << "phi="                 << fPhi
519                     << "charge="              << fCharge
520                     << "itsrefit="            << itsrefit
521                     << "tpcrefit="            << tpcrefit
522                     << "nclustersTPC="        << nclustersTPCfit
523                     << "nclustersTPCall="     << fNClustersTPCall
524                     << "nclustersTPCPID="     << fNClustersTPCPID
525                     << "nclustersTPCshared="  << fNClustersTPCshared
526                     << "ncrossedRowsTPC="     << fNCrossedRowsTPC
527                     << "clusterRatioTPC="     << clusterRatioTPCfit
528                     << "clusterRatioTPCall="  << fClusterRatioTPCall
529                     << "nclustersITS="        << fNClustersITS
530                     << "nclustersTRD="        << nclustersTRD
531                     << "ntrackletsTRD="       << ntrackletsTRDPID
532                     << "nslicesTRD="          << nslicesTRD
533                     << "chi2TRD="             << chi2TRD
534                     << "statusITS0="          << fStatusL0
535                     << "statusITS1="          << fStatusL1
536                     << "TOFsigmaEl="          << fSigmaTOF
537                     << "TPCsigmaEl="          << fSigmaTPC
538                     << "TPCdEdx="             << tPCdEdx
539                     << "dcaR="                << fDcaxy
540                     << "dcaZ="                << fDcaz
541                     << "kinkdaughter="        << kink
542                     << "kinkmother="          << kinkmotherpass
543                     << "nbofmotherkink="      << numberofmotherkink
544                     << "filter0="             << filter0
545                     << "filter1="             << filter1
546                     << "filter2="             << fFilter2
547                     << "filter3="             << filter3
548                     << "filter4="             << fFilter4
549                     << "filter5="             << filter5
550                     << "filter6="             << filter6
551                     << "filter7="             << filter7
552                     << "filter8="             << filter8
553                     << "filter9="             << filter9
554                     << "filter10="            << filter10
555                     << "filter11="            << filter11
556                     << "filter12="            << filter12
557                     << "filter13="            << filter13
558                     << "filter14="            << filter14
559                     << "filter15="            << filter15
560                     << "filter16="            << filter16
561                     << "filter17="            << filter17
562                     << "filter18="            << filter18
563                     << "filter19="            << filter19
564                     << "mcp="                 << momentummc
565                     << "mcpt="                << transversemomentummc
566                     << "mceta="               << etamc
567                     << "mcphi="               << phimc
568                     << "mcpdg="               << pdg
569                     << "source="              << fSource
570                     << "px="                  << vx
571                     << "py="                  << vy
572                     << "pz="                  << vz
573                     << "eR="                  << fEr
574                     << "mccharge="            << chargemc
575                     << "signal="              << fSignal
576                     << "\n";
577     } else {
578       if((fFilter2==1) || (fFilter4==1)) fDebugTreee->Fill();
579     }
580  
581     //printf("after\n");
582
583   }
584   
585   arraytrack->~TArrayI();
586   fEventNumber++;
587
588   if(!fDebugstream) PostData(1,fDebugTreee);
589
590
591 }
592
593
594 void AliHFEdebugTreeTaskAOD::SetFileName(const char *filename){ fFilename = filename; }
595 void AliHFEdebugTreeTaskAOD::Terminate(Option_t *){
596
597   if(fDebugTree) delete fDebugTree;
598   fDebugTree=0x0;
599
600 }
601