1 /*************************************************************************
2 * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ///////////////////////////////////////////////////////////////////////////
18 // Basic Analysis Task //
20 ///////////////////////////////////////////////////////////////////////////
28 #include <AliCFContainer.h>
29 #include <AliInputEventHandler.h>
30 #include <AliESDInputHandler.h>
31 #include <AliAODInputHandler.h>
32 #include <AliAnalysisManager.h>
33 #include <AliVEvent.h>
34 #include <AliTriggerAnalysis.h>
37 #include <TGeoGlobalMagField.h>
38 #include "TGeoManager.h"
39 #include "AliGeomManager.h"
43 #include "AliDielectronTaku.h"
44 #include "AliDielectronHistosTaku.h"
45 #include "AliDielectronCF.h"
46 #include "AliDielectronMC.h"
47 #include "AliDielectronEventCuts.h"
49 #include "AliAnalysisTaskMultiDielectronNewTaku.h"
51 #include "AliESDEvent.h"
52 #include "AliESDInputHandler.h"
54 #include "AliESDtrack.h"
55 #include "AliESDtrackCuts.h"
56 #include "AliCentrality.h"
57 #include "AliVVertex.h"
58 #include "AliESDVZERO.h"
59 #include "AliEMCALTrack.h"
60 //#include "AliFlowEventSimple.h"
61 //#include "AliFlowLYZEventPlane.h"
64 ClassImp(AliAnalysisTaskMultiDielectronNewTaku)
66 //_________________________________________________________________________________
67 AliAnalysisTaskMultiDielectronNewTaku::AliAnalysisTaskMultiDielectronNewTaku() :
74 fSelectPhysics(kFALSE),
75 fTriggerMask(AliVEvent::kMB),
76 fTriggerOnV0AND(kFALSE),
77 fRejectPileup(kFALSE),
78 fTriggerAnalysis(0x0),
85 fdEdXnSigmaElecvsPt(0x0),
87 fTOFnSigmaElecvsPt(0x0),
88 fTPCcrossedRowsvsPt(0x0),
128 //_________________________________________________________________________________
129 AliAnalysisTaskMultiDielectronNewTaku::AliAnalysisTaskMultiDielectronNewTaku(const char *name,
130 AliDielectronEventCuts* cutsEvent
132 AliAnalysisTaskSE(name),
138 fSelectPhysics(kFALSE),
139 fTriggerMask(AliVEvent::kMB),
140 fTriggerOnV0AND(kFALSE),
141 fRejectPileup(kFALSE),
142 fTriggerAnalysis(0x0),
144 fCutsEvent(cutsEvent),
149 fdEdXnSigmaElecvsPt(0x0),
151 fTOFnSigmaElecvsPt(0x0),
152 fTPCcrossedRowsvsPt(0x0),
188 DefineInput(0,TChain::Class());
189 DefineOutput(1, TList::Class());
190 //DefineOutput(1, TTree::Class());
191 DefineOutput(2, TList::Class());
192 DefineOutput(3, TH1D::Class());
193 DefineOutput(4, TTree::Class());
197 fQsum = new TVector2(); // flow vector sum
201 cout<<" ************** AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron ***********"<<endl;
205 //_________________________________________________________________________________
206 void AliAnalysisTaskMultiDielectronNewTaku::UserCreateOutputObjects()
208 cout<<" ************** AliAnalysisTaskMultiDielectron::Start ***********"<<endl;
209 fListHistos.SetName("Dielectron_Histos_Multi");
210 fListTree.SetName("Dielectron_Trees_Multi");
211 fListCF.SetName("Dielectron_CF_Multi");
212 fListDielectron.SetOwner();
213 fListHistos.SetOwner();
214 fListTree.SetOwner();
218 // Add all histogram manager histogram lists to the output TList
221 if (!fListHistos.IsEmpty()||!fListCF.IsEmpty()) return; //already initialised
223 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
224 Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class();
225 // Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
227 TIter nextDie(&fListDielectron);
228 AliDielectronTaku *die=0;
229 while ( (die=static_cast<AliDielectronTaku*>(nextDie())) ){
231 if (die->GetHistogramList()) fListHistos.Add(const_cast<THashList*>(die->GetHistogramList()));
232 if (die->GetCFManagerPair()) fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer()));
233 //if (die->GetTreeList()) fListTree.Add(const_cast<THashList*>(die->GetTreeList()));
234 ///if (die->GetTreeList()) fTree = (TTree*)(die->GetTreeManager()->GetSingleTree());
237 Int_t cuts=fListDielectron.GetEntries();
238 Int_t nbins=kNbinsEvent+2*cuts;
241 fEventStat=new TH1D(Form("hEventStat_%s",fName.Data()),"Event statistics",nbins,0,nbins);
242 fEventStat->GetXaxis()->SetBinLabel(1,"Before Phys. Sel.");
243 fEventStat->GetXaxis()->SetBinLabel(2,"After Phys. Sel.");
246 fEventStat->GetXaxis()->SetBinLabel(3,"Bin3 not used");
247 fEventStat->GetXaxis()->SetBinLabel(4,"Bin4 not used");
248 fEventStat->GetXaxis()->SetBinLabel(5,"Bin5 not used");
250 if (fTriggerOnV0AND&&isESD) fEventStat->GetXaxis()->SetBinLabel(3,"V0and triggers");
251 if (fEventFilter) fEventStat->GetXaxis()->SetBinLabel(4,"After Event Filter");
252 if (fRejectPileup) fEventStat->GetXaxis()->SetBinLabel(5,"After Pileup rejection");
254 for (Int_t i=0; i<cuts; ++i){
255 fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+1)+2*i,Form("#splitline{1 candidate}{%s}",fListDielectron.At(i)->GetName()));
256 fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+2)+2*i,Form("#splitline{With >1 candidate}{%s}",fListDielectron.At(i)->GetName()));
260 if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
261 fTriggerAnalysis->EnableHistograms();
262 fTriggerAnalysis->SetAnalyzeMC(AliDielectronMC::Instance()->HasMC());
265 //// this is just test
266 //// I would like to see dE/dx, pT, and so on...
268 TList *tQAElectron = new TList();
269 tQAElectron->SetName("QAElectron");
270 tQAElectron->SetOwner();
276 float binw = (TMath::Log(max_x)-TMath::Log(min_x))/nbinx;
278 for(int ii=0;ii<nbinx+1;ii++){
279 xbin[ii] = TMath::Exp(TMath::Log(min_x) + 0.5*binw+binw*ii);
284 fEvent = new TH1D("Event","Number of Events", 60,0,60);
285 tQAElectron->Add(fEvent);
286 //fdEdXvsPt = new TH2D("dEdXvsPt","dE/dX vs. PT of TPC", 400,0, 20, 2000,0,200);
287 fdEdXvsPt = new TH2D("dEdXvsPt","dE/dX vs. PT of TPC", nbinx, xbin, 2000,0,200);
288 tQAElectron->Add(fdEdXvsPt);
289 fdEdXnSigmaElecvsPt = new TH2D("fdEdXnSigmaElecvsPt"," dE/dX normalized to electron vs. pT of TPC",
290 // 400, 0, 20, 2000, -10, 10);
291 nbinx, xbin, 2000, -10, 10);
292 tQAElectron->Add(fdEdXnSigmaElecvsPt);
293 fTOFbetavsPt = new TH2D("fTOFbetavsPt","TOF beta vs. p", 400, 0, 20, 1200, 0, 1.2);
294 tQAElectron->Add(fTOFbetavsPt);
295 fTOFnSigmaElecvsPt = new TH2D("fTOFnSigmaElecvsPt","TOF nsigma for electron", 400, 0, 20, 2000, -10, 10);
296 tQAElectron->Add(fTOFnSigmaElecvsPt);
298 fTPCcrossedRowsvsPt = new TH2D("fTTPCcrossedRowsvsPt","TPC crossed rows", 400, 0, 20, 160,0,160);
299 tQAElectron->Add(fTPCcrossedRowsvsPt);
300 fTPCchi2vsPt = new TH2D("fTTPCchi2RowsvsPt","TPC chi2", 400, 0, 20, 1000,0,200);
301 tQAElectron->Add(fTPCchi2vsPt);
304 fListHistos.Add(tQAElectron);
306 PostData(1, &fListHistos);
307 PostData(2, &fListCF);
308 PostData(3, fEventStat);
309 //PostData(4, &fListTree);
311 //PostData(1,&fListTree);
312 fTree = new TTree(Form("tree_%s",fName.Data()),"single");
319 fCutsMother = new AliESDtrackCuts;
320 fCutsMother->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst);
321 fCutsMother->SetRequireTPCRefit(kTRUE);
322 fCutsMother->SetRequireITSRefit(kTRUE);
323 fCutsMother->SetMaxDCAToVertexZ(3.0);
324 fCutsMother->SetMaxDCAToVertexXY(1.0);
325 fCutsMother->SetEtaRange( -0.9 , 0.9 );
326 fCutsMother->SetAcceptKinkDaughters(kFALSE);
327 fCutsMother->SetPtRange(0.2,10);
328 fCutsMother->SetMinNClustersTPC(70);
329 fCutsMother->SetMaxChi2PerClusterTPC(4);
332 //lee yang zeros event plane
333 //fLyzEp = new AliFlowLYZEventPlane() ;
336 fkTriggerInfo = new TObjArray(100);
340 cout<<" ************** AliAnalysisTaskMultiDielectron::UserCreateOutputObjects End ***********"<<endl;
343 //_________________________________________________________________________________
344 void AliAnalysisTaskMultiDielectronNewTaku::UserExec(Option_t *)
347 // Main loop. Called for every event
350 cout<<"Processing event "<<fNEvent<<endl;
354 //cout<<"Start UserExec"<<endl;
356 if (fListHistos.IsEmpty()&&fListCF.IsEmpty()) return;
358 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
359 Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class();
360 Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
362 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
363 if (!inputHandler) return;
365 if ( inputHandler->GetPIDResponse() ){
366 AliDielectronVarManager::SetPIDResponse( inputHandler->GetPIDResponse() );
368 //load esd pid bethe bloch parameters depending on the existance of the MC handler
369 // yes: MC parameters
370 // no: data parameters
373 if (!AliDielectronVarManager::GetESDpid()){
374 if (AliDielectronMC::Instance()->HasMC()) {
375 AliDielectronVarManager::InitESDpid();
377 AliDielectronVarManager::InitESDpid(1);
379 Double_t fAlephParam[5]={2.11543/50,
385 Double_t fAlephParam[5]={2.11543/122,
396 AliESDpid *fESDpid = new AliESDpid();
397 fESDpid->GetTPCResponse().SetBetheBlochParameters(fAlephParam[0],
402 AliDielectronVarManager::SetESDpid(fESDpid);
408 if (!AliDielectronVarManager::GetAODpidUtil()){
409 if (AliDielectronMC::Instance()->HasMC()) {
410 AliDielectronVarManager::InitAODpidUtil();
412 AliDielectronVarManager::InitAODpidUtil(1);
421 AliESDInputHandler *esdHandler=0x0;
422 if ( (esdHandler=dynamic_cast<AliESDInputHandler*>(man->GetInputEventHandler())) && esdHandler->GetESDpid() ){
423 AliDielectronVarManager::SetESDpid(esdHandler->GetESDpid());
425 //load esd pid bethe bloch parameters depending on the existance of the MC handler
426 // yes: MC parameters
427 // no: data parameters
428 if (!AliDielectronVarManager::GetESDpid()){
429 if (AliDielectronMC::Instance()->HasMC()) {
430 AliDielectronVarManager::InitESDpid();
432 AliDielectronVarManager::InitESDpid(1);
438 //////////////////////////////////////////
439 /////////////////////////////////////////
440 // just copy from hor
441 AliESDEvent *fESD = dynamic_cast<AliESDEvent*>(InputEvent());
443 AliESDRun *fRun = (AliESDRun*)fESD->GetESDRun();
444 fMag = fRun->GetMagneticField();
446 for(int itr=0; itr<AliESDRun::kNTriggerClasses;itr++){
447 fkTrigName = new TObjString();
448 fkTrigName->SetString(fRun->GetTriggerClass(itr));
449 //cout<<itr<<" "<<triggername[itr]<<endl;
450 fkTriggerInfo->AddAt(fkTrigName, itr);
457 //just dump the fired trigger class
459 AliESDHeader* head = (AliESDHeader*)fESD->GetHeader();
460 //cout<<" trigger "<<head->GetFiredTriggerInputs()<<" : "<<head->GetTriggerMask()<<" : "<<fESD->GetFiredTriggerClasses()<<" "<<endl;
461 fkTriggerMask = head->GetTriggerMask();
463 for(int itr=0; itr<AliESDRun::kNTriggerClasses;itr++){
464 if( (head->GetTriggerMask() >> itr) & 0x1 == 1 ){
465 fEvent->Fill(10+itr);
472 Bool_t isEvT = kFALSE;
474 isEvT = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()
477 isEvT = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()
478 //& AliVEvent::kSemiCentral);
479 & AliVEvent::kCentral);
481 //AliTriggerAnalysis *fTrigAna = new AliTriggerAnalysis();
484 if(fCutsEvent->IsSelected(fESD)){
486 const AliESDVertex *vertex = fESD->GetPrimaryVertex();
487 if((vertex->GetNContributors()>2)&&(TMath::Abs(vertex->GetZ())<7)) {
493 //////////////////////////////////////////
494 //// fill the number of fired triggers for each trigger types
496 isEvT = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected());
497 //AliTriggerAnalysis *fTrigAna = new AliTriggerAnalysis();
499 if(isEvT & AliVEvent::kMB) fEvent->Fill(10);
500 if(isEvT & AliVEvent::kINT7) fEvent->Fill(11);
501 if(isEvT & AliVEvent::kMUON) fEvent->Fill(12);
502 if(isEvT & AliVEvent::kHighMult) fEvent->Fill(13);
503 if(isEvT & AliVEvent::kEMC1) fEvent->Fill(14);
504 if(isEvT & AliVEvent::kCINT5) fEvent->Fill(15);
505 if(isEvT & AliVEvent::kMUSPB) fEvent->Fill(16);
506 if(isEvT & AliVEvent::kMUSHPB) fEvent->Fill(17);
507 if(isEvT & AliVEvent::kMuonLikePB) fEvent->Fill(18);
508 if(isEvT & AliVEvent::kMuonUnlikePB) fEvent->Fill(19);
509 if(isEvT & AliVEvent::kEMC7) fEvent->Fill(20);
510 if(isEvT & AliVEvent::kMUS7) fEvent->Fill(21);
511 if(isEvT & AliVEvent::kPHI1) fEvent->Fill(22);
512 if(isEvT & AliVEvent::kPHOSPb) fEvent->Fill(23);
513 if(isEvT & AliVEvent::kEMCEJE) fEvent->Fill(24);
514 if(isEvT & AliVEvent::kEMCEGA) fEvent->Fill(25);
515 if(isEvT & AliVEvent::kCentral) fEvent->Fill(26);
516 if(isEvT & AliVEvent::kSemiCentral) fEvent->Fill(27);
517 if(isEvT & AliVEvent::kDG5) fEvent->Fill(28);
518 if(isEvT & AliVEvent::kZED) fEvent->Fill(29);
519 if(isEvT & AliVEvent::kAny) fEvent->Fill(30);
523 //////////////////////////////////////////
524 //////////////////////////////////////////
527 // Was event selected ?
528 UInt_t isSelected = AliVEvent::kAny;
529 if( fSelectPhysics && inputHandler && inputHandler->GetEventSelection() ) {
530 isSelected = inputHandler->IsEventSelected();
531 isSelected&=fTriggerMask;
534 //Before physics selection
535 fEventStat->Fill(kAllEvents);
537 PostData(3,fEventStat);
540 //after physics selection
541 fEventStat->Fill(kSelectedEvents);
544 if (fTriggerOnV0AND&&isESD){
545 //if (!fTriggerAnalysis->IsOfflineTriggerFired(static_cast<AliESDEvent*>(InputEvent()), AliTriggerAnalysis::kV0AND)) return;
547 fEventStat->Fill(kV0andEvents);
551 //if (!fEventFilter->IsSelected(InputEvent())) return;
553 fEventStat->Fill(kFilteredEvents);
557 if (InputEvent()->IsPileupFromSPD(3,0.8,3.,2.,5.)) return;
559 fEventStat->Fill(kPileupEvents);
562 Bool_t isEvT1 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()
563 & AliVEvent::kCentral);
565 Bool_t isEvT2 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()
566 & AliVEvent::kSemiCentral);
569 Bool_t isEvT3 = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()
573 if(!isEvT1 && !isEvT2 && !isEvT3){
577 fkTriggerCent += 100;
588 Double_t bz = InputEvent()->GetMagneticField();
589 AliKFParticle::SetField( bz );
591 AliDielectronPID::SetCorrVal((Double_t)InputEvent()->GetRunNumber());
593 FillEvent(InputEvent());
596 //Process event in all AliDielectron instances
597 TIter nextDie(&fListDielectron);
598 AliDielectronTaku *die=0;
600 while ( (die=static_cast<AliDielectronTaku*>(nextDie())) ){
601 die->Process(InputEvent());
602 if (die->HasCandidates()){
603 Int_t ncandidates=die->GetPairArray(1)->GetEntriesFast();
604 if (ncandidates==1) fEventStat->Fill((kNbinsEvent)+2*idie);
605 else if (ncandidates>1) fEventStat->Fill((kNbinsEvent+1)+2*idie);
607 AliDielectronVarManager::Fill(InputEvent(), fgValues);
608 //Fill track information, separately for the track array candidates
609 for (Int_t ii=0; ii<2; ++ii){
610 TObjArray *obj = (TObjArray*)die->GetTrackArray(ii);
611 Int_t ntracks=obj->GetEntriesFast();
612 for (Int_t itrack=0; itrack<ntracks; ++itrack){
613 ////////////////////////////////////////////////////////////////////
614 AliDielectronVarManager::Fill(obj->UncheckedAt(itrack), fgValues);
615 ////////////////////////////////////////////////////////////////////
616 AliVTrack *trk = static_cast<AliVTrack*>(obj->UncheckedAt(itrack));
618 MomentumEnergyMatch(trk, par);
619 fgValues[AliDielectronVarManager::kE] = par[0];
620 fgValues[AliDielectronVarManager::kDeltaEta] = par[1];
621 fgValues[AliDielectronVarManager::kDeltaPhi] = par[2];
628 AliESDtrack *esdtrack = static_cast<AliESDtrack*>(obj->UncheckedAt(itrack));
629 Double_t dca[2]={-999.,-999.};
630 Double_t cov[3]={-999.,-999.,-999.};
631 Double_t kBeampiperadius=3.;
632 esdtrack->PropagateToDCA(InputEvent()->GetPrimaryVertex(),
633 InputEvent()->GetMagneticField(), kBeampiperadius, dca, cov);
634 fgValues[AliDielectronVarManager::kLegDist] = dca[1];
635 fgValues[AliDielectronVarManager::kLegDistXY] = dca[0];
636 fgValues[AliDielectronVarManager::kNclsTPC] = esdtrack->GetTPCCrossedRows();
640 AliKFParticle kfTrack = AliKFParticle(*trk, 11); //assuming electron //charge is from trk
641 /// i would like to store
642 /// X, Y, Z, Px, Py, Pz, S(decay length/mom), Chi2, NDF
643 if(kfTrack.GetNDF()!=0) fgValues[AliDielectronVarManager::kChi2NDF] = kfTrack.GetChi2()/kfTrack.GetNDF();
644 fgValues[AliDielectronVarManager::kDecayLength] = kfTrack.GetS();
645 fgValues[AliDielectronVarManager::kR] = kfTrack.GetR();
646 fgValues[AliDielectronVarManager::kThetaHE] = kfTrack.GetX();
647 fgValues[AliDielectronVarManager::kPhiHE] = kfTrack.GetY();
648 fgValues[AliDielectronVarManager::kThetaCS] = kfTrack.GetZ();
649 fgValues[AliDielectronVarManager::kPhiCS] = kfTrack.GetPhi();
650 fgValues[AliDielectronVarManager::kITSsignalSSD1] = kfTrack.GetPx();
651 fgValues[AliDielectronVarManager::kITSsignalSSD2] = kfTrack.GetPy();
652 fgValues[AliDielectronVarManager::kITSsignalSDD1] = kfTrack.GetPz();
653 fgValues[AliDielectronVarManager::kITSsignalSDD2] = kfTrack.GetP();
655 ////////////////////////////////////////////////////////////////////
656 for(int ich=0;ich<AliDielectronVarManager::kNMaxValues; ich++){
657 fgData[ich][fkNPar] = fgValues[ich];
667 //////////////////////////////////////////////////////////////////////////
668 /////////////////////////////////////////////////////////////////////////
669 //////////////////////////////////////////////////////////////////////////
671 //// fillback to single particle without trackcuts
672 for (Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++) {
673 AliESDtrack* track = fESD->GetTrack(iTracks);
675 Printf("ERROR: Could not receive track %d", iTracks);
678 if(!fCutsMother->AcceptTrack(track)) continue;
679 fdEdXvsPt->Fill(track->GetTPCmomentum(), track->GetTPCsignal());
680 fdEdXnSigmaElecvsPt->Fill(track->GetTPCmomentum(),
681 AliDielectronVarManager::GetESDpid()->NumberOfSigmasTPC(track,
683 -AliDielectronPID::GetCorrVal());
685 fTPCcrossedRowsvsPt->Fill(track->GetTPCmomentum(), track->GetTPCCrossedRows());
686 fTPCchi2vsPt->Fill(track->GetTPCmomentum(), track->GetTPCchi2());
688 /// for beta caliculaton
689 Double_t l = track->GetIntegratedLength(); // cm
690 Double_t t = track->GetTOFsignal();
691 Double_t t0 = AliDielectronVarManager::GetESDpid()->GetTOFResponse().GetTimeZero(); // ps
693 if( (l < 360. || l > 800.) || (t <= 0.) || (t0 >999990.0) ) {
697 t -= t0; // subtract the T0
699 t *= 1e-12; //ps -> s
702 beta = v / TMath::C();
705 fTOFbetavsPt->Fill(track->GetTPCmomentum(), beta);
706 //// electron cuts //////
707 if(fabs(AliDielectronVarManager::GetESDpid()->NumberOfSigmasTPC(track,AliPID::kElectron)
708 -AliDielectronPID::GetCorrVal())<3){
709 fTOFnSigmaElecvsPt->Fill(track->GetTPCmomentum(),
710 AliDielectronVarManager::GetESDpid()->NumberOfSigmasTOF(track,
719 PostData(1, &fListHistos);
720 PostData(2, &fListCF);
721 PostData(3,fEventStat);
722 //PostData(4, &fListTree);
723 //PostData(1, &fListTree);
727 //_________________________________________________________________________________
728 void AliAnalysisTaskMultiDielectronNewTaku::FinishTaskOutput()
733 cout<<" ******* AliAnalysisTaskMultiDielectronNewTaku::FinishTaskOutput() *****"<<endl;
734 TIter nextDie(&fListDielectron);
735 AliDielectronTaku *die=0;
736 while ( (die=static_cast<AliDielectronTaku*>(nextDie())) ){
737 die->SaveDebugTree();
741 //_________________________________________________________________________________
742 void AliAnalysisTaskMultiDielectronNewTaku::MomentumEnergyMatch(const AliVParticle *track, double *par){
746 Double_t matchclsE = -9999.9;
748 const AliESDtrack *esdtrack = dynamic_cast<const AliESDtrack *>(track);
749 AliESDEvent *evt = (AliESDEvent*)esdtrack->GetESDEvent();
750 Double_t magF = evt->GetMagneticField();
751 Double_t magSign = 1.0;
752 if(magF<0)magSign = -1.0;
753 if (!TGeoGlobalMagField::Instance()->GetField()) {
754 printf("Loading field map...\n");
755 //AliMagF* field = new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG);
756 AliMagF* field = new AliMagF("Maps","Maps", magSign, magSign, AliMagF::k5kG); // for 10d
757 TGeoGlobalMagField::Instance()->SetField(field);
760 AliEMCALTrack *emctrack = new AliEMCALTrack(*esdtrack);
762 emctrack->GetBxByBz(fieldB);
763 //printf("%g %g %g \n", fieldB[0], fieldB[1], fieldB[2]);
764 double min_r=99999.0;
765 double min_dphi=-9999.0;
766 double min_deta=-9999.0;
768 for(Int_t icl=0; icl<evt->GetNumberOfCaloClusters(); icl++){
769 AliVCluster *cluster = (AliVCluster*) evt->GetCaloCluster(icl);
770 if(!cluster->IsEMCAL()) continue;
771 cluster->GetPosition(clsPos);
772 if(!emctrack->PropagateToGlobal(clsPos[0],clsPos[1],clsPos[2],0.,0.) ) continue;
773 emctrack->GetXYZ(trkPos);
774 TVector3 clsPosVec(clsPos[0],clsPos[1],clsPos[2]);
775 TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]);
776 Double_t delEmcphi = clsPosVec.Phi()-trkPosVec.Phi(); // track cluster matching
777 Double_t delEmceta = clsPosVec.Eta()-trkPosVec.Eta(); // track cluster matching
778 double rmatch = sqrt(pow(delEmcphi,2)+pow(delEmceta,2));
782 min_dphi = delEmcphi;
783 min_deta = delEmceta;
784 matchclsE = cluster->E();
787 if(rmatch<0.02 && rmatch<min_r){
789 min_dphi = delEmcphi;
790 min_deta = delEmceta;
791 matchclsE = cluster->E();
803 //_________________________________________________________________________________
804 void AliAnalysisTaskMultiDielectronNewTaku::FillEvent(AliVEvent * const ev){
806 //AliKFVertex *fgKFVertex = new fgKFVertex();
807 //if (ev && ev->GetPrimaryVertex()) fgKFVertex=new AliKFVertex(*ev->GetPrimaryVertex());
810 fkRunNumber = ev->GetRunNumber();
811 fkXvPrim = ev->GetPrimaryVertex()->GetX();
812 fkYvPrim = ev->GetPrimaryVertex()->GetY();
813 fkZvPrim = ev->GetPrimaryVertex()->GetZ();
814 fkNTrk = ev->GetNumberOfTracks();
815 fkNacc = AliDielectronHelper::GetNacc(ev);
816 fkNaccTrcklts = AliDielectronHelper::GetNaccTrcklts(ev);
818 fkZDCN1E = ev->GetZDCN1Energy();
819 fkZDCP1E = ev->GetZDCP1Energy();
820 fkZDCN2E = ev->GetZDCN2Energy();
821 fkZDCP2E = ev->GetZDCP2Energy();
823 AliESDEvent *fESD = dynamic_cast<AliESDEvent*>(ev);
826 AliCentrality *esdCentrality = const_cast<AliESDEvent*>(fESD)->GetCentrality();
827 if (esdCentrality) fkCentrality = esdCentrality->GetCentralityPercentile("V0M");
829 if(fESD->GetPrimaryVertex()){
830 fkXRes = fESD->GetPrimaryVertex()->GetXRes();
831 fkYRes = fESD->GetPrimaryVertex()->GetYRes();
832 fkZRes = fESD->GetPrimaryVertex()->GetZRes();
835 if(fESD->GetVZEROData()){
838 for(int ich=0;ich<32;ich++){
839 fkV0A += fESD->GetVZEROData()->GetMultiplicityV0A(ich);
840 fkV0C += fESD->GetVZEROData()->GetMultiplicityV0C(ich);
844 ///////////////////////////////////////////////////////////////////////
845 ///////////////////////////////////////////////////////////////////////
846 /////////////// get event plane ///////////////////////////////////////
847 ///////////////////////////////////////////////////////////////////////
848 AliEventplane *fEventPlane = (AliEventplane*)fESD->GetEventplane();
850 fkRP = fEventPlane->GetEventplane("V0", fESD,2);
853 fkRP=-999; fkRPQx=-999; fkRPQy=-999;
854 fkRPsub1=-999; fkRPsub1Qx=-999; fkRPsub1Qy=-999;
855 fkRPsub2=-999; fkRPsub2Qx=-999; fkRPsub2Qy=-999;
859 fkRP = fEventPlane->GetEventplane("Q");
860 if(fEventPlane->GetQVector()){
861 fkRPQx = fEventPlane->GetQVector()->X();
862 fkRPQy = fEventPlane->GetQVector()->Y();
864 if(fEventPlane->GetQsub1()){
865 fkRPsub1 = fEventPlane->GetQsub1()->Phi()/2;
866 fkRPsub1Qx = fEventPlane->GetQsub1()->X();
867 fkRPsub1Qy = fEventPlane->GetQsub1()->Y();
869 if(fEventPlane->GetQsub2()){
870 fkRPsub2 = fEventPlane->GetQsub2()->Phi()/2;
871 fkRPsub2Qx = fEventPlane->GetQsub2()->X();
872 fkRPsub2Qy = fEventPlane->GetQsub2()->Y();
875 fkQsubRes = fEventPlane->GetQsubRes();
876 cout<<fkRP<<" "<<fkRPQx<<" "<<fkRPQy<<" "<<fkRPsub1<<" "<<fkRPsub1Qx<<" "<<fkRPsub1Qy<<" "
877 <<fkRPsub2<<" "<<fkRPsub2Qx<<" "<<fkRPsub2Qy<<endl;
879 cout<<fEventPlane->GetEventplane("Q")<<endl;
880 TVector2 *vec2 = (TVector2*)fEventPlane->GetQVector();
881 if(!vec2){ cout<<" no EP information "<<endl;}
883 Double_t dRPEP = vec2->Phi()/2;
890 fFlowEvent = dynamic_cast<AliFlowEventSimple*>(GetInputData(0));
893 //get the Q vector from the FlowEvent
894 AliFlowVector vQ = fFlowEvent->GetQ();
895 //if (vQ.X()== 0. && vQ.Y()== 0. ) { cout<<"Q vector is NULL!"<<endl; } //coding violation
896 //Weight with the multiplicity
899 if (TMath::AreEqualAbs(vQ.GetMult(),0.0,1e-10)) {
900 dQX = vQ.X()/vQ.GetMult();
901 dQY = vQ.Y()/vQ.GetMult();
902 } else {cerr<<"vQ.GetMult() is zero!"<<endl; }
906 fLyzEp->CalculateRPandW(vQ);
907 Double_t dWR = fLyzEp->GetWR();
909 Double_t dRP = fLyzEp->GetPsi();
910 //plot difference between event plane from EP-method and LYZ-method
911 Double_t dRPEP = vQ.Phi()/2; //gives distribution from (0 to pi)
912 //Double_t dRPEP = 0.5*TMath::ATan2(vQ.Y(),vQ.X()); //gives distribution from (-pi/2 to pi/2)
914 Double_t dDeltaPhi = dRPEP - dRP;
915 if (dDeltaPhi < 0.) { dDeltaPhi += TMath::Pi(); } //to shift distribution from (-pi/2 to pi/2) to (0 to pi)
917 cout<<dRPEP<<" "<<dRP<<" "<<endl;
920 cout<<" no fFlowEvent "<<endl;
931 //_________________________________________________________________________________
932 void AliAnalysisTaskMultiDielectronNewTaku::SetBranches(TTree *t){
934 t->Branch("kNEvent",&fNEvent,"kNEvent/I");
935 t->Branch("kMag",&fMag,"kMag/D");
936 t->Branch("fkTriggerInfo","TObjArray",&fkTriggerInfo);
937 t->Branch("kTriggerMask",&fkTriggerMask,"kTriggerMask/D");
938 t->Branch("kTriggerCent",&fkTriggerCent,"kTriggerCent/I");
939 t->Branch("fkNCut", &fkNCut, "fkNCut/D");
940 t->Branch("fkRunNumber", &fkRunNumber, "fkRunNumber/D");
941 t->Branch("fkCentrality", &fkCentrality, "fkCentrality/D");
942 t->Branch("fkXvPrim", &fkXvPrim, "fkXvPrim/D");
943 t->Branch("fkYvPrim", &fkYvPrim, "fkYvPrim/D");
944 t->Branch("fkZvPrim", &fkZvPrim, "fkZvPrim/D");
945 t->Branch("fkXRes", &fkXRes, "fkXRes/D");
946 t->Branch("fkYRes", &fkYRes, "fkYRes/D");
947 t->Branch("fkZRes", &fkZRes, "fkZRes/D");
948 t->Branch("fkNTrk", &fkNTrk, "fkNTrk/D");
949 t->Branch("fkTracks", &fkTracks, "fkTracks/D");
950 t->Branch("fkNacc", &fkNacc, "fkNacc/D");
951 t->Branch("fkNaccTrcklts", &fkNaccTrcklts, "fkNaccTrcklts/D");
952 t->Branch("fkNch", &fkNch, "fkNch/D");
953 t->Branch("fkZDCN1E", &fkZDCN1E, "fkZDCN1E/D");
954 t->Branch("fkZDCP1E", &fkZDCP1E, "fkZDCP1E/D");
955 t->Branch("fkZDCN2E", &fkZDCN2E, "fkZDCN2E/D");
956 t->Branch("fkZDCP2E", &fkZDCP2E, "fkZDCP2E/D");
957 t->Branch("fkV0A", &fkV0A, "fkV0A/D");
958 t->Branch("fkV0C", &fkV0C, "fkV0C/D");
960 t->Branch("fkRP",&fkRP,"fkRP/D");
961 t->Branch("fkRPQx",&fkRPQx,"fkRPQx/D");
962 t->Branch("fkRPQy",&fkRPQy,"fkRPQy/D");
963 t->Branch("fkRPsub1",&fkRPsub1,"fkRPsub1/D");
964 t->Branch("fkRPsub1Qx",&fkRPsub1Qx,"fkRPsub1Qx/D");
965 t->Branch("fkRPsub1Qy",&fkRPsub1Qy,"fkRPsub1Qy/D");
966 t->Branch("fkRPsub2",&fkRPsub2,"fkRPsub2/D");
967 t->Branch("fkRPsub2Qx",&fkRPsub2Qx,"fkRPsub2Qx/D");
968 t->Branch("fkRPsub2Qy",&fkRPsub2Qy,"fkRPsub2Qy/D");
969 t->Branch("fkQsubRes",&fkQsubRes,"fkQsubRes/D");
972 t->Branch("fkNPar", &fkNPar, "fkNPar/I");
973 t->Branch("kPx",fgData[AliDielectronVarManager::kPx],"kPx[fkNPar]/D");
974 t->Branch("kPy",fgData[AliDielectronVarManager::kPy],"kPy[fkNPar]/D");
975 t->Branch("kPz",fgData[AliDielectronVarManager::kPz],"kPz[fkNPar]/D");
976 t->Branch("kPt",fgData[AliDielectronVarManager::kPt],"kPt[fkNPar]/D");
977 t->Branch("kP",fgData[AliDielectronVarManager::kP],"kP[fkNPar]/D");
978 t->Branch("kXv",fgData[AliDielectronVarManager::kXv],"kXv[fkNPar]/D");
979 t->Branch("kYv",fgData[AliDielectronVarManager::kYv],"kYv[fkNPar]/D");
980 t->Branch("kZv",fgData[AliDielectronVarManager::kZv],"kZv[fkNPar]/D");
981 t->Branch("kOneOverPt",fgData[AliDielectronVarManager::kOneOverPt],"kOneOverPt[fkNPar]/D");
982 t->Branch("kPhi",fgData[AliDielectronVarManager::kPhi],"kPhi[fkNPar]/D");
983 t->Branch("kTheta",fgData[AliDielectronVarManager::kTheta],"kTheta[fkNPar]/D");
984 t->Branch("kEta",fgData[AliDielectronVarManager::kEta],"kEta[fkNPar]/D");
985 t->Branch("kY",fgData[AliDielectronVarManager::kY],"kY[fkNPar]/D");
986 t->Branch("kE",fgData[AliDielectronVarManager::kE],"kE[fkNPar]/D");
987 t->Branch("kM",fgData[AliDielectronVarManager::kM],"kM[fkNPar]/D");
988 t->Branch("kCharge",fgData[AliDielectronVarManager::kCharge],"kCharge[fkNPar]/D");
989 t->Branch("kNclsITS",fgData[AliDielectronVarManager::kNclsITS],"kNclsITS[fkNPar]/D");
990 t->Branch("kNclsTPC",fgData[AliDielectronVarManager::kNclsTPC],"kNclsTPC[fkNPar]/D");
991 t->Branch("kNclsTPCiter1",fgData[AliDielectronVarManager::kNclsTPCiter1],"kNclsTPCiter1[fkNPar]/D");
992 t->Branch("kNFclsTPC",fgData[AliDielectronVarManager::kNFclsTPC],"kNFclsTPC[fkNPar]/D");
993 t->Branch("kNFclsTPCr",fgData[AliDielectronVarManager::kNFclsTPCr],"kNFclsTPCr[fkNPar]/D");
994 t->Branch("kNFclsTPCrFrac",fgData[AliDielectronVarManager::kNFclsTPCrFrac],"kNFclsTPCrFrac[fkNPar]/D");
995 t->Branch("kTPCsignalN",fgData[AliDielectronVarManager::kTPCsignalN],"kTPCsignalN[fkNPar]/D");
996 t->Branch("kTPCsignalNfrac",fgData[AliDielectronVarManager::kTPCsignalNfrac],"kTPCsignalNfrac[fkNPar]/D");
997 t->Branch("kTPCchi2Cl",fgData[AliDielectronVarManager::kTPCchi2Cl],"kTPCchi2Cl[fkNPar]/D");
998 t->Branch("kTrackStatus",fgData[AliDielectronVarManager::kTrackStatus],"kTrackStatus[fkNPar]/D");
999 t->Branch("kNclsTRD",fgData[AliDielectronVarManager::kNclsTRD],"kNclsTRD[fkNPar]/D");
1000 t->Branch("kTRDntracklets",fgData[AliDielectronVarManager::kTRDntracklets],"kTRDntracklets[fkNPar]/D");
1001 t->Branch("kTRDpidQuality",fgData[AliDielectronVarManager::kTRDpidQuality],"kTRDpidQuality[fkNPar]/D");
1002 t->Branch("kTRDprobEle",fgData[AliDielectronVarManager::kTRDprobEle],"kTRDprobEle[fkNPar]/D");
1003 t->Branch("kTRDprobPio",fgData[AliDielectronVarManager::kTRDprobPio],"kTRDprobPio[fkNPar]/D");
1004 t->Branch("kImpactParXY",fgData[AliDielectronVarManager::kImpactParXY],"kImpactParXY[fkNPar]/D");
1005 t->Branch("kImpactParZ",fgData[AliDielectronVarManager::kImpactParZ],"kImpactParZ[fkNPar]/D");
1006 t->Branch("kTrackLength",fgData[AliDielectronVarManager::kTrackLength],"kTrackLength[fkNPar]/D");
1007 t->Branch("kPdgCode",fgData[AliDielectronVarManager::kPdgCode],"kPdgCode[fkNPar]/D");
1008 t->Branch("kPdgCodeMother",fgData[AliDielectronVarManager::kPdgCodeMother],"kPdgCodeMother[fkNPar]/D");
1009 t->Branch("kPdgCodeGrandMother",fgData[AliDielectronVarManager::kPdgCodeGrandMother],"kPdgCodeGrandMother[fkNPar]/D");
1010 t->Branch("kNumberOfDaughters",fgData[AliDielectronVarManager::kNumberOfDaughters],"kNumberOfDaughters[fkNPar]/D");
1011 t->Branch("kHaveSameMother",fgData[AliDielectronVarManager::kHaveSameMother],"kHaveSameMother[fkNPar]/D");
1012 t->Branch("kIsJpsiPrimary",fgData[AliDielectronVarManager::kIsJpsiPrimary],"kIsJpsiPrimary[fkNPar]/D");
1013 t->Branch("kITSsignal",fgData[AliDielectronVarManager::kITSsignal],"kITSsignal[fkNPar]/D");
1014 t->Branch("kITSsignalSSD1",fgData[AliDielectronVarManager::kITSsignalSSD1],"kITSsignalSSD1[fkNPar]/D");
1015 t->Branch("kITSsignalSSD2",fgData[AliDielectronVarManager::kITSsignalSSD2],"kITSsignalSSD2[fkNPar]/D");
1016 t->Branch("kITSsignalSDD1",fgData[AliDielectronVarManager::kITSsignalSDD1],"kITSsignalSDD1[fkNPar]/D");
1017 t->Branch("kITSsignalSDD2",fgData[AliDielectronVarManager::kITSsignalSDD2],"kITSsignalSDD2[fkNPar]/D");
1018 t->Branch("kITSclusterMap",fgData[AliDielectronVarManager::kITSclusterMap],"kITSclusterMap[fkNPar]/D");
1019 t->Branch("kITSnSigmaEle",fgData[AliDielectronVarManager::kITSnSigmaEle],"kITSnSigmaEle[fkNPar]/D");
1020 t->Branch("kITSnSigmaPio",fgData[AliDielectronVarManager::kITSnSigmaPio],"kITSnSigmaPio[fkNPar]/D");
1021 t->Branch("kITSnSigmaMuo",fgData[AliDielectronVarManager::kITSnSigmaMuo],"kITSnSigmaMuo[fkNPar]/D");
1022 t->Branch("kITSnSigmaKao",fgData[AliDielectronVarManager::kITSnSigmaKao],"kITSnSigmaKao[fkNPar]/D");
1023 t->Branch("kITSnSigmaPro",fgData[AliDielectronVarManager::kITSnSigmaPro],"kITSnSigmaPro[fkNPar]/D");
1024 t->Branch("kPIn",fgData[AliDielectronVarManager::kPIn],"kPIn[fkNPar]/D");
1025 t->Branch("kTPCsignal",fgData[AliDielectronVarManager::kTPCsignal],"kTPCsignal[fkNPar]/D");
1026 t->Branch("kTOFsignal",fgData[AliDielectronVarManager::kTOFsignal],"kTOFsignal[fkNPar]/D");
1027 t->Branch("kTOFbeta",fgData[AliDielectronVarManager::kTOFbeta],"kTOFbeta[fkNPar]/D");
1028 t->Branch("kTPCnSigmaEle",fgData[AliDielectronVarManager::kTPCnSigmaEle],"kTPCnSigmaEle[fkNPar]/D");
1029 t->Branch("kTPCnSigmaPio",fgData[AliDielectronVarManager::kTPCnSigmaPio],"kTPCnSigmaPio[fkNPar]/D");
1030 t->Branch("kTPCnSigmaMuo",fgData[AliDielectronVarManager::kTPCnSigmaMuo],"kTPCnSigmaMuo[fkNPar]/D");
1031 t->Branch("kTPCnSigmaKao",fgData[AliDielectronVarManager::kTPCnSigmaKao],"kTPCnSigmaKao[fkNPar]/D");
1032 t->Branch("kTPCnSigmaPro",fgData[AliDielectronVarManager::kTPCnSigmaPro],"kTPCnSigmaPro[fkNPar]/D");
1033 t->Branch("kTOFnSigmaEle",fgData[AliDielectronVarManager::kTOFnSigmaEle],"kTOFnSigmaEle[fkNPar]/D");
1034 t->Branch("kTOFnSigmaPio",fgData[AliDielectronVarManager::kTOFnSigmaPio],"kTOFnSigmaPio[fkNPar]/D");
1035 t->Branch("kTOFnSigmaMuo",fgData[AliDielectronVarManager::kTOFnSigmaMuo],"kTOFnSigmaMuo[fkNPar]/D");
1036 t->Branch("kTOFnSigmaKao",fgData[AliDielectronVarManager::kTOFnSigmaKao],"kTOFnSigmaKao[fkNPar]/D");
1037 t->Branch("kTOFnSigmaPro",fgData[AliDielectronVarManager::kTOFnSigmaPro],"kTOFnSigmaPro[fkNPar]/D");
1038 t->Branch("kKinkIndex0",fgData[AliDielectronVarManager::kKinkIndex0],"kKinkIndex0[fkNPar]/D");
1039 t->Branch("kChi2NDF",fgData[AliDielectronVarManager::kChi2NDF],"kChi2NDF[fkNPar]/D");
1040 t->Branch("kDecayLength",fgData[AliDielectronVarManager::kDecayLength],"kDecayLength[fkNPar]/D");
1041 t->Branch("kR",fgData[AliDielectronVarManager::kR],"kR[fkNPar]/D");
1042 t->Branch("kOpeningAngle",fgData[AliDielectronVarManager::kOpeningAngle],"kOpeningAngle[fkNPar]/D");
1043 t->Branch("kThetaHE",fgData[AliDielectronVarManager::kThetaHE],"kThetaHE[fkNPar]/D");
1044 t->Branch("kPhiHE",fgData[AliDielectronVarManager::kPhiHE],"kPhiHE[fkNPar]/D");
1045 t->Branch("kThetaCS",fgData[AliDielectronVarManager::kThetaCS],"kThetaCS[fkNPar]/D");
1046 t->Branch("kPhiCS",fgData[AliDielectronVarManager::kPhiCS],"kPhiCS[fkNPar]/D");
1047 t->Branch("kLegDist",fgData[AliDielectronVarManager::kLegDist],"kLegDist[fkNPar]/D");
1048 t->Branch("kLegDistXY",fgData[AliDielectronVarManager::kLegDistXY],"kLegDistXY[fkNPar]/D");
1049 t->Branch("kDeltaEta",fgData[AliDielectronVarManager::kDeltaEta],"kDeltaEta[fkNPar]/D");
1050 t->Branch("kDeltaPhi",fgData[AliDielectronVarManager::kDeltaPhi],"kDeltaPhi[fkNPar]/D");
1051 t->Branch("kMerr",fgData[AliDielectronVarManager::kMerr],"kMerr[fkNPar]/D");
1052 t->Branch("kDCA",fgData[AliDielectronVarManager::kDCA],"kDCA[fkNPar]/D");
1053 t->Branch("kPairType",fgData[AliDielectronVarManager::kPairType],"kPairType[fkNPar]/D");
1054 t->Branch("kPseudoProperTime",fgData[AliDielectronVarManager::kPseudoProperTime],"kPseudoProperTime[fkNPar]/D");
1055 t->Branch("kXvPrim",fgData[AliDielectronVarManager::kXvPrim],"kXvPrim=kPairMax[fkNPar]/D");
1056 t->Branch("kYvPrim",fgData[AliDielectronVarManager::kYvPrim],"kYvPrim[fkNPar]/D");
1057 t->Branch("kZvPrim",fgData[AliDielectronVarManager::kZvPrim],"kZvPrim[fkNPar]/D");
1058 t->Branch("kXRes",fgData[AliDielectronVarManager::kXRes],"kXRes[fkNPar]/D");
1059 t->Branch("kYRes",fgData[AliDielectronVarManager::kYRes],"kYRes[fkNPar]/D");
1060 t->Branch("kZRes",fgData[AliDielectronVarManager::kZRes],"kZRes[fkNPar]/D");
1061 t->Branch("kNTrk",fgData[AliDielectronVarManager::kNTrk],"kNTrk[fkNPar]/D");
1062 t->Branch("kTracks",fgData[AliDielectronVarManager::kTracks],"kTracks[fkNPar]/D");
1063 t->Branch("kNacc",fgData[AliDielectronVarManager::kNacc],"kNacc[fkNPar]/D");
1064 t->Branch("kNaccTrcklts",fgData[AliDielectronVarManager::kNaccTrcklts],"kNaccTrcklts[fkNPar]/D");
1065 t->Branch("kNch",fgData[AliDielectronVarManager::kNch],"kNch[fkNPar]/D");
1066 t->Branch("kCentrality",fgData[AliDielectronVarManager::kCentrality],"kCentrality[fkNPar]/D");
1067 t->Branch("kNevents",fgData[AliDielectronVarManager::kNevents],"kNevents[fkNPar]/D");