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