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