]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/AliAnalysisTaskSECharmFraction.cxx
Cleanup the code. Fix memory leak. Now inherit from AliAnalysisTaskSE (Antoine, Phili...
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSECharmFraction.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-2009, 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 /* $Id$ */
17
18 /////////////////////////////////////////////////////////////
19 //
20 // Class AliAnalysisTaskSECharmFraction
21 // AliAnalysisTaskSE for the extraction of the fraction of prompt charm
22 // using the charm hadron impact parameter to the primary vertex
23 //
24 // Author: Andrea Rossi, andrea.rossi@pd.infn.it
25 /////////////////////////////////////////////////////////////
26
27
28 #include <TH1F.h>
29 #include <TH2F.h>
30 #include <THnSparse.h>
31 #include <TDatabasePDG.h>
32 #include <TMath.h>
33 #include <TROOT.h>
34 #include "AliAODEvent.h"
35 #include "AliAODRecoDecayHF2Prong.h"
36 #include "AliAODRecoDecayHF.h"
37 #include "AliAODRecoDecay.h"
38 #include "AliAnalysisDataSlot.h"
39 #include "AliAnalysisDataContainer.h"
40 #include "AliAODTrack.h"
41 #include "AliAODHandler.h"
42 #include "AliESDtrack.h"
43 #include "AliAODVertex.h"
44 #include "AliESDVertex.h"
45 #include "AliVertexerTracks.h"
46 #include "AliAODMCParticle.h"
47 #include "AliAODPid.h"
48 #include "AliTPCPIDResponse.h"
49 #include "AliAODMCHeader.h"
50 #include "AliAnalysisVertexingHF.h"
51 #include "AliAnalysisTaskSECharmFraction.h"
52 #include "AliRDHFCutsD0toKpi.h"
53 #include "AliAODInputHandler.h"
54 #include "AliAnalysisManager.h"
55
56 class TCanvas;
57 class TTree;
58 class TChain;
59 class AliAnalysisTaskSE;
60
61
62 ClassImp(AliAnalysisTaskSECharmFraction)
63  
64 //________________________________________________________________________
65   AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction() 
66     : AliAnalysisTaskSE(),
67       fCutsLoose(0),
68       fCutsTight(0),
69       fFastAnalysis(1),
70       fReadMC(kFALSE),
71       fsplitMassD0D0bar(kTRUE),
72       fLikeSign(kFALSE),
73       fusePID(kTRUE),
74       fmD0PDG(),
75       fnbins(1),
76       fptbins(0),
77       fNtrMaxforVtx(-1),
78       fptAll(),                          
79       fptAllSq(),                        
80       fptMax(),
81       fAcceptanceCuts(),
82       fsignalInvMassCut(),
83       flargeInvMassCut(),
84       fsidebandInvMassCut(),
85       fsidebandInvMassWindow(),
86       fUseMC(kTRUE),
87       fNentries(0),
88       fSignalType(0),
89       fSignalTypeLsCuts(0),
90       fSignalTypeTghCuts(0),
91       flistMCproperties(0),
92       flistNoCutsSignal(0),
93       flistNoCutsBack(0),
94       flistNoCutsFromB(0),
95       flistNoCutsFromDstar(0),
96       flistNoCutsOther(0),
97       flistLsCutsSignal(0),
98       flistLsCutsBack(0),
99       flistLsCutsFromB(0),
100       flistLsCutsFromDstar(0),
101       flistLsCutsOther(0),
102       flistTghCutsSignal(0),
103       flistTghCutsBack(0),
104       flistTghCutsFromB(0),
105       flistTghCutsFromDstar(0),
106       flistTghCutsOther(0)
107    
108 {
109   //Default constructor
110 }
111 //________________________________________________________________________
112   AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name) 
113     : AliAnalysisTaskSE(name),
114       fCutsLoose(0x0),
115       fCutsTight(0x0),
116       fFastAnalysis(1),
117       fReadMC(kFALSE),
118       fsplitMassD0D0bar(kTRUE),
119       fLikeSign(kFALSE),
120       fusePID(kTRUE),
121       fmD0PDG(),
122       fnbins(1),
123       fptbins(0),
124       fNtrMaxforVtx(-1),
125       fptAll(),                          
126       fptAllSq(),                        
127       fptMax(),
128       fAcceptanceCuts(),
129       fsignalInvMassCut(-1.),
130       flargeInvMassCut(-1.),
131       fsidebandInvMassCut(-1.),
132       fsidebandInvMassWindow(-1.),
133       fUseMC(kFALSE),
134       fNentries(0),
135       fSignalType(0),
136       fSignalTypeLsCuts(0),
137       fSignalTypeTghCuts(0),
138       flistMCproperties(0),
139       flistNoCutsSignal(0),
140       flistNoCutsBack(0),
141       flistNoCutsFromB(0),
142       flistNoCutsFromDstar(0),
143       flistNoCutsOther(0),
144       flistLsCutsSignal(0),
145       flistLsCutsBack(0),
146       flistLsCutsFromB(0),
147       flistLsCutsFromDstar(0),
148       flistLsCutsOther(0),
149       flistTghCutsSignal(0),
150       flistTghCutsBack(0),
151       flistTghCutsFromB(0),
152       flistTghCutsFromDstar(0),
153       flistTghCutsOther(0)
154    
155 {
156   // Constructor
157  
158   // Define input and output slots here
159   // Input slot #0 works with a TChain
160   // Output slot #0 writes into a TH1 container
161
162   //Standard pt bin
163   fnbins=SetStandardCuts(fptbins);// THIS TO SET NBINS AND BINNING
164  
165   DefineOutput(1, TH1F::Class());
166   DefineOutput(2, TH1F::Class());
167   DefineOutput(3, TH1F::Class());
168   DefineOutput(4, TH1F::Class());
169   for(Int_t j=5;j<21;j++){
170     DefineOutput(j, TList::Class());
171   }
172
173   // Output slot for the Cut Objects 
174   DefineOutput(21,AliRDHFCutsD0toKpi::Class());  //My private output
175   DefineOutput(22,AliRDHFCutsD0toKpi::Class());  //My private output
176
177 }
178
179
180 AliAnalysisTaskSECharmFraction::AliAnalysisTaskSECharmFraction(const char *name,AliRDHFCutsD0toKpi *cutsA,AliRDHFCutsD0toKpi *cutsB) 
181   : AliAnalysisTaskSE(name),
182     fCutsLoose(0),
183     fCutsTight(0),
184     fFastAnalysis(1),
185     fReadMC(kFALSE),
186     fsplitMassD0D0bar(kTRUE),
187     fLikeSign(kFALSE),
188     fusePID(kTRUE),
189     fmD0PDG(),
190     fnbins(1),
191     fptbins(0),
192     fNtrMaxforVtx(-1),
193     fptAll(),                          
194     fptAllSq(),                        
195     fptMax(),
196     fAcceptanceCuts(),
197     fsignalInvMassCut(-1.),
198     flargeInvMassCut(-1.),
199     fsidebandInvMassCut(-1.),
200     fsidebandInvMassWindow(-1.),
201     fUseMC(kFALSE),
202     fNentries(0),
203     fSignalType(0),
204     fSignalTypeLsCuts(0),
205     fSignalTypeTghCuts(0),
206     flistMCproperties(0),
207     flistNoCutsSignal(0),
208     flistNoCutsBack(0),
209     flistNoCutsFromB(0),
210     flistNoCutsFromDstar(0),
211     flistNoCutsOther(0),
212     flistLsCutsSignal(0),
213     flistLsCutsBack(0),
214     flistLsCutsFromB(0),
215     flistLsCutsFromDstar(0),
216     flistLsCutsOther(0),
217     flistTghCutsSignal(0),
218     flistTghCutsBack(0),
219     flistTghCutsFromB(0),
220     flistTghCutsFromDstar(0),
221     flistTghCutsOther(0)
222 {
223   // Constructor
224   if(fCutsTight){
225     delete fCutsTight;fCutsTight=NULL;
226   }
227   if(fCutsLoose){
228     delete fCutsLoose;fCutsLoose=NULL;
229   }
230   
231   //Check consistency between sets of cuts:
232   if(cutsA->GetNPtBins()!=cutsB->GetNPtBins()){
233     printf("Different number of pt bins between the two sets of cuts: SWITCH TO STANDARD CUTS \n");
234     fnbins=SetStandardCuts(fptbins);
235   }
236   else{
237     fCutsTight=new AliRDHFCutsD0toKpi(*cutsA);
238     fCutsLoose=new AliRDHFCutsD0toKpi(*cutsB);
239     for(Int_t j=0;j<cutsA->GetNPtBins();j++){
240       if(TMath::Abs(cutsA->GetPtBinLimits()[j]-cutsB->GetPtBinLimits()[j])>1.e-7){
241         printf("Different pt bin limits in the two set of cuts: use the first as reference \n");
242         fCutsLoose->SetPtBins(cutsA->GetNPtBins(),cutsA->GetPtBinLimits());
243         break;
244       }     
245     }
246     SetPtBins(fCutsTight->GetNPtBins(),fCutsTight->GetPtBinLimits());   
247   }
248   
249   // Output slot #0 writes into a TH1 container
250   DefineOutput(1, TH1F::Class());
251   DefineOutput(2, TH1F::Class());
252   DefineOutput(3, TH1F::Class());
253   DefineOutput(4, TH1F::Class());
254   for(Int_t j=5;j<21;j++){
255
256     DefineOutput(j, TList::Class());
257   }
258  // Output slot for the Cut Objects 
259   DefineOutput(21,AliRDHFCutsD0toKpi::Class());  //My private output
260   DefineOutput(22,AliRDHFCutsD0toKpi::Class());  //My private output
261  
262 }
263
264 //________________________________________________________________________
265 AliAnalysisTaskSECharmFraction::~AliAnalysisTaskSECharmFraction()
266 { //Destructor 
267   
268   if (fCutsTight) {   
269     delete fCutsTight;
270     fCutsTight = 0;
271   }
272   if (fCutsLoose) {  
273     delete fCutsLoose;
274     fCutsLoose = 0;
275   }
276   if(fptbins){
277     delete fptbins;
278     fptbins =0;
279   }
280   /*  if(fAcceptanceCuts){
281     delete fAcceptanceCuts;
282     fAcceptanceCuts=0;
283     }*/
284   if (fNentries) {
285     delete fNentries;
286     fNentries = 0;
287   }   
288   if (fSignalType) {
289     delete fSignalType;
290     fSignalType = 0;
291   } 
292   if (fSignalTypeLsCuts) {
293     delete fSignalTypeLsCuts;
294     fSignalTypeLsCuts = 0;
295   } 
296   if (fSignalTypeTghCuts) {
297     delete fSignalTypeTghCuts;
298     fSignalTypeTghCuts = 0;
299   } 
300   if(flistMCproperties){
301     flistMCproperties->Delete();
302     delete flistMCproperties;
303     flistMCproperties=0;
304  }
305   if(flistNoCutsSignal){
306     flistNoCutsSignal->Delete();
307     delete flistNoCutsSignal;
308     flistNoCutsSignal=0;
309   }
310   if(flistNoCutsBack){
311     flistNoCutsBack->Delete();
312     delete flistNoCutsBack;
313     flistNoCutsBack=0;
314   }
315   if(flistNoCutsFromB){
316     flistNoCutsFromB->Delete();
317     delete flistNoCutsFromB;
318     flistNoCutsFromB=0;
319   }
320   if(flistNoCutsFromDstar){
321     flistNoCutsFromDstar->Delete();
322     delete flistNoCutsFromDstar;
323     flistNoCutsFromDstar=0;
324   }
325   if(flistNoCutsOther){
326     flistNoCutsOther->Delete();
327     delete flistNoCutsOther;
328     flistNoCutsOther=0;
329   }
330   
331  if(flistLsCutsSignal){
332    flistLsCutsSignal->Delete();
333     delete flistLsCutsSignal;
334     flistLsCutsSignal=0;
335   }
336   if(flistLsCutsBack){
337     flistLsCutsBack->Delete();
338     delete flistLsCutsBack;
339     flistLsCutsBack=0;
340   }
341   if(flistLsCutsFromB){
342     flistLsCutsFromB->Delete();
343     delete flistLsCutsFromB;
344     flistLsCutsFromB=0;
345   }
346   if(flistLsCutsFromDstar){
347     flistLsCutsFromDstar->Delete();
348     delete flistLsCutsFromDstar;
349     flistLsCutsFromDstar=0;
350   }
351   if(flistLsCutsOther){
352     flistLsCutsOther->Delete();
353     delete flistLsCutsOther;
354     flistLsCutsOther=0;
355   }
356   
357  if(flistTghCutsSignal){
358    flistTghCutsSignal->Delete();
359     delete flistTghCutsSignal;
360     flistTghCutsSignal=0;
361   }
362   if(flistTghCutsBack){
363     flistTghCutsBack->Delete();
364     delete flistTghCutsBack;
365     flistTghCutsBack=0;
366   }
367   if(flistTghCutsFromB){
368     flistTghCutsFromB->Delete();
369     delete flistTghCutsFromB;
370     flistTghCutsFromB=0;
371   }
372   if(flistTghCutsFromDstar){
373     flistTghCutsFromDstar->Delete();
374     delete flistTghCutsFromDstar;
375     flistTghCutsFromDstar=0;
376   }
377   if(flistTghCutsOther){
378     flistTghCutsOther->Delete();
379     delete flistTghCutsOther;
380     flistTghCutsOther=0;
381   }
382   
383   
384 }  
385
386
387 //________________________________________________________________________
388 void AliAnalysisTaskSECharmFraction::Init()
389 {
390   // Initialization
391   
392   if(fDebug > 1) printf("AnalysisTaskSED0Mass::Init() \n");
393   fmD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
394   
395   //  gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C");
396   // gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/D0fromBSetCuts.C");
397   // 2 sets of dedicated cuts: fCutsTight is assumed as the standard cut object
398   
399   // SetAcceptanceCut();
400   if(fNtrMaxforVtx<0)SetNMaxTrForVtx(3); //DEFAULT : NO SELECTION
401   if(fsignalInvMassCut<0.||flargeInvMassCut<0.||fsidebandInvMassCut<0.||fsidebandInvMassWindow<0.){
402     printf("AliAnalysisTaskSECharmFraction: Not All info for mass selection provided: switch to default values \n");
403     SetStandardMassSelection();
404   }
405   
406   AliRDHFCutsD0toKpi* copyfCutsTight=new AliRDHFCutsD0toKpi(*fCutsTight);
407   const char* nameoutputTight=GetOutputSlot(21)->GetContainer()->GetName();
408   copyfCutsTight->SetName(nameoutputTight);
409   AliRDHFCutsD0toKpi* copyfCutsLoose=new AliRDHFCutsD0toKpi(*fCutsLoose);
410   const char* nameoutputLoose=GetOutputSlot(22)->GetContainer()->GetName();
411   copyfCutsLoose->SetName(nameoutputLoose);
412   // Post the data
413   PostData(21,copyfCutsTight);  
414   PostData(22,copyfCutsLoose);
415   
416   return;
417 }
418
419 //________________________________________________________________________
420 void AliAnalysisTaskSECharmFraction::UserCreateOutputObjects()
421 {
422   // Create histograms
423   // Called once
424   
425   // ################ NAMING SCHEME ###################################
426   //            LISTS NAMING SCHEME
427   // "list" + cut selection string + MC selection string
428   //      cut strings:  "NC" =nocuts, "LSC"= loose cuts, "TGHC"= tight cuts
429   //      MC sel. strings: "sign"= D0 from c quark
430   //                       "fromDstar" = D0 from Dstar from c quark
431   //                       "fromB"= D0from B decay (->from b quark) + D0from Dstar from B
432   //                       "back"= backgroun, generic except the cas "other"
433   //                       "other"= background case for candidates made of a pion and a kaon coming from the same D0 (in 4 prong) or from D+
434   //
435   //           HISTS NAMING SCHEME 
436   // 
437   //  "h" + specific name + cut selection string + MC selection string + (InvMass region string) + (pt string)
438   //
439   //        cut selection strings    = those for lists
440   //        MC selection strings     = those for lists
441   //        inv mass region strings  : "PM" or "SB" for global properties and pt integrated histos
442   //                                   "_PkMss" or "_SBMss" for impact par. pt dependent histos
443   //                   pt string     : "_pt" + integer number of ptbin
444   //
445   //###################################################################
446
447   TString namehist;
448   TString titlehist;
449   TString strnamept,strtitlept;
450   Printf("INSIDE USER CREATE \n");
451   
452  // fNentries=new TH1F("nentriesChFr", "Look at the number of entries! = number of AODs", 2,1.,2.);
453   fNentries=new TH1F("nentriesChFr", "Analyzed sample properties", 15,-0.5,14.5);
454
455   fNentries->GetXaxis()->SetBinLabel(1,"nEventsAnal");
456   fNentries->GetXaxis()->SetBinLabel(2,"nCandSel(Cuts)");
457   fNentries->GetXaxis()->SetBinLabel(3,"nD0Selected");
458   fNentries->GetXaxis()->SetBinLabel(4,"nEventsGoodVtxS");
459   fNentries->GetXaxis()->SetBinLabel(5,"ptbin = -1");
460   fNentries->GetXaxis()->SetBinLabel(6,"no daughter");
461   fNentries->GetXaxis()->SetBinLabel(7,"nCandSel(Tr)");
462   fNentries->GetXaxis()->SetBinLabel(8,"PID=0");
463   fNentries->GetXaxis()->SetBinLabel(9,"PID=1");
464   fNentries->GetXaxis()->SetBinLabel(10,"PID=2");
465   fNentries->GetXaxis()->SetBinLabel(11,"PID=3");
466   fNentries->GetXaxis()->SetBinLabel(12,"K");
467   fNentries->GetXaxis()->SetBinLabel(13,"Lambda");
468   fNentries->GetXaxis()->SetBinLabel(14,"Pile-up Rej");
469   fNentries->GetXaxis()->SetBinLabel(15,"N. of 0SMH");
470   fNentries->GetXaxis()->SetNdivisions(1,kFALSE);
471
472   fSignalType=new TH1F("hsignaltype", "Histo for type of MC signal", 61,-1.,60.);
473   fSignalTypeLsCuts=new TH1F("hsignaltypeLsCuts", "Histo for type of MC signal with loose cuts", 61,-1.,60.);
474   fSignalTypeTghCuts=new TH1F("hsignaltypeTghCuts", "Histo for type of MC signal with tight cuts", 61,-1.,60.);
475
476   //##########  DEFINE THE TLISTS ##################
477   flistMCproperties=new TList();
478   flistMCproperties->SetOwner();
479   flistMCproperties->SetName("listMCproperties");
480
481   flistNoCutsSignal = new TList();
482   flistNoCutsSignal->SetOwner();
483   flistNoCutsSignal->SetName("listNCsign");
484
485   flistNoCutsBack = new TList();
486   flistNoCutsBack->SetOwner();
487   flistNoCutsBack->SetName("listNCback");
488
489   flistNoCutsFromB = new TList();
490   flistNoCutsFromB->SetOwner();
491   flistNoCutsFromB->SetName("listNCfromB");
492
493   flistNoCutsFromDstar = new TList();
494   flistNoCutsFromDstar->SetOwner();
495   flistNoCutsFromDstar->SetName("listNCfromDstar");
496
497   flistNoCutsOther = new TList();
498   flistNoCutsOther->SetOwner();
499   flistNoCutsOther->SetName("listNCother");
500
501
502   flistLsCutsSignal = new TList();
503   flistLsCutsSignal->SetOwner();
504   flistLsCutsSignal->SetName("listLSCsign");
505
506   flistLsCutsBack = new TList();
507   flistLsCutsBack->SetOwner();
508   flistLsCutsBack->SetName("listLSCback");
509
510   flistLsCutsFromB = new TList();
511   flistLsCutsFromB->SetOwner();
512   flistLsCutsFromB->SetName("listLSCfromB");
513
514   flistLsCutsFromDstar = new TList();
515   flistLsCutsFromDstar->SetOwner();
516   flistLsCutsFromDstar->SetName("listLSCfromDstar");
517
518   flistLsCutsOther = new TList();
519   flistLsCutsOther->SetOwner();
520   flistLsCutsOther->SetName("listLSCother");
521
522
523   flistTghCutsSignal = new TList();
524   flistTghCutsSignal->SetOwner();
525   flistTghCutsSignal->SetName("listTGHCsign");
526
527   flistTghCutsBack = new TList();
528   flistTghCutsBack->SetOwner();
529   flistTghCutsBack->SetName("listTGHCback");
530
531   flistTghCutsFromB = new TList();
532   flistTghCutsFromB->SetOwner();
533   flistTghCutsFromB->SetName("listTGHCfromB");
534
535   flistTghCutsFromDstar = new TList();
536   flistTghCutsFromDstar->SetOwner();
537   flistTghCutsFromDstar->SetName("listTGHCfromDstar");
538
539   flistTghCutsOther = new TList();
540   flistTghCutsOther->SetOwner();
541   flistTghCutsOther->SetName("listTGHCother");
542
543
544
545   Float_t ptbinsD0arr[35]={0.,0.1,0.2,0.3,0.4,0.5,0.6,0.8,1.,1.25,1.5,1.75,2.,2.3,2.6,3.,3.5,4.,4.5,5.,5.5,6.,7.,8.,9.,10.,12.,14.,16.,20.,25.,30.,40.,50.,100.};
546   Float_t dumbinning[201];
547   for(Int_t j=0;j<201;j++){
548     dumbinning[j]=(Float_t)j*0.5;
549   }
550
551   // DEFINE EDGES FOR SPARSE HISTOS
552   const Int_t nPtbinsForSparse=91;//nuber of edges, -1 to get number of bins
553   Double_t ptbinsForNsparse[nPtbinsForSparse];//Binning in pt: step: 0.2 GeV/c up to 8 GeV/c, 0.5 Upto 20, 1 GeV/c up to 40, 5 upt to 70-> 8/0.2+12/0.5+20/1.+30./5
554   Double_t pT=0;
555   Double_t massbins[186],impparbins[401];  
556   Double_t massHypoBins[4]={1.,2.,3.,4.};
557   Int_t nbinsSparse[5]={185,185,nPtbinsForSparse-1,400,3};
558   for(Int_t nBins=0;nBins<nPtbinsForSparse;nBins++){    
559     ptbinsForNsparse[nBins]=pT;
560     if(pT<8.)pT+=0.2;
561     else if(pT<20)pT+=0.5;
562     else if(pT<40)pT+=1;
563     else if(pT<70)pT+=5.;  
564   }  
565   for(Int_t nBins=0;nBins<186;nBins++){
566     massbins[nBins]=1.680+nBins*(2.050-1.680)/185.;
567   }
568   for(Int_t nBins=0;nBins<401;nBins++){
569     impparbins[nBins]=-1000+nBins*(2000.)/400.;
570   }
571
572   
573
574   //################################################################################################
575   //                                                                                               #
576   //                HISTO FOR MC PROPERTIES OF D0, c quarks and B mesons                           #
577   //                                                                                               # 
578   //################################################################################################
579   TH1F *hMCcquarkAllPt=new TH1F("hMCcquarkAllPt","c quark Pt (all cquarks produced)",34,ptbinsD0arr);
580   TH1F *hMCcquarkAllEta=new TH1F("hMCcquarkAllEta","c quark Eta (all cquarks produced)",50,-3.,3.);
581   TH1F *hMCcquarkAllEnergy=new TH1F("hMCcquarkAllEnergy","c quark Pt (all cquarks produced)",200,0.,100.);
582   TH1F *hMCcquarkNdaught=new TH1F("hMCcquarkNdaught","N cquark daughters (all cquarks produced)",100,0.,100.);
583   TH1F *hMCD0fromcPt=new TH1F("hMCD0fromcPt","D0 from c Pt",34,ptbinsD0arr);
584   TH1F *hMCD0fromcEta=new TH1F("hMCD0fromcEta","D0 from c Eta",50,-3.,3.);
585   TH1F *hMCD0fromcEnergy=new TH1F("hMCD0fromcEnergy","D0 from c Energy",200,0.,100.);
586   
587   TH2F *hMCD0VscquarkPt=new TH2F("hMCD0VscquarkPt","D0 pt Vs cquark pt",34,ptbinsD0arr,34,ptbinsD0arr);
588   TH2F *hMCD0VscquarkEnergy=new TH2F("hMCD0VscquarkEnergy","D0 Energy Vs cquark Energy",200,0.,50.,200,0.,50.);
589   TH1F *hMCD0deltacquarkEnergy=new TH1F("hMCD0deltacquarkEnergy","Fractional D0 Energy w.r.t. cquark Energy",20,0.,1.);
590   TH1F *hMCD0EnergyVsAvcquarkDaughtEn=new TH1F("hMCD0EnergyVsAvcquarkDaughtEn","#Delta(E^{D^0}-E_{avg})/E_{cquark}",40,-1.,1.);
591   TH1F *hMCD0cquarkAngle=new TH1F("hMCD0cquarkAngle","cosine of the angle between D0 and c quark particle",40,-1.,1.);
592   TH2F *hMCD0cquarkAngleEnergy=new TH2F("hMCD0cquarkAngleEnergy","cosine of the angle between D0 and c quark particle as a function of Energy",25,0.,50.,40,-1.,1.);
593
594   TH1I *hMCfromBpdgB=new TH1I("hMCfromBpdgB","hMCfromBpdgB",10000,0.,10000);
595   TH1F *hMCBhadrPt=new TH1F("hMCBhadrPt","B hadr Pt",34,ptbinsD0arr);
596   TH1F *hMCBhadrEta=new TH1F("hMCBhadrEta","B hadr Eta",50,-3.,3.);
597   TH1F *hMCBhadrEnergy=new TH1F("hMCBhadrEnergy","B hadr Pt",200,0.,100.);
598   TH1F *hMCBhadrNdaught=new TH1F("hMCBhadrNdaught","N Bhadr daughters",100,0.,100.);
599   TH1F *hMCD0fromBPt=new TH1F("hMCD0fromBPt","D0 from B Pt",34,ptbinsD0arr);
600   TH1F *hMCD0fromBEta=new TH1F("hMCD0fromBEta","D0 from B Eta",50,-3.,3.);
601   TH1F *hMCD0fromBEnergy=new TH1F("hMCD0fromBEnergy","D0 from B Energy",200,0.,100.);
602
603   TH2F *hMCD0VsBhadrPt=new TH2F("hMCD0VsBhadrPt","D0 pt Vs Bhadr pt",34,ptbinsD0arr,34,ptbinsD0arr);
604   TH2F *hMCD0VsBhadrEnergy=new TH2F("hMCD0VsBhadrEnergy","D0 Energy Vs Bhadr Energy",200,0.,50.,200,0.,50.);
605   TH1F *hMCD0deltaBhadrEnergy=new TH1F("hMCD0deltaBhadrEnergy","Fractional D0 Energy w.r.t. Bhadr Energy",20,0.,1.);
606   TH1F *hMCD0EnergyVsAvBDaughtEn=new TH1F("hMCD0EnergyVsAvBDaughtEn","#Delta(E^{D^0}-E_{avg})/E_{Bahdr}",40,-1.,1.);
607   TH1F *hMCD0BhadrAngle=new TH1F("hMCD0BhadrAngle","cosine of the angle between D0 and Bhadr particle",40,-1.,1.);
608   TH2F *hMCD0BhadrAngleEnergy=new TH2F("hMCD0BhadrAngleEnergy","cosine of the angle between D0 and Bhadr particle as a function of Energy",25,0.,50.,40,-1.,1.);
609
610   TH1I *hMCPartFound=new TH1I("hMCPartFound","1=c,2=D0,3=fromBall,4=fromBmeson,5=fromBbaryon",6,0,6); 
611  
612
613   flistMCproperties->Add(hMCcquarkAllPt);
614   flistMCproperties->Add(hMCcquarkAllEta);
615   flistMCproperties->Add(hMCcquarkAllEnergy);
616   flistMCproperties->Add(hMCcquarkNdaught);
617   flistMCproperties->Add(hMCD0fromcPt);
618   flistMCproperties->Add(hMCD0fromcEta);
619   flistMCproperties->Add(hMCD0fromcEnergy);
620   flistMCproperties->Add(hMCD0VscquarkPt);
621   flistMCproperties->Add(hMCD0VscquarkEnergy);
622   flistMCproperties->Add(hMCD0deltacquarkEnergy);
623   flistMCproperties->Add(hMCD0EnergyVsAvcquarkDaughtEn);
624   flistMCproperties->Add(hMCD0cquarkAngle);
625   flistMCproperties->Add(hMCD0cquarkAngleEnergy);
626   
627   flistMCproperties->Add(hMCfromBpdgB);
628   flistMCproperties->Add(hMCBhadrPt);
629   flistMCproperties->Add(hMCBhadrEta);
630   flistMCproperties->Add(hMCBhadrEnergy);
631   flistMCproperties->Add(hMCBhadrNdaught);
632   flistMCproperties->Add(hMCD0fromBPt);
633   flistMCproperties->Add(hMCD0fromBEta);
634   flistMCproperties->Add(hMCD0fromBEnergy);
635   flistMCproperties->Add(hMCD0VsBhadrPt);
636   flistMCproperties->Add(hMCD0VsBhadrEnergy);
637   flistMCproperties->Add(hMCD0deltaBhadrEnergy);
638   flistMCproperties->Add(hMCD0EnergyVsAvBDaughtEn);
639   flistMCproperties->Add(hMCD0BhadrAngle);
640   flistMCproperties->Add(hMCD0BhadrAngleEnergy);
641   flistMCproperties->Add(hMCPartFound);
642
643   //################################################################################################
644   //                                                                                               #
645   //                         HISTOS FOR NO CUTS CASE                                               #
646   //                                                                                               #
647   //################################################################################################
648   Printf("AFTER MC HISTOS \n");
649
650   //############ NO CUTS SIGNAL HISTOGRAMS ###############
651   //
652   // ####### global properties histo ############
653
654   TH2F *hCPtaVSd0d0NCsign=new TH2F("hCPtaVSd0d0NCsign","hCPtaVSd0d0_NoCuts_Signal",1000,-100000.,100000.,100,-1.,1.);
655   TH1F *hSecVtxZNCsign=new TH1F("hSecVtxZNCsign","hSecVtxZ_NoCuts_Signal",1000,-8.,8.);
656   TH1F *hSecVtxXNCsign=new TH1F("hSecVtxXNCsign","hSecVtxX_NoCuts_Signal",1000,-3000.,3000.);
657   TH1F *hSecVtxYNCsign=new TH1F("hSecVtxYNCsign","hSecVtxY_NoCuts_Signal",1000,-3000.,3000.);
658   TH2F *hSecVtxXYNCsign=new TH2F("hSecVtxXYNCsign","hSecVtxXY_NoCuts_Signal",1000,-3000.,3000.,1000,-3000.,3000.);
659   TH1F *hSecVtxPhiNCsign=new TH1F("hSecVtxPhiNCsign","hSecVtxPhi_NoCuts_Signal",180,-180.1,180.1);
660   TH1F *hd0singlTrackNCsign=new TH1F("hd0singlTrackNCsign","hd0singlTrackNoCuts_Signal",1000,-5000.,5000.);
661   TH1F *hCPtaNCsign=new TH1F("hCPtaNCsign","hCPta_NoCuts_Signal",100,-1.,1.);
662   TH1F *hd0xd0NCsign=new TH1F("hd0xd0NCsign","hd0xd0_NoCuts_Signal",1000,-100000.,100000.);
663   TH1F *hMassTrueNCsign=new TH1F("hMassTrueNCsign","D^{0} MC inv. Mass No Cuts Signal(All momenta)",600,1.600,2.200);
664   TH1F *hMassNCsign=new TH1F("hMassNCsign","D^{0} inv. Mass No Cuts Signal (All momenta)",600,1.600,2.200);
665   hMassNCsign->Sumw2();
666   TH1F *hMassTrueNCsignPM=new TH1F("hMassTrueNCsignPM","D^{0} MC inv. Mass No Cuts Signal, Mass Peak. (All momenta)",600,1.600,2.200);
667   TH1F *hMassNCsignPM=new TH1F("hMassNCsignPM","D^{0} inv. Mass No Cuts Signal (All momenta), MassPeak",600,1.600,2.200);
668   hMassNCsignPM->Sumw2();
669
670   TH1F *hMassTrueNCsignSB=new TH1F("hMassTrueNCsignSB","D^{0} MC inv. Mass in Side Bands No Cuts Signal(All momenta)",600,1.600,2.200);
671   TH1F *hMassNCsignSB=new TH1F("hMassNCsignSB","D^{0} inv. Mass in Side Bands No Cuts Signal (All momenta)",600,1.600,2.200);
672   hMassNCsignSB->Sumw2();
673
674   flistNoCutsSignal->Add(hCPtaVSd0d0NCsign);
675   flistNoCutsSignal->Add(hSecVtxZNCsign);
676   flistNoCutsSignal->Add(hSecVtxYNCsign);
677   flistNoCutsSignal->Add(hSecVtxXNCsign);
678   flistNoCutsSignal->Add(hSecVtxXYNCsign);
679   flistNoCutsSignal->Add(hSecVtxPhiNCsign);
680   flistNoCutsSignal->Add(hd0singlTrackNCsign);
681   flistNoCutsSignal->Add(hCPtaNCsign);
682   flistNoCutsSignal->Add(hd0xd0NCsign);
683   flistNoCutsSignal->Add(hMassTrueNCsign);
684   flistNoCutsSignal->Add(hMassNCsign);
685   flistNoCutsSignal->Add(hMassTrueNCsignPM);
686   flistNoCutsSignal->Add(hMassNCsignPM);
687   flistNoCutsSignal->Add(hMassTrueNCsignSB);
688   flistNoCutsSignal->Add(hMassNCsignSB);
689   
690   //%%% NEW HISTOS %%%%%%%%%%%%%%%%
691   TH1F *hdcaNCsign=new TH1F("hdcaNCsign","hdca_NoCuts_Signal",100,0.,1000.);
692   hdcaNCsign->SetXTitle("dca   [#mum]");
693   hdcaNCsign->SetYTitle("Entries");
694   TH1F *hcosthetastarNCsign=new TH1F("hcosthetastarNCsign","hCosThetaStar_NoCuts_Signal",50,-1.,1.);
695   hcosthetastarNCsign->SetXTitle("cos #theta^{*}");
696   hcosthetastarNCsign->SetYTitle("Entries");
697   TH1F *hptD0NCsign=new TH1F("hptD0NCsign","D^{0} transverse momentum distribution",34,ptbinsD0arr);
698   hptD0NCsign->SetXTitle("p_{t}  [GeV/c]");
699   hptD0NCsign->SetYTitle("Entries");
700   TH1F *hptD0VsMaxPtNCsign=new TH1F("hptD0VsMaxPtNCsign","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
701   TH2F *hptD0PTallsqrtNCsign=new TH2F("hptD0PTallsqrtNCsign","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
702   TH2F *hptD0PTallNCsign=new TH2F("hptD0PTallNCsign","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
703   TH2F *hptD0vsptBNCsign=new TH2F("hptD0vsptBNCsign","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
704   TH2F *hpD0vspBNCsign=new TH2F("hpD0vspBNCsign","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
705   TH2F *hptD0vsptcquarkNCsign=new TH2F("hptD0vsptcquarkNCsign","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
706   TH2F *hpD0vspcquarkNCsign=new TH2F("hpD0vspcquarkNCsign","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
707   flistNoCutsSignal->Add(hdcaNCsign);
708   flistNoCutsSignal->Add(hcosthetastarNCsign);
709   flistNoCutsSignal->Add(hptD0NCsign);
710   flistNoCutsSignal->Add(hptD0VsMaxPtNCsign);
711   flistNoCutsSignal->Add(hptD0PTallsqrtNCsign);
712   flistNoCutsSignal->Add(hptD0PTallNCsign);
713   flistNoCutsSignal->Add(hptD0vsptBNCsign);
714   flistNoCutsSignal->Add(hpD0vspBNCsign);
715   flistNoCutsSignal->Add(hptD0vsptcquarkNCsign);
716   flistNoCutsSignal->Add(hpD0vspcquarkNCsign);
717
718   TH1F *hd0zD0ptNCsign;
719   TH1F *hInvMassD0NCsign,*hInvMassD0barNCsign;
720   TH2F *hInvMassPtNCsign=new TH2F("hInvMassPtNCsign","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
721   flistNoCutsSignal->Add(hInvMassPtNCsign);
722   THnSparseF *hSparseNCsign=new THnSparseF("hSparseNCsign","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
723   hSparseNCsign->SetBinEdges(0,massbins);
724   hSparseNCsign->SetBinEdges(1,massbins);
725   hSparseNCsign->SetBinEdges(2,ptbinsForNsparse);
726   hSparseNCsign->SetBinEdges(3,impparbins);
727   hSparseNCsign->SetBinEdges(4,massHypoBins); 
728   flistNoCutsSignal->Add(hSparseNCsign);
729   
730
731   TH1F *hetaNCsign;
732   TH1F *hCosPDPBNCsign;
733   TH1F *hCosPcPDNCsign;
734   // ADDITIONAL HISTOS
735   TH2F *hd0D0VSd0xd0NCsignpt;
736   TH2F *hangletracksVSd0xd0NCsignpt;
737   TH2F *hangletracksVSd0D0NCsignpt;
738   TH1F *hd0xd0NCsignpt;
739
740   TH2F *hTOFpidNCsign=new TH2F("hTOFpidNCsign","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
741   flistNoCutsSignal->Add(hTOFpidNCsign);
742  
743   //##################
744   for(Int_t i=0;i<fnbins;i++){
745     //Printf("INSIDE HISTOS CREATION LOOP: %d \n",fnbins);
746        
747     namehist="hd0zD0ptNCsign_pt";
748     namehist+=i;
749     titlehist="d0(z) No Cuts Signalm ptbin=";
750     titlehist+=i;
751     hd0zD0ptNCsign=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
752     hd0zD0ptNCsign->SetXTitle("d_{0}(z)    [#mum]");
753     hd0zD0ptNCsign->SetYTitle("Entries");
754     flistNoCutsSignal->Add(hd0zD0ptNCsign);
755
756     namehist="hInvMassD0NCsign_pt";
757     namehist+=i;
758     titlehist="Invariant Mass D0 No Cuts Signal ptbin=";
759     titlehist+=i;
760     hInvMassD0NCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
761     hInvMassD0NCsign->SetXTitle("Invariant Mass    [GeV]");
762     hInvMassD0NCsign->SetYTitle("Entries");
763     flistNoCutsSignal->Add(hInvMassD0NCsign);
764
765
766     namehist="hInvMassD0barNCsign_pt";
767     namehist+=i;
768     titlehist="Invariant Mass D0bar No Cuts Signal ptbin=";
769     titlehist+=i;
770     hInvMassD0barNCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
771     hInvMassD0barNCsign->SetXTitle("Invariant Mass    [GeV]");
772     hInvMassD0barNCsign->SetYTitle("Entries");
773     flistNoCutsSignal->Add(hInvMassD0barNCsign);
774
775
776     namehist="hetaNCsign_pt";
777     namehist+=i;
778     titlehist="eta No Cuts Signal ptbin=";
779     titlehist+=i;
780     hetaNCsign=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
781     hetaNCsign->SetXTitle("Pseudorapidity");
782     hetaNCsign->SetYTitle("Entries");
783     flistNoCutsSignal->Add(hetaNCsign);
784
785     namehist="hCosPDPBNCsign_pt";
786     namehist+=i;
787     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
788     titlehist+=i;
789     hCosPDPBNCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
790     hCosPDPBNCsign->SetXTitle("Cosine between D0 momentum and B momentum");
791     hCosPDPBNCsign->SetYTitle("Entries");
792     flistNoCutsSignal->Add(hCosPDPBNCsign);
793
794     namehist="hCosPcPDNCsign_pt";
795     namehist+=i;
796     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
797     titlehist+=i;
798     hCosPcPDNCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
799     hCosPcPDNCsign->SetXTitle("Cosine between c quark momentum and D0 momentum");
800     hCosPcPDNCsign->SetYTitle("Entries");
801     flistNoCutsSignal->Add(hCosPcPDNCsign);
802     
803
804     // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
805     namehist="hd0xd0NCsign_pt";
806     namehist+=i;
807     titlehist="d0xd0 No Cuts Signal ptbin=";
808     titlehist+=i;
809     hd0xd0NCsignpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
810     hd0xd0NCsignpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
811     hd0xd0NCsignpt->SetYTitle("Entries");
812     flistNoCutsSignal->Add(hd0xd0NCsignpt);
813
814
815     namehist="hd0D0VSd0xd0NCsign_pt";
816     namehist+=i;
817     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Signal ptbin=";
818     titlehist+=i;
819     hd0D0VSd0xd0NCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
820     hd0D0VSd0xd0NCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
821     hd0D0VSd0xd0NCsignpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
822     flistNoCutsSignal->Add(hd0D0VSd0xd0NCsignpt);
823     
824     
825     namehist="hangletracksVSd0xd0NCsign_pt";
826     namehist+=i;
827     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Signal ptbin=";
828     titlehist+=i;
829     hangletracksVSd0xd0NCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
830     hangletracksVSd0xd0NCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
831     hangletracksVSd0xd0NCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
832     flistNoCutsSignal->Add(hangletracksVSd0xd0NCsignpt);
833     
834
835     namehist="hangletracksVSd0D0NCsign_pt";
836     namehist+=i;
837     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts Signal ptbin=";
838     titlehist+=i;
839     hangletracksVSd0D0NCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
840     hangletracksVSd0D0NCsignpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
841     hangletracksVSd0D0NCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
842     flistNoCutsSignal->Add(hangletracksVSd0D0NCsignpt);
843
844   }
845   Printf("AFTER LOOP HISTOS CREATION \n");
846   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
847   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
848
849   // ####### d0 D0 histos ############
850   TH1F *hd0D0NCsignPM = new TH1F("hd0D0NCsignPM","D^{0} impact par. plot , No Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
851   hd0D0NCsignPM->SetXTitle("Impact parameter [#mum]");
852   hd0D0NCsignPM->SetYTitle("Entries");
853
854   TH1F *hd0D0VtxTrueNCsignPM = new TH1F("hd0D0VtxTrueNCsignPM","D^{0} impact par. w.r.t. True Vtx, No Cuts, Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
855   hd0D0VtxTrueNCsignPM->SetXTitle("Impact parameter [#mum]");
856   hd0D0VtxTrueNCsignPM->SetYTitle("Entries");
857
858   TH1F *hMCd0D0NCsignPM = new TH1F("hMCd0D0NCsignPM","D^{0} impact par. plot, No Cuts, Signal,Mass Peak  (All momenta)",1000,-1000.,1000.);
859   hMCd0D0NCsignPM->SetXTitle("MC Impact parameter [#mum]");
860   hMCd0D0NCsignPM->SetYTitle("Entries");
861
862   TH1F *hd0D0NCsignSB = new TH1F("hd0D0NCsignSB","D^{0} impact par. plot , No Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
863   hd0D0NCsignSB->SetXTitle("Impact parameter [#mum]");
864   hd0D0NCsignSB->SetYTitle("Entries");
865
866   TH1F *hd0D0VtxTrueNCsignSB = new TH1F("hd0D0VtxTrueNCsignSB","D^{0} impact par. w.r.t. True Vtx, No Cuts, Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
867   hd0D0VtxTrueNCsignSB->SetXTitle("Impact parameter [#mum]");
868   hd0D0VtxTrueNCsignSB->SetYTitle("Entries");
869
870   TH1F *hMCd0D0NCsignSB = new TH1F("hMCd0D0NCsignSB","D^{0} impact par. plot, No Cuts, Signal,Mass Peak  (All momenta)",1000,-1000.,1000.);
871   hMCd0D0NCsignSB->SetXTitle("MC Impact parameter [#mum]");
872   hMCd0D0NCsignSB->SetYTitle("Entries");
873
874   flistNoCutsSignal->Add(hd0D0NCsignPM);
875   flistNoCutsSignal->Add(hd0D0VtxTrueNCsignPM);
876   flistNoCutsSignal->Add(hMCd0D0NCsignPM);
877   flistNoCutsSignal->Add(hd0D0NCsignSB);
878   flistNoCutsSignal->Add(hd0D0VtxTrueNCsignSB);
879   flistNoCutsSignal->Add(hMCd0D0NCsignSB);
880   
881   TH1F *hd0D0ptNCsignPM;
882   TH1F *hMCd0D0ptNCsignPM;
883   TH1F *hd0D0VtxTrueptNCsignPM;
884   TH1F *hd0D0ptNCsignSB;
885   TH1F *hMCd0D0ptNCsignSB;
886   TH1F *hd0D0VtxTrueptNCsignSB;
887   namehist="hd0D0ptNCsign_";
888   titlehist="D^{0} impact par. plot, No Cuts, Signal, ";
889   for(Int_t i=0;i<fnbins;i++){
890     //Printf("IN HISTOS CREATION USING PTBINS VALUES for NAMES \n");
891     strnamept=namehist;
892     strnamept.Append("PkMss_pt");
893     strnamept+=i;
894
895     strtitlept=titlehist;
896     strtitlept.Append(" Mass Peak, ");
897
898     strtitlept+=fptbins[i];
899     //Printf("IN HISTOS CREATION USING PTBINS VALUES for NAMES %d: %f\n",i,fptbins[i]);
900     strtitlept.Append("<= pt <");
901     strtitlept+=fptbins[i+1];
902     strtitlept.Append(" [GeV/c]");
903     
904     hd0D0ptNCsignPM= new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
905     hd0D0ptNCsignPM->SetXTitle("Impact parameter [#mum] ");
906     hd0D0ptNCsignPM->SetYTitle("Entries");
907     flistNoCutsSignal->Add(hd0D0ptNCsignPM);
908
909     strnamept.ReplaceAll("hd0D0","hMCd0D0");
910     hMCd0D0ptNCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
911     hMCd0D0ptNCsignPM->SetXTitle("MC Impact parameter [#mum] ");
912     hMCd0D0ptNCsignPM->SetYTitle("Entries");
913     flistNoCutsSignal->Add(hMCd0D0ptNCsignPM);
914  
915
916     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
917     hd0D0VtxTrueptNCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
918     hd0D0VtxTrueptNCsignPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
919     hd0D0VtxTrueptNCsignPM->SetYTitle("Entries");
920     flistNoCutsSignal->Add(hd0D0VtxTrueptNCsignPM);
921     
922     strnamept=namehist;
923     strnamept.Append("SBMss_pt");
924     strnamept+=i;
925
926     strtitlept=titlehist;
927     strtitlept.Append(" Side Bands, ");
928     strtitlept+=fptbins[i];
929     strtitlept.Append("<= pt <");
930     strtitlept+=fptbins[i+1];
931     strtitlept.Append(" [GeV/c]");
932     
933     hd0D0ptNCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
934     hd0D0ptNCsignSB->SetXTitle("Impact parameter [#mum] ");
935     hd0D0ptNCsignSB->SetYTitle("Entries");
936     flistNoCutsSignal->Add(hd0D0ptNCsignSB);
937
938     strnamept.ReplaceAll("hd0D0","hMCd0D0");
939     hMCd0D0ptNCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
940     hMCd0D0ptNCsignSB->SetXTitle("MC Impact parameter [#mum] ");
941     hMCd0D0ptNCsignSB->SetYTitle("Entries");
942     flistNoCutsSignal->Add(hMCd0D0ptNCsignSB);
943
944     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
945     hd0D0VtxTrueptNCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
946     hd0D0VtxTrueptNCsignSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
947     hd0D0VtxTrueptNCsignSB->SetYTitle("Entries");
948     flistNoCutsSignal->Add(hd0D0VtxTrueptNCsignSB);
949   }
950
951   //Printf("AFTER SIGNAL HISTOS CREATION for NOCUTS\n");
952
953
954   //############ NO CUTS BACKGROUND HISTOGRAMS ###########
955   //
956   //   ######## global properties histos #######
957   TH2F *hCPtaVSd0d0NCback=new TH2F("hCPtaVSd0d0NCback","hCPtaVSd0d0_NoCuts_Background",1000,-100000.,100000.,100,-1.,1.);
958   TH1F *hSecVtxZNCback=new TH1F("hSecVtxZNCback","hSecVtxZ_NoCuts_Background",1000,-8.,8.);
959   TH1F *hSecVtxXNCback=new TH1F("hSecVtxXNCback","hSecVtxX_NoCuts_Background",1000,-3000.,3000.);
960   TH1F *hSecVtxYNCback=new TH1F("hSecVtxYNCback","hSecVtxY_NoCuts_Background",1000,-3000.,3000.);
961   TH2F *hSecVtxXYNCback=new TH2F("hSecVtxXYNCback","hSecVtxXY_NoCuts_Background",1000,-3000.,3000.,1000,-3000.,3000.);
962   TH1F *hSecVtxPhiNCback=new TH1F("hSecVtxPhiNCback","hSecVtxPhi_NoCuts_Background",180,-180.1,180.1);
963   TH1F *hd0singlTrackNCback=new TH1F("hd0singlTrackNCback","hd0singlTrackNoCuts_Back",1000,-5000.,5000.);
964   TH1F *hCPtaNCback=new TH1F("hCPtaNCback","hCPta_NoCuts_Background",100,-1.,1.);
965   TH1F *hd0xd0NCback=new TH1F("hd0xd0NCback","hd0xd0_NoCuts_Background",1000,-100000.,100000.);
966   TH1F *hMassTrueNCback=new TH1F("hMassTrueNCback","D^{0} MC inv. Mass No Cuts Background(All momenta)",600,1.600,2.200);
967   TH1F *hMassNCback=new TH1F("hMassNCback","D^{0} inv. Mass No Cuts Background (All momenta)",600,1.600,2.200);
968   hMassNCback->Sumw2();
969   TH1F *hMassTrueNCbackPM=new TH1F("hMassTrueNCbackPM","D^{0} MC inv. Mass No Cuts Background, Mass Peak. (All momenta)",600,1.600,2.200);
970   TH1F *hMassNCbackPM=new TH1F("hMassNCbackPM","D^{0} inv. Mass No Cuts Background (All momenta), MassPeak",600,1.600,2.200);
971   hMassNCbackPM->Sumw2();
972   TH1F *hMassTrueNCbackSB=new TH1F("hMassTrueNCbackSB","D^{0} MC inv. Mass in Side Bands No Cuts Background(All momenta)",600,1.600,2.200);
973   TH1F *hMassNCbackSB=new TH1F("hMassNCbackSB","D^{0} inv. Mass in Side Bands No Cuts Background (All momenta)",600,1.600,2.200);
974   hMassNCbackSB->Sumw2();
975
976   flistNoCutsBack->Add(hCPtaVSd0d0NCback);
977   flistNoCutsBack->Add(hSecVtxZNCback);
978   flistNoCutsBack->Add(hSecVtxYNCback);
979   flistNoCutsBack->Add(hSecVtxXNCback);
980   flistNoCutsBack->Add(hSecVtxXYNCback);
981   flistNoCutsBack->Add(hSecVtxPhiNCback);
982   flistNoCutsBack->Add(hd0singlTrackNCback);
983   flistNoCutsBack->Add(hCPtaNCback);
984   flistNoCutsBack->Add(hd0xd0NCback);
985   flistNoCutsBack->Add(hMassTrueNCback);
986   flistNoCutsBack->Add(hMassNCback);
987   flistNoCutsBack->Add(hMassTrueNCbackPM);
988   flistNoCutsBack->Add(hMassNCbackPM);
989   flistNoCutsBack->Add(hMassTrueNCbackSB);
990   flistNoCutsBack->Add(hMassNCbackSB);
991
992
993  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
994   TH1F *hdcaNCback=new TH1F("hdcaNCback","hdca_NoCuts_Backgr",100,0.,1000.);
995   hdcaNCback->SetXTitle("dca   [#mum]");
996   hdcaNCback->SetYTitle("Entries");
997   TH1F *hcosthetastarNCback=new TH1F("hcosthetastarNCback","hCosThetaStar_NoCuts_Backgr",50,-1.,1.);
998   hcosthetastarNCback->SetXTitle("cos #theta^{*}");
999   hcosthetastarNCback->SetYTitle("Entries");
1000   TH1F *hptD0NCback=new TH1F("hptD0NCback","D^{0} transverse momentum distribution",34,ptbinsD0arr);
1001   hptD0NCback->SetXTitle("p_{t}  [GeV/c]");
1002   hptD0NCback->SetYTitle("Entries");
1003   TH1F *hptD0VsMaxPtNCback=new TH1F("hptD0VsMaxPtNCback","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
1004   TH2F *hptD0PTallsqrtNCback=new TH2F("hptD0PTallsqrtNCback","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
1005   TH2F *hptD0PTallNCback=new TH2F("hptD0PTallNCback","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
1006   TH2F *hptD0vsptBNCback=new TH2F("hptD0vsptBNCback","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1007   TH2F *hpD0vspBNCback=new TH2F("hpD0vspBNCback","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1008   TH2F *hptD0vsptcquarkNCback=new TH2F("hptD0vsptcquarkNCback","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1009   TH2F *hpD0vspcquarkNCback=new TH2F("hpD0vspcquarkNCback","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1010   flistNoCutsBack->Add(hdcaNCback);
1011   flistNoCutsBack->Add(hcosthetastarNCback);
1012   flistNoCutsBack->Add(hptD0NCback);
1013   flistNoCutsBack->Add(hptD0VsMaxPtNCback);
1014   flistNoCutsBack->Add(hptD0PTallsqrtNCback);
1015   flistNoCutsBack->Add(hptD0PTallNCback);
1016   flistNoCutsBack->Add(hptD0vsptBNCback);
1017   flistNoCutsBack->Add(hpD0vspBNCback);
1018   flistNoCutsBack->Add(hptD0vsptcquarkNCback);
1019   flistNoCutsBack->Add(hpD0vspcquarkNCback);
1020  
1021   TH1F *hd0zD0ptNCback;
1022   TH1F *hInvMassD0NCback,*hInvMassD0barNCback;
1023   TH2F *hInvMassPtNCback=new TH2F("hInvMassPtNCback","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
1024   THnSparseF *hSparseNCback=new THnSparseF("hSparseNCback","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
1025   hSparseNCback->SetBinEdges(0,massbins);
1026   hSparseNCback->SetBinEdges(1,massbins);
1027   hSparseNCback->SetBinEdges(2,ptbinsForNsparse);
1028   hSparseNCback->SetBinEdges(3,impparbins);
1029   hSparseNCback->SetBinEdges(4,massHypoBins); 
1030   flistNoCutsBack->Add(hSparseNCback);
1031
1032   TH1F *hetaNCback;
1033   TH1F *hCosPDPBNCback;
1034   TH1F *hCosPcPDNCback;
1035    // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1036   TH2F *hd0D0VSd0xd0NCbackpt;
1037   TH2F *hangletracksVSd0xd0NCbackpt;
1038   TH2F *hangletracksVSd0D0NCbackpt;
1039   TH1F *hd0xd0NCbackpt;
1040   flistNoCutsBack->Add(hInvMassPtNCback);
1041
1042   TH2F *hTOFpidNCback=new TH2F("hTOFpidNCback","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
1043   flistNoCutsBack->Add(hTOFpidNCback);
1044
1045   for(Int_t i=0;i<fnbins;i++){
1046     namehist="hd0zD0ptNCback_pt";
1047     namehist+=i;
1048     titlehist="d0(z) No Cuts Backgrm ptbin=";
1049     titlehist+=i;
1050     hd0zD0ptNCback=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
1051     hd0zD0ptNCback->SetXTitle("d_{0}(z)    [#mum]");
1052     hd0zD0ptNCback->SetYTitle("Entries");
1053     flistNoCutsBack->Add(hd0zD0ptNCback);
1054
1055     namehist="hInvMassD0NCback_pt";
1056     namehist+=i;
1057     titlehist="Invariant Mass No Cuts Backgr ptbin=";
1058     titlehist+=i;
1059     hInvMassD0NCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1060     hInvMassD0NCback->SetXTitle("Invariant Mass    [GeV]");
1061     hInvMassD0NCback->SetYTitle("Entries");
1062     flistNoCutsBack->Add(hInvMassD0NCback);
1063
1064     
1065     namehist="hInvMassD0barNCback_pt";
1066     namehist+=i;
1067     titlehist="Invariant Mass D0bar No Cuts Back ptbin=";
1068     titlehist+=i;
1069     hInvMassD0barNCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1070     hInvMassD0barNCback->SetXTitle("Invariant Mass    [GeV]");
1071     hInvMassD0barNCback->SetYTitle("Entries");
1072     flistNoCutsBack->Add(hInvMassD0barNCback);
1073
1074
1075     namehist="hetaNCback_pt";
1076     namehist+=i;
1077     titlehist="eta No Cuts Backgr ptbin=";
1078     titlehist+=i;
1079     hetaNCback=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
1080     hetaNCback->SetXTitle("Pseudorapidity");
1081     hetaNCback->SetYTitle("Entries");
1082     flistNoCutsBack->Add(hetaNCback);
1083
1084     namehist="hCosPDPBNCback_pt";
1085     namehist+=i;
1086     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
1087     titlehist+=i;
1088     hCosPDPBNCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1089     hCosPDPBNCback->SetXTitle("Cosine between D0 momentum and B momentum");
1090     hCosPDPBNCback->SetYTitle("Entries");
1091     flistNoCutsBack->Add(hCosPDPBNCback);
1092
1093     namehist="hCosPcPDNCback_pt";
1094     namehist+=i;
1095     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
1096     titlehist+=i;
1097     hCosPcPDNCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1098     hCosPcPDNCback->SetXTitle("Cosine between c quark momentum and D0 momentum");
1099     hCosPcPDNCback->SetYTitle("Entries");
1100     flistNoCutsBack->Add(hCosPcPDNCback);
1101
1102
1103     // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1104     namehist="hd0xd0NCback_pt";
1105     namehist+=i;
1106     titlehist="d0xd0 No Cuts Background ptbin=";
1107     titlehist+=i;
1108     hd0xd0NCbackpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
1109     hd0xd0NCbackpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
1110     hd0xd0NCbackpt->SetYTitle("Entries");
1111     flistNoCutsBack->Add(hd0xd0NCbackpt);
1112
1113
1114     namehist="hd0D0VSd0xd0NCback_pt";
1115     namehist+=i;
1116     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Back ptbin=";
1117     titlehist+=i;
1118     hd0D0VSd0xd0NCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
1119     hd0D0VSd0xd0NCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
1120     hd0D0VSd0xd0NCbackpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
1121     flistNoCutsBack->Add(hd0D0VSd0xd0NCbackpt);
1122     
1123     
1124     namehist="hangletracksVSd0xd0NCback_pt";
1125     namehist+=i;
1126     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Back ptbin=";
1127     titlehist+=i;
1128     hangletracksVSd0xd0NCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
1129     hangletracksVSd0xd0NCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
1130     hangletracksVSd0xd0NCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
1131     flistNoCutsBack->Add(hangletracksVSd0xd0NCbackpt);
1132     
1133
1134     namehist="hangletracksVSd0D0NCback_pt";
1135     namehist+=i;
1136     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts Back ptbin=";
1137     titlehist+=i;
1138     hangletracksVSd0D0NCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
1139     hangletracksVSd0D0NCbackpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
1140     hangletracksVSd0D0NCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
1141     flistNoCutsBack->Add(hangletracksVSd0D0NCbackpt);
1142
1143
1144     
1145   }
1146   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
1147   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1148
1149
1150
1151   // ####### d0 D0 histos ############
1152   
1153  TH1F *hd0D0NCbackPM = new TH1F("hd0D0NCbackPM","D^{0} impact par. plot , No Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
1154   hd0D0NCbackPM->SetXTitle("Impact parameter [#mum]");
1155   hd0D0NCbackPM->SetYTitle("Entries");
1156
1157   TH1F *hd0D0VtxTrueNCbackPM = new TH1F("hd0D0VtxTrueNCbackPM","D^{0} impact par. w.r.t. True Vtx, No Cuts, Background,Mass Peak (All momenta)",1000,-1000.,1000.);
1158   hd0D0VtxTrueNCbackPM->SetXTitle("Impact parameter [#mum]");
1159   hd0D0VtxTrueNCbackPM->SetYTitle("Entries");
1160
1161   TH1F *hMCd0D0NCbackPM = new TH1F("hMCd0D0NCbackPM","D^{0} impact par. plot, No Cuts, Background,Mass Peak  (All momenta)",1000,-1000.,1000.);
1162   hMCd0D0NCbackPM->SetXTitle("MC Impact parameter [#mum]");
1163   hMCd0D0NCbackPM->SetYTitle("Entries");
1164
1165   TH1F *hd0D0NCbackSB = new TH1F("hd0D0NCbackSB","D^{0} impact par. plot , No Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
1166   hd0D0NCbackSB->SetXTitle("Impact parameter [#mum]");
1167   hd0D0NCbackSB->SetYTitle("Entries");
1168
1169   TH1F *hd0D0VtxTrueNCbackSB = new TH1F("hd0D0VtxTrueNCbackSB","D^{0} impact par. w.r.t. True Vtx, No Cuts, Background,Mass Peak (All momenta)",1000,-1000.,1000.);
1170   hd0D0VtxTrueNCbackSB->SetXTitle("Impact parameter [#mum]");
1171   hd0D0VtxTrueNCbackSB->SetYTitle("Entries");
1172
1173   TH1F *hMCd0D0NCbackSB = new TH1F("hMCd0D0NCbackSB","D^{0} impact par. plot, No Cuts, Background,Mass Peak  (All momenta)",1000,-1000.,1000.);
1174   hMCd0D0NCbackSB->SetXTitle("MC Impact parameter [#mum]");
1175   hMCd0D0NCbackSB->SetYTitle("Entries");
1176
1177   flistNoCutsBack->Add(hd0D0NCbackPM);
1178   flistNoCutsBack->Add(hd0D0VtxTrueNCbackPM);
1179   flistNoCutsBack->Add(hMCd0D0NCbackPM);
1180   flistNoCutsBack->Add(hd0D0NCbackSB);
1181   flistNoCutsBack->Add(hd0D0VtxTrueNCbackSB);
1182   flistNoCutsBack->Add(hMCd0D0NCbackSB);
1183   
1184   TH1F *hd0D0ptNCbackPM;
1185   TH1F *hMCd0D0ptNCbackPM;
1186   TH1F *hd0D0VtxTrueptNCbackPM;
1187   TH1F *hd0D0ptNCbackSB;
1188   TH1F *hMCd0D0ptNCbackSB;
1189   TH1F *hd0D0VtxTrueptNCbackSB;
1190   namehist="hd0D0ptNCback_";
1191   titlehist="D^{0} impact par. plot, No Cuts, Background, ";
1192   for(Int_t i=0;i<fnbins;i++){
1193     strnamept=namehist;
1194     strnamept.Append("PkMss_pt");
1195     strnamept+=i;
1196
1197     strtitlept=titlehist;
1198     strtitlept.Append(" Mass Peak, ");
1199     strtitlept+=fptbins[i];
1200     strtitlept.Append("<= pt <");
1201     strtitlept+=fptbins[i+1];
1202     strtitlept.Append(" [GeV/c]");
1203     
1204     hd0D0ptNCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1205     hd0D0ptNCbackPM->SetXTitle("Impact parameter [#mum] ");
1206     hd0D0ptNCbackPM->SetYTitle("Entries");
1207     flistNoCutsBack->Add(hd0D0ptNCbackPM);
1208
1209     strnamept.ReplaceAll("hd0D0","hMCd0D0");
1210     hMCd0D0ptNCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1211     hMCd0D0ptNCbackPM->SetXTitle("MC Impact parameter [#mum] ");
1212     hMCd0D0ptNCbackPM->SetYTitle("Entries");
1213     flistNoCutsBack->Add(hMCd0D0ptNCbackPM);
1214  
1215
1216     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
1217     hd0D0VtxTrueptNCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1218     hd0D0VtxTrueptNCbackPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
1219     hd0D0VtxTrueptNCbackPM->SetYTitle("Entries");
1220     flistNoCutsBack->Add(hd0D0VtxTrueptNCbackPM);
1221     
1222     strnamept=namehist;
1223     strnamept.Append("SBMss_pt");
1224     strnamept+=i;
1225
1226     strtitlept=titlehist;
1227     strtitlept.Append(" Side Bands, ");
1228     strtitlept+=fptbins[i];
1229     strtitlept.Append("<= pt <");
1230     strtitlept+=fptbins[i+1];
1231     strtitlept.Append(" [GeV/c]");
1232     
1233     hd0D0ptNCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1234     hd0D0ptNCbackSB->SetXTitle("Impact parameter [#mum] ");
1235     hd0D0ptNCbackSB->SetYTitle("Entries");
1236     flistNoCutsBack->Add(hd0D0ptNCbackSB);
1237
1238     strnamept.ReplaceAll("hd0D0","hMCd0D0");
1239     hMCd0D0ptNCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1240     hMCd0D0ptNCbackSB->SetXTitle("MC Impact parameter [#mum] ");
1241     hMCd0D0ptNCbackSB->SetYTitle("Entries");
1242     flistNoCutsBack->Add(hMCd0D0ptNCbackSB);
1243
1244     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
1245     hd0D0VtxTrueptNCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1246     hd0D0VtxTrueptNCbackSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
1247     hd0D0VtxTrueptNCbackSB->SetYTitle("Entries");
1248     flistNoCutsBack->Add(hd0D0VtxTrueptNCbackSB);
1249   }
1250
1251
1252
1253  //############ NO CUTS FROMB HISTOGRAMS ###########
1254   //
1255   //#######  global properties histos
1256
1257   TH2F *hCPtaVSd0d0NCfromB=new TH2F("hCPtaVSd0d0NCfromB","hCPtaVSd0d0_NoCuts_FromB",1000,-100000.,100000.,100,-1.,1.);
1258   TH1F *hSecVtxZNCfromB=new TH1F("hSecVtxZNCfromB","hSecVtxZ_NoCuts_FromB",1000,-8.,8.);
1259   TH1F *hSecVtxXNCfromB=new TH1F("hSecVtxXNCfromB","hSecVtxX_NoCuts_FromB",1000,-3000.,3000.);
1260   TH1F *hSecVtxYNCfromB=new TH1F("hSecVtxYNCfromB","hSecVtxY_NoCuts_FromB",1000,-3000.,3000.);
1261   TH2F *hSecVtxXYNCfromB=new TH2F("hSecVtxXYNCfromB","hSecVtxXY_NoCuts_FromB",1000,-3000.,3000.,1000,-3000.,3000.);
1262   TH1F *hSecVtxPhiNCfromB=new TH1F("hSecVtxPhiNCfromB","hSecVtxPhi_NoCuts_FromB",180,-180.1,180.1);
1263   TH1F *hd0singlTrackNCfromB=new TH1F("hd0singlTrackNCfromB","hd0singlTrackNoCuts_FromB",1000,-5000.,5000.);
1264   TH1F *hCPtaNCfromB=new TH1F("hCPtaNCfromB","hCPta_NoCuts_FromB",100,-1.,1.);
1265   TH1F *hd0xd0NCfromB=new TH1F("hd0xd0NCfromB","hd0xd0_NoCuts_FromB",1000,-100000.,100000.);
1266   TH1F *hMassTrueNCfromB=new TH1F("hMassTrueNCfromB","D^{0} MC inv. Mass No Cuts FromB(All momenta)",600,1.600,2.200);
1267   TH1F *hMassNCfromB=new TH1F("hMassNCfromB","D^{0} inv. Mass No Cuts FromB (All momenta)",600,1.600,2.200);
1268   hMassNCfromB->Sumw2();
1269   TH1F *hMassTrueNCfromBPM=new TH1F("hMassTrueNCfromBPM","D^{0} MC inv. Mass No Cuts FromB, Mass Peak. (All momenta)",600,1.600,2.200);
1270   TH1F *hMassNCfromBPM=new TH1F("hMassNCfromBPM","D^{0} inv. Mass No Cuts FromB (All momenta), MassPeak",600,1.600,2.200);
1271   hMassNCfromB->Sumw2();
1272   TH1F *hMassTrueNCfromBSB=new TH1F("hMassTrueNCfromBSB","D^{0} MC inv. Mass in Side Bands No Cuts FromB(All momenta)",600,1.600,2.200);
1273   TH1F *hMassNCfromBSB=new TH1F("hMassNCfromBSB","D^{0} inv. Mass in Side Bands No Cuts FromB (All momenta)",600,1.600,2.200);
1274   hMassNCfromBSB->Sumw2();
1275
1276   flistNoCutsFromB->Add(hCPtaVSd0d0NCfromB);
1277   flistNoCutsFromB->Add(hSecVtxZNCfromB);
1278   flistNoCutsFromB->Add(hSecVtxYNCfromB);
1279   flistNoCutsFromB->Add(hSecVtxXNCfromB);
1280   flistNoCutsFromB->Add(hSecVtxXYNCfromB);
1281   flistNoCutsFromB->Add(hSecVtxPhiNCfromB);
1282   flistNoCutsFromB->Add(hd0singlTrackNCfromB);
1283   flistNoCutsFromB->Add(hCPtaNCfromB);
1284   flistNoCutsFromB->Add(hd0xd0NCfromB);
1285   flistNoCutsFromB->Add(hMassTrueNCfromB);
1286   flistNoCutsFromB->Add(hMassNCfromB);
1287   flistNoCutsFromB->Add(hMassTrueNCfromBPM);
1288   flistNoCutsFromB->Add(hMassNCfromBPM);
1289   flistNoCutsFromB->Add(hMassTrueNCfromBSB);
1290   flistNoCutsFromB->Add(hMassNCfromBSB);
1291
1292
1293
1294
1295
1296  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
1297   TH1F *hdcaNCfromB=new TH1F("hdcaNCfromB","hdca_NoCuts_FromB",100,0.,1000.);
1298   hdcaNCfromB->SetXTitle("dca   [#mum]");
1299   hdcaNCfromB->SetYTitle("Entries");
1300   TH1F *hcosthetastarNCfromB=new TH1F("hcosthetastarNCfromB","hCosThetaStar_NoCuts_FromB",50,-1.,1.);
1301   hcosthetastarNCfromB->SetXTitle("cos #theta^{*}");
1302   hcosthetastarNCfromB->SetYTitle("Entries");
1303   TH1F *hptD0NCfromB=new TH1F("hptD0NCfromB","D^{0} transverse momentum distribution",34,ptbinsD0arr);
1304   hptD0NCfromB->SetXTitle("p_{t}  [GeV/c]");
1305   hptD0NCfromB->SetYTitle("Entries");
1306   TH1F *hptD0VsMaxPtNCfromB=new TH1F("hptD0VsMaxPtNCfromB","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
1307   TH2F *hptD0PTallsqrtNCfromB=new TH2F("hptD0PTallsqrtNCfromB","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
1308   TH2F *hptD0PTallNCfromB=new TH2F("hptD0PTallNCfromB","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
1309   TH2F *hptD0vsptBNCfromB=new TH2F("hptD0vsptBNCfromB","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1310   TH2F *hpD0vspBNCfromB=new TH2F("hpD0vspBNCfromB","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1311   TH2F *hptD0vsptcquarkNCfromB=new TH2F("hptD0vsptcquarkNCfromB","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1312   TH2F *hpD0vspcquarkNCfromB=new TH2F("hpD0vspcquarkNCfromB","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1313   flistNoCutsFromB->Add(hdcaNCfromB);
1314   flistNoCutsFromB->Add(hcosthetastarNCfromB);
1315   flistNoCutsFromB->Add(hptD0NCfromB);
1316   flistNoCutsFromB->Add(hptD0VsMaxPtNCfromB);
1317   flistNoCutsFromB->Add(hptD0PTallsqrtNCfromB);
1318   flistNoCutsFromB->Add(hptD0PTallNCfromB);
1319   flistNoCutsFromB->Add(hptD0vsptBNCfromB);
1320   flistNoCutsFromB->Add(hpD0vspBNCfromB);
1321   flistNoCutsFromB->Add(hptD0vsptcquarkNCfromB);
1322   flistNoCutsFromB->Add(hpD0vspcquarkNCfromB);
1323  
1324   TH1F *hd0zD0ptNCfromB;
1325   TH1F *hInvMassD0NCfromB,*hInvMassD0barNCfromB;
1326   TH2F *hInvMassPtNCfromB=new TH2F("hInvMassPtNCfromB","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
1327  THnSparseF *hSparseNCfromB=new THnSparseF("hSparseNCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
1328   hSparseNCfromB->SetBinEdges(0,massbins);
1329   hSparseNCfromB->SetBinEdges(1,massbins);
1330   hSparseNCfromB->SetBinEdges(2,ptbinsForNsparse);
1331   hSparseNCfromB->SetBinEdges(3,impparbins);
1332   hSparseNCfromB->SetBinEdges(4,massHypoBins); 
1333   flistNoCutsFromB->Add(hSparseNCfromB);
1334
1335   TH1F *hetaNCfromB;
1336   TH1F *hCosPDPBNCfromB;
1337   TH1F *hCosPcPDNCfromB;
1338
1339    // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1340   TH2F *hd0D0VSd0xd0NCfromBpt;
1341   TH2F *hangletracksVSd0xd0NCfromBpt;
1342   TH2F *hangletracksVSd0D0NCfromBpt;
1343   TH1F *hd0xd0NCfromBpt;
1344   flistNoCutsFromB->Add(hInvMassPtNCfromB);
1345
1346   TH2F *hTOFpidNCfromB=new TH2F("hTOFpidNCfromB","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
1347   flistNoCutsFromB->Add(hTOFpidNCfromB);
1348
1349   for(Int_t i=0;i<fnbins;i++){
1350     namehist="hd0zD0ptNCfromB_pt";
1351     namehist+=i;
1352     titlehist="d0(z) No Cuts FromB ptbin=";
1353     titlehist+=i;
1354     hd0zD0ptNCfromB=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
1355     hd0zD0ptNCfromB->SetXTitle("d_{0}(z)    [#mum]");
1356     hd0zD0ptNCfromB->SetYTitle("Entries");
1357     flistNoCutsFromB->Add(hd0zD0ptNCfromB);
1358
1359     namehist="hInvMassD0NCfromB_pt";
1360     namehist+=i;
1361     titlehist="Invariant Mass No Cuts FromB ptbin=";
1362     titlehist+=i;
1363     hInvMassD0NCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1364     hInvMassD0NCfromB->SetXTitle("Invariant Mass    [GeV]");
1365     hInvMassD0NCfromB->SetYTitle("Entries");
1366     flistNoCutsFromB->Add(hInvMassD0NCfromB);
1367
1368
1369     namehist="hInvMassD0barNCfromB_pt";
1370     namehist+=i;
1371     titlehist="Invariant Mass D0bar No Cuts FromB ptbin=";
1372     titlehist+=i;
1373     hInvMassD0barNCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1374     hInvMassD0barNCfromB->SetXTitle("Invariant Mass    [GeV]");
1375     hInvMassD0barNCfromB->SetYTitle("Entries");
1376     flistNoCutsFromB->Add(hInvMassD0barNCfromB);
1377
1378
1379
1380     namehist="hetaNCfromB_pt";
1381     namehist+=i;
1382     titlehist="eta No Cuts FromB ptbin=";
1383     titlehist+=i;
1384     hetaNCfromB=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
1385     hetaNCfromB->SetXTitle("Pseudorapidity");
1386     hetaNCfromB->SetYTitle("Entries");
1387     flistNoCutsFromB->Add(hetaNCfromB);
1388
1389     namehist="hCosPDPBNCfromB_pt";
1390     namehist+=i;
1391     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
1392     titlehist+=i;
1393     hCosPDPBNCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1394     hCosPDPBNCfromB->SetXTitle("Cosine between D0 momentum and B momentum");
1395     hCosPDPBNCfromB->SetYTitle("Entries");
1396     flistNoCutsFromB->Add(hCosPDPBNCfromB);
1397
1398     namehist="hCosPcPDNCfromB_pt";
1399     namehist+=i;
1400     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
1401     titlehist+=i;
1402     hCosPcPDNCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1403     hCosPcPDNCfromB->SetXTitle("Cosine between c quark momentum and D0 momentum");
1404     hCosPcPDNCfromB->SetYTitle("Entries");
1405     flistNoCutsFromB->Add(hCosPcPDNCfromB);
1406
1407 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1408     namehist="hd0xd0NCfromB_pt";
1409     namehist+=i;
1410     titlehist="d0xd0 No Cuts FromB ptbin=";
1411     titlehist+=i;
1412     hd0xd0NCfromBpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
1413     hd0xd0NCfromBpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
1414     hd0xd0NCfromBpt->SetYTitle("Entries");
1415     flistNoCutsFromB->Add(hd0xd0NCfromBpt);
1416
1417
1418     namehist="hd0D0VSd0xd0NCfromB_pt";
1419     namehist+=i;
1420     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromB ptbin=";
1421     titlehist+=i;
1422     hd0D0VSd0xd0NCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
1423     hd0D0VSd0xd0NCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
1424     hd0D0VSd0xd0NCfromBpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
1425     flistNoCutsFromB->Add(hd0D0VSd0xd0NCfromBpt);
1426     
1427     
1428     namehist="hangletracksVSd0xd0NCfromB_pt";
1429     namehist+=i;
1430     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromB ptbin=";
1431     titlehist+=i;
1432     hangletracksVSd0xd0NCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
1433     hangletracksVSd0xd0NCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
1434     hangletracksVSd0xd0NCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
1435     flistNoCutsFromB->Add(hangletracksVSd0xd0NCfromBpt);
1436     
1437
1438     namehist="hangletracksVSd0D0NCfromB_pt";
1439     namehist+=i;
1440     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts FromB ptbin=";
1441     titlehist+=i;
1442     hangletracksVSd0D0NCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
1443     hangletracksVSd0D0NCfromBpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
1444     hangletracksVSd0D0NCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
1445     flistNoCutsFromB->Add(hangletracksVSd0D0NCfromBpt);
1446
1447     
1448   }
1449   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
1450   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1451
1452
1453
1454   // ######### d0 D0 histos ##############
1455   TH1F *hd0D0NCfromBPM = new TH1F("hd0D0NCfromBPM","D^{0} impact par. plot , No Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
1456   hd0D0NCfromBPM->SetXTitle("Impact parameter [#mum]");
1457   hd0D0NCfromBPM->SetYTitle("Entries");
1458
1459   TH1F *hd0D0VtxTrueNCfromBPM = new TH1F("hd0D0VtxTrueNCfromBPM","D^{0} impact par. w.r.t. True Vtx, No Cuts, FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
1460   hd0D0VtxTrueNCfromBPM->SetXTitle("Impact parameter [#mum]");
1461   hd0D0VtxTrueNCfromBPM->SetYTitle("Entries");
1462
1463   TH1F *hMCd0D0NCfromBPM = new TH1F("hMCd0D0NCfromBPM","D^{0} impact par. plot, No Cuts, FromB,Mass Peak  (All momenta)",1000,-1000.,1000.);
1464   hMCd0D0NCfromBPM->SetXTitle("MC Impact parameter [#mum]");
1465   hMCd0D0NCfromBPM->SetYTitle("Entries");
1466
1467   TH1F *hd0D0NCfromBSB = new TH1F("hd0D0NCfromBSB","D^{0} impact par. plot , No Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
1468   hd0D0NCfromBSB->SetXTitle("Impact parameter [#mum]");
1469   hd0D0NCfromBSB->SetYTitle("Entries");
1470
1471   TH1F *hd0D0VtxTrueNCfromBSB = new TH1F("hd0D0VtxTrueNCfromBSB","D^{0} impact par. w.r.t. True Vtx, No Cuts, FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
1472   hd0D0VtxTrueNCfromBSB->SetXTitle("Impact parameter [#mum]");
1473   hd0D0VtxTrueNCfromBSB->SetYTitle("Entries");
1474
1475   TH1F *hMCd0D0NCfromBSB = new TH1F("hMCd0D0NCfromBSB","D^{0} impact par. plot, No Cuts, FromB,Mass Peak  (All momenta)",1000,-1000.,1000.);
1476   hMCd0D0NCfromBSB->SetXTitle("MC Impact parameter [#mum]");
1477   hMCd0D0NCfromBSB->SetYTitle("Entries");
1478
1479   flistNoCutsFromB->Add(hd0D0NCfromBPM);
1480   flistNoCutsFromB->Add(hd0D0VtxTrueNCfromBPM);
1481   flistNoCutsFromB->Add(hMCd0D0NCfromBPM);
1482   flistNoCutsFromB->Add(hd0D0NCfromBSB);
1483   flistNoCutsFromB->Add(hd0D0VtxTrueNCfromBSB);
1484   flistNoCutsFromB->Add(hMCd0D0NCfromBSB);
1485   
1486   TH1F *hd0D0ptNCfromBPM;
1487   TH1F *hMCd0D0ptNCfromBPM;
1488   TH1F *hd0D0VtxTrueptNCfromBPM;
1489   TH1F *hd0D0ptNCfromBSB;
1490   TH1F *hMCd0D0ptNCfromBSB;
1491   TH1F *hd0D0VtxTrueptNCfromBSB;
1492   namehist="hd0D0ptNCfromB_";
1493   titlehist="D^{0} impact par. plot, No Cuts, FromB, ";
1494   for(Int_t i=0;i<fnbins;i++){
1495     strnamept=namehist;
1496     strnamept.Append("PkMss_pt");
1497     strnamept+=i;
1498
1499     strtitlept=titlehist;
1500     strtitlept.Append(" Mass Peak, ");
1501     strtitlept+=fptbins[i];
1502     strtitlept.Append("<= pt <");
1503     strtitlept+=fptbins[i+1];
1504     strtitlept.Append(" [GeV/c]");
1505     
1506     hd0D0ptNCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1507     hd0D0ptNCfromBPM->SetXTitle("Impact parameter [#mum] ");
1508     hd0D0ptNCfromBPM->SetYTitle("Entries");
1509     flistNoCutsFromB->Add(hd0D0ptNCfromBPM);
1510
1511     strnamept.ReplaceAll("hd0D0","hMCd0D0");
1512     hMCd0D0ptNCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1513     hMCd0D0ptNCfromBPM->SetXTitle("MC Impact parameter [#mum] ");
1514     hMCd0D0ptNCfromBPM->SetYTitle("Entries");
1515     flistNoCutsFromB->Add(hMCd0D0ptNCfromBPM);
1516  
1517
1518     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
1519     hd0D0VtxTrueptNCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1520     hd0D0VtxTrueptNCfromBPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
1521     hd0D0VtxTrueptNCfromBPM->SetYTitle("Entries");
1522     flistNoCutsFromB->Add(hd0D0VtxTrueptNCfromBPM);
1523     
1524     strnamept=namehist;
1525     strnamept.Append("SBMss_pt");
1526     strnamept+=i;
1527
1528     strtitlept=titlehist;
1529     strtitlept.Append(" Side Bands, ");
1530     strtitlept+=fptbins[i];
1531     strtitlept.Append("<= pt <");
1532     strtitlept+=fptbins[i+1];
1533     strtitlept.Append(" [GeV/c]");
1534     
1535     hd0D0ptNCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1536     hd0D0ptNCfromBSB->SetXTitle("Impact parameter [#mum] ");
1537     hd0D0ptNCfromBSB->SetYTitle("Entries");
1538     flistNoCutsFromB->Add(hd0D0ptNCfromBSB);
1539
1540     strnamept.ReplaceAll("hd0D0","hMCd0D0");
1541     hMCd0D0ptNCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1542     hMCd0D0ptNCfromBSB->SetXTitle("MC Impact parameter [#mum] ");
1543     hMCd0D0ptNCfromBSB->SetYTitle("Entries");
1544     flistNoCutsFromB->Add(hMCd0D0ptNCfromBSB);
1545
1546     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
1547     hd0D0VtxTrueptNCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1548     hd0D0VtxTrueptNCfromBSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
1549     hd0D0VtxTrueptNCfromBSB->SetYTitle("Entries");
1550     flistNoCutsFromB->Add(hd0D0VtxTrueptNCfromBSB);
1551   }
1552
1553
1554
1555   //############ NO CUTS FROM DSTAR HISTOGRAMS ###########
1556   //
1557   //#############  global properties histos #######
1558
1559   TH2F *hCPtaVSd0d0NCfromDstar=new TH2F("hCPtaVSd0d0NCfromDstar","hCPtaVSd0d0_NoCuts_FromDStar",1000,-100000.,100000.,100,-1.,1.);
1560   TH1F *hSecVtxZNCfromDstar=new TH1F("hSecVtxZNCfromDstar","hSecVtxZ_NoCuts_FromDStar",1000,-8.,8.);
1561   TH1F *hSecVtxXNCfromDstar=new TH1F("hSecVtxXNCfromDstar","hSecVtxX_NoCuts_FromDStar",1000,-3000.,3000.);
1562   TH1F *hSecVtxYNCfromDstar=new TH1F("hSecVtxYNCfromDstar","hSecVtxY_NoCuts_FromDStar",1000,-3000.,3000.);
1563   TH2F *hSecVtxXYNCfromDstar=new TH2F("hSecVtxXYNCfromDstar","hSecVtxXY_NoCuts_FromDStar",1000,-3000.,3000.,1000,-3000.,3000.);
1564   TH1F *hSecVtxPhiNCfromDstar=new TH1F("hSecVtxPhiNCfromDstar","hSecVtxPhi_NoCuts_FromDStar",180,-180.1,180.1);
1565   TH1F *hd0singlTrackNCfromDstar=new TH1F("hd0singlTrackNCfromDstar","hd0singlTrackNoCuts_fromDstar",1000,-5000.,5000.);
1566   TH1F *hCPtaNCfromDstar=new TH1F("hCPtaNCfromDstar","hCPta_NoCuts_FromDStar",100,-1.,1.);
1567   TH1F *hd0xd0NCfromDstar=new TH1F("hd0xd0NCfromDstar","hd0xd0_NoCuts_FromDStar",1000,-100000.,100000.);
1568   TH1F *hMassTrueNCfromDstar=new TH1F("hMassTrueNCfromDstar","D^{0} MC inv. Mass No Cuts FromDStar(All momenta)",600,1.600,2.200);
1569   TH1F *hMassNCfromDstar=new TH1F("hMassNCfromDstar","D^{0} inv. Mass No Cuts FromDStar (All momenta)",600,1.600,2.200);
1570   hMassNCfromDstar->Sumw2();
1571   TH1F *hMassTrueNCfromDstarPM=new TH1F("hMassTrueNCfromDstarPM","D^{0} MC inv. Mass No Cuts FromDStar, Mass Peak. (All momenta)",600,1.600,2.200);
1572   TH1F *hMassNCfromDstarPM=new TH1F("hMassNCfromDstarPM","D^{0} inv. Mass No Cuts FromDStar (All momenta), MassPeak",600,1.600,2.200);
1573   hMassNCfromDstarPM->Sumw2();
1574   TH1F *hMassTrueNCfromDstarSB=new TH1F("hMassTrueNCfromDstarSB","D^{0} MC inv. Mass in Side Bands No Cuts FromDStar(All momenta)",600,1.600,2.200);
1575   TH1F *hMassNCfromDstarSB=new TH1F("hMassNCfromDstarSB","D^{0} inv. Mass in Side Bands No Cuts FromDStar (All momenta)",600,1.600,2.200);
1576   hMassNCfromDstarSB->Sumw2();
1577
1578   flistNoCutsFromDstar->Add(hCPtaVSd0d0NCfromDstar);
1579   flistNoCutsFromDstar->Add(hSecVtxZNCfromDstar);
1580   flistNoCutsFromDstar->Add(hSecVtxYNCfromDstar);
1581   flistNoCutsFromDstar->Add(hSecVtxXNCfromDstar);
1582   flistNoCutsFromDstar->Add(hSecVtxXYNCfromDstar);
1583   flistNoCutsFromDstar->Add(hSecVtxPhiNCfromDstar);
1584   flistNoCutsFromDstar->Add(hd0singlTrackNCfromDstar);
1585   flistNoCutsFromDstar->Add(hCPtaNCfromDstar);
1586   flistNoCutsFromDstar->Add(hd0xd0NCfromDstar);
1587   flistNoCutsFromDstar->Add(hMassTrueNCfromDstar);
1588   flistNoCutsFromDstar->Add(hMassNCfromDstar);
1589   flistNoCutsFromDstar->Add(hMassTrueNCfromDstarPM);
1590   flistNoCutsFromDstar->Add(hMassNCfromDstarPM);
1591   flistNoCutsFromDstar->Add(hMassTrueNCfromDstarSB);
1592   flistNoCutsFromDstar->Add(hMassNCfromDstarSB);
1593
1594
1595
1596
1597 //%%% NEW HISTOS %%%%%%%%%%%%%%%%
1598   TH1F *hdcaNCfromDstar=new TH1F("hdcaNCfromDstar","hdca_NoCuts_FromDstar",100,0.,1000.);
1599   hdcaNCfromDstar->SetXTitle("dca   [#mum]");
1600   hdcaNCfromDstar->SetYTitle("Entries");
1601   TH1F *hcosthetastarNCfromDstar=new TH1F("hcosthetastarNCfromDstar","hCosThetaStar_NoCuts_FromDstar",50,-1.,1.);
1602   hcosthetastarNCfromDstar->SetXTitle("cos #theta^{*}");
1603   hcosthetastarNCfromDstar->SetYTitle("Entries");
1604   TH1F *hptD0NCfromDstar=new TH1F("hptD0NCfromDstar","D^{0} transverse momentum distribution",34,ptbinsD0arr);
1605   hptD0NCfromDstar->SetXTitle("p_{t}  [GeV/c]");
1606   hptD0NCfromDstar->SetYTitle("Entries");
1607   TH1F *hptD0VsMaxPtNCfromDstar=new TH1F("hptD0VsMaxPtNCfromDstar","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
1608   TH2F *hptD0PTallsqrtNCfromDstar=new TH2F("hptD0PTallsqrtNCfromDstar","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
1609   TH2F *hptD0PTallNCfromDstar=new TH2F("hptD0PTallNCfromDstar","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
1610   TH2F *hptD0vsptBNCfromDstar=new TH2F("hptD0vsptBNCfromDstar","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1611   TH2F *hpD0vspBNCfromDstar=new TH2F("hpD0vspBNCfromDstar","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1612   TH2F *hptD0vsptcquarkNCfromDstar=new TH2F("hptD0vsptcquarkNCfromDstar","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1613   TH2F *hpD0vspcquarkNCfromDstar=new TH2F("hpD0vspcquarkNCfromDstar","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1614   flistNoCutsFromDstar->Add(hdcaNCfromDstar);
1615   flistNoCutsFromDstar->Add(hcosthetastarNCfromDstar);
1616   flistNoCutsFromDstar->Add(hptD0NCfromDstar);
1617   flistNoCutsFromDstar->Add(hptD0VsMaxPtNCfromDstar);
1618   flistNoCutsFromDstar->Add(hptD0PTallsqrtNCfromDstar);
1619   flistNoCutsFromDstar->Add(hptD0PTallNCfromDstar);
1620   flistNoCutsFromDstar->Add(hptD0vsptBNCfromDstar);
1621   flistNoCutsFromDstar->Add(hpD0vspBNCfromDstar);
1622   flistNoCutsFromDstar->Add(hptD0vsptcquarkNCfromDstar);
1623   flistNoCutsFromDstar->Add(hpD0vspcquarkNCfromDstar);
1624  
1625   TH1F *hd0zD0ptNCfromDstar;
1626   TH1F *hInvMassD0NCfromDstar,*hInvMassD0barNCfromDstar;
1627   TH2F *hInvMassPtNCfromDstar=new TH2F("hInvMassPtNCfromDstar","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
1628  THnSparseF *hSparseNCfromDstar=new THnSparseF("hSparseNCfromDstar","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
1629   hSparseNCfromDstar->SetBinEdges(0,massbins);
1630   hSparseNCfromDstar->SetBinEdges(1,massbins);
1631   hSparseNCfromDstar->SetBinEdges(2,ptbinsForNsparse);
1632   hSparseNCfromDstar->SetBinEdges(3,impparbins);
1633   hSparseNCfromDstar->SetBinEdges(4,massHypoBins); 
1634   flistNoCutsFromDstar->Add(hSparseNCfromDstar);
1635   TH1F *hetaNCfromDstar;
1636   TH1F *hCosPDPBNCfromDstar;
1637   TH1F *hCosPcPDNCfromDstar;
1638   flistNoCutsFromDstar->Add(hInvMassPtNCfromDstar);
1639   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1640   TH2F *hd0D0VSd0xd0NCfromDstarpt;
1641   TH2F *hangletracksVSd0xd0NCfromDstarpt;
1642   TH2F *hangletracksVSd0D0NCfromDstarpt;
1643   TH1F *hd0xd0NCfromDstarpt;
1644
1645   TH2F *hTOFpidNCfromDstar=new TH2F("hTOFpidNCfromDstar","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
1646   flistNoCutsFromDstar->Add(hTOFpidNCfromDstar);
1647
1648   for(Int_t i=0;i<fnbins;i++){
1649     namehist="hd0zD0ptNCfromDstar_pt";
1650     namehist+=i;
1651     titlehist="d0(z) No Cuts FromDstarm ptbin=";
1652     titlehist+=i;
1653     hd0zD0ptNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
1654     hd0zD0ptNCfromDstar->SetXTitle("d_{0}(z)    [#mum]");
1655     hd0zD0ptNCfromDstar->SetYTitle("Entries");
1656     flistNoCutsFromDstar->Add(hd0zD0ptNCfromDstar);
1657
1658     namehist="hInvMassD0NCfromDstar_pt";
1659     namehist+=i;
1660     titlehist="Invariant Mass No Cuts FromDstar ptbin=";
1661     titlehist+=i;
1662     hInvMassD0NCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1663     hInvMassD0NCfromDstar->SetXTitle("Invariant Mass    [GeV]");
1664     hInvMassD0NCfromDstar->SetYTitle("Entries");
1665     flistNoCutsFromDstar->Add(hInvMassD0NCfromDstar);
1666
1667
1668    namehist="hInvMassD0barNCfromDstar_pt";
1669     namehist+=i;
1670     titlehist="Invariant Mass D0bar No Cuts FromDstar ptbin=";
1671     titlehist+=i;
1672     hInvMassD0barNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1673     hInvMassD0barNCfromDstar->SetXTitle("Invariant Mass    [GeV]");
1674     hInvMassD0barNCfromDstar->SetYTitle("Entries");
1675     flistNoCutsFromDstar->Add(hInvMassD0barNCfromDstar);
1676
1677
1678
1679     namehist="hetaNCfromDstar_pt";
1680     namehist+=i;
1681     titlehist="eta No Cuts FromDstar ptbin=";
1682     titlehist+=i;
1683     hetaNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
1684     hetaNCfromDstar->SetXTitle("Pseudorapidity");
1685     hetaNCfromDstar->SetYTitle("Entries");
1686     flistNoCutsFromDstar->Add(hetaNCfromDstar);
1687
1688     namehist="hCosPDPBNCfromDstar_pt";
1689     namehist+=i;
1690     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
1691     titlehist+=i;
1692     hCosPDPBNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1693     hCosPDPBNCfromDstar->SetXTitle("Cosine between D0 momentum and B momentum");
1694     hCosPDPBNCfromDstar->SetYTitle("Entries");
1695     flistNoCutsFromDstar->Add(hCosPDPBNCfromDstar);
1696
1697     namehist="hCosPcPDNCfromDstar_pt";
1698     namehist+=i;
1699     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
1700     titlehist+=i;
1701     hCosPcPDNCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1702     hCosPcPDNCfromDstar->SetXTitle("Cosine between c quark momentum and D0 momentum");
1703     hCosPcPDNCfromDstar->SetYTitle("Entries");
1704     flistNoCutsFromDstar->Add(hCosPcPDNCfromDstar);
1705   
1706  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1707     namehist="hd0xd0NCfromDstar_pt";
1708     namehist+=i;
1709     titlehist="d0xd0 No Cuts FromDstar ptbin=";
1710     titlehist+=i;
1711     hd0xd0NCfromDstarpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
1712     hd0xd0NCfromDstarpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
1713     hd0xd0NCfromDstarpt->SetYTitle("Entries");
1714     flistNoCutsFromDstar->Add(hd0xd0NCfromDstarpt);
1715
1716
1717     namehist="hd0D0VSd0xd0NCfromDstar_pt";
1718     namehist+=i;
1719     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromDstar ptbin=";
1720     titlehist+=i;
1721     hd0D0VSd0xd0NCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
1722     hd0D0VSd0xd0NCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
1723     hd0D0VSd0xd0NCfromDstarpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
1724     flistNoCutsFromDstar->Add(hd0D0VSd0xd0NCfromDstarpt);
1725     
1726     
1727     namehist="hangletracksVSd0xd0NCfromDstar_pt";
1728     namehist+=i;
1729     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts FromDstar ptbin=";
1730     titlehist+=i;
1731     hangletracksVSd0xd0NCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
1732     hangletracksVSd0xd0NCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
1733     hangletracksVSd0xd0NCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
1734     flistNoCutsFromDstar->Add(hangletracksVSd0xd0NCfromDstarpt);
1735     
1736
1737     namehist="hangletracksVSd0D0NCfromDstar_pt";
1738     namehist+=i;
1739     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts FromDstar ptbin=";
1740     titlehist+=i;
1741     hangletracksVSd0D0NCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
1742     hangletracksVSd0D0NCfromDstarpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
1743     hangletracksVSd0D0NCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
1744     flistNoCutsFromDstar->Add(hangletracksVSd0D0NCfromDstarpt);
1745   
1746   }
1747   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
1748   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1749
1750
1751   //########## d0 D0 histos #############  
1752   TH1F *hd0D0NCfromDstPM = new TH1F("hd0D0NCfromDstarPM","D^{0} impact par. plot , No Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
1753   hd0D0NCfromDstPM->SetXTitle("Impact parameter [#mum]");
1754   hd0D0NCfromDstPM->SetYTitle("Entries");
1755
1756   TH1F *hd0D0VtxTrueNCfromDstPM = new TH1F("hd0D0VtxTrueNCfromDstarPM","D^{0} impact par. w.r.t. True Vtx, No Cuts, FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
1757   hd0D0VtxTrueNCfromDstPM->SetXTitle("Impact parameter [#mum]");
1758   hd0D0VtxTrueNCfromDstPM->SetYTitle("Entries");
1759
1760   TH1F *hMCd0D0NCfromDstPM = new TH1F("hMCd0D0NCfromDstarPM","D^{0} impact par. plot, No Cuts, FromDStar,Mass Peak  (All momenta)",1000,-1000.,1000.);
1761   hMCd0D0NCfromDstPM->SetXTitle("MC Impact parameter [#mum]");
1762   hMCd0D0NCfromDstPM->SetYTitle("Entries");
1763
1764   TH1F *hd0D0NCfromDstSB = new TH1F("hd0D0NCfromDstarSB","D^{0} impact par. plot , No Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
1765   hd0D0NCfromDstSB->SetXTitle("Impact parameter [#mum]");
1766   hd0D0NCfromDstSB->SetYTitle("Entries");
1767
1768   TH1F *hd0D0VtxTrueNCfromDstSB = new TH1F("hd0D0VtxTrueNCfromDstarSB","D^{0} impact par. w.r.t. True Vtx, No Cuts, FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
1769   hd0D0VtxTrueNCfromDstSB->SetXTitle("Impact parameter [#mum]");
1770   hd0D0VtxTrueNCfromDstSB->SetYTitle("Entries");
1771
1772   TH1F *hMCd0D0NCfromDstSB = new TH1F("hMCd0D0NCfromDstarSB","D^{0} impact par. plot, No Cuts, FromDStar,Mass Peak  (All momenta)",1000,-1000.,1000.);
1773   hMCd0D0NCfromDstSB->SetXTitle("MC Impact parameter [#mum]");
1774   hMCd0D0NCfromDstSB->SetYTitle("Entries");
1775
1776   flistNoCutsFromDstar->Add(hd0D0NCfromDstPM);
1777   flistNoCutsFromDstar->Add(hd0D0VtxTrueNCfromDstPM);
1778   flistNoCutsFromDstar->Add(hMCd0D0NCfromDstPM);
1779   flistNoCutsFromDstar->Add(hd0D0NCfromDstSB);
1780   flistNoCutsFromDstar->Add(hd0D0VtxTrueNCfromDstSB);
1781   flistNoCutsFromDstar->Add(hMCd0D0NCfromDstSB);
1782   
1783   TH1F *hd0D0ptNCfromDstPM;
1784   TH1F *hMCd0D0ptNCfromDstPM;
1785   TH1F *hd0D0VtxTrueptNCfromDstPM;
1786   TH1F *hd0D0ptNCfromDstSB;
1787   TH1F *hMCd0D0ptNCfromDstSB;
1788   TH1F *hd0D0VtxTrueptNCfromDstSB;
1789   namehist="hd0D0ptNCfromDstar_";
1790   titlehist="D^{0} impact par. plot, No Cuts, FromDStar, ";
1791   for(Int_t i=0;i<fnbins;i++){
1792     strnamept=namehist;
1793     strnamept.Append("PkMss_pt");
1794     strnamept+=i;
1795
1796     strtitlept=titlehist;
1797     strtitlept.Append(" Mass Peak, ");
1798     strtitlept+=fptbins[i];
1799     strtitlept.Append("<= pt <");
1800     strtitlept+=fptbins[i+1];
1801     strtitlept.Append(" [GeV/c]");
1802     
1803     hd0D0ptNCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1804     hd0D0ptNCfromDstPM->SetXTitle("Impact parameter [#mum] ");
1805     hd0D0ptNCfromDstPM->SetYTitle("Entries");
1806     flistNoCutsFromDstar->Add(hd0D0ptNCfromDstPM);
1807
1808     strnamept.ReplaceAll("hd0D0","hMCd0D0");
1809     hMCd0D0ptNCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1810     hMCd0D0ptNCfromDstPM->SetXTitle("MC Impact parameter [#mum] ");
1811     hMCd0D0ptNCfromDstPM->SetYTitle("Entries");
1812     flistNoCutsFromDstar->Add(hMCd0D0ptNCfromDstPM);
1813  
1814
1815     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
1816     hd0D0VtxTrueptNCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1817     hd0D0VtxTrueptNCfromDstPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
1818     hd0D0VtxTrueptNCfromDstPM->SetYTitle("Entries");
1819     flistNoCutsFromDstar->Add(hd0D0VtxTrueptNCfromDstPM);
1820     
1821     strnamept=namehist;
1822     strnamept.Append("SBMss_pt");
1823     strnamept+=i;
1824
1825     strtitlept=titlehist;
1826     strtitlept.Append(" Side Bands, ");
1827     strtitlept+=fptbins[i];
1828     strtitlept.Append("<= pt <");
1829     strtitlept+=fptbins[i+1];
1830     strtitlept.Append(" [GeV/c]");
1831     
1832     hd0D0ptNCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1833     hd0D0ptNCfromDstSB->SetXTitle("Impact parameter [#mum] ");
1834     hd0D0ptNCfromDstSB->SetYTitle("Entries");
1835     flistNoCutsFromDstar->Add(hd0D0ptNCfromDstSB);
1836
1837     strnamept.ReplaceAll("hd0D0","hMCd0D0");
1838     hMCd0D0ptNCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1839     hMCd0D0ptNCfromDstSB->SetXTitle("MC Impact parameter [#mum] ");
1840     hMCd0D0ptNCfromDstSB->SetYTitle("Entries");
1841     flistNoCutsFromDstar->Add(hMCd0D0ptNCfromDstSB);
1842
1843     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
1844     hd0D0VtxTrueptNCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
1845     hd0D0VtxTrueptNCfromDstSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
1846     hd0D0VtxTrueptNCfromDstSB->SetYTitle("Entries");
1847     flistNoCutsFromDstar->Add(hd0D0VtxTrueptNCfromDstSB);
1848   }
1849
1850
1851   //############ NO CUTS OTHER HISTOGRAMS ###########
1852   //
1853   //########### global properties histos ###########
1854
1855   TH2F *hCPtaVSd0d0NCother=new TH2F("hCPtaVSd0d0NCother","hCPtaVSd0d0_NoCuts_other",1000,-100000.,100000.,100,-1.,1.);
1856   TH1F *hSecVtxZNCother=new TH1F("hSecVtxZNCother","hSecVtxZ_NoCuts_other",1000,-8.,8.);
1857   TH1F *hSecVtxXNCother=new TH1F("hSecVtxXNCother","hSecVtxX_NoCuts_other",1000,-3000.,3000.);
1858   TH1F *hSecVtxYNCother=new TH1F("hSecVtxYNCother","hSecVtxY_NoCuts_other",1000,-3000.,3000.);
1859   TH2F *hSecVtxXYNCother=new TH2F("hSecVtxXYNCother","hSecVtxXY_NoCuts_other",1000,-3000.,3000.,1000,-3000.,3000.);
1860   TH1F *hSecVtxPhiNCother=new TH1F("hSecVtxPhiNCother","hSecVtxPhi_NoCuts_other",180,-180.1,180.1);
1861   TH1F *hd0singlTrackNCother=new TH1F("hd0singlTrackNCother","hd0singlTrackNoCuts_Other",1000,-5000.,5000.);
1862   TH1F *hCPtaNCother=new TH1F("hCPtaNCother","hCPta_NoCuts_other",100,-1.,1.);
1863   TH1F *hd0xd0NCother=new TH1F("hd0xd0NCother","hd0xd0_NoCuts_other",1000,-100000.,100000.);
1864   TH1F *hMassTrueNCother=new TH1F("hMassTrueNCother","D^{0} MC inv. Mass No Cuts other(All momenta)",600,1.600,2.200);
1865   TH1F *hMassNCother=new TH1F("hMassNCother","D^{0} inv. Mass No Cuts other (All momenta)",600,1.600,2.200);
1866   hMassNCother->Sumw2();
1867   TH1F *hMassTrueNCotherPM=new TH1F("hMassTrueNCotherPM","D^{0} MC inv. Mass No Cuts Other, Mass Peak. (All momenta)",600,1.600,2.200);
1868   TH1F *hMassNCotherPM=new TH1F("hMassNCotherPM","D^{0} inv. Mass No Cuts Other (All momenta), MassPeak",600,1.600,2.200);
1869   hMassNCotherPM->Sumw2();
1870   TH1F *hMassTrueNCotherSB=new TH1F("hMassTrueNCotherSB","D^{0} MC inv. Mass in Side Bands No Cuts other(All momenta)",600,1.600,2.200);
1871   TH1F *hMassNCotherSB=new TH1F("hMassNCotherSB","D^{0} inv. Mass in Side Bands No Cuts other (All momenta)",600,1.600,2.200);
1872   hMassNCotherSB->Sumw2();
1873
1874   flistNoCutsOther->Add(hCPtaVSd0d0NCother);
1875   flistNoCutsOther->Add(hSecVtxZNCother);
1876   flistNoCutsOther->Add(hSecVtxYNCother);
1877   flistNoCutsOther->Add(hSecVtxXNCother);
1878   flistNoCutsOther->Add(hSecVtxXYNCother);
1879   flistNoCutsOther->Add(hSecVtxPhiNCother);
1880   flistNoCutsOther->Add(hd0singlTrackNCother);
1881   flistNoCutsOther->Add(hCPtaNCother);
1882   flistNoCutsOther->Add(hd0xd0NCother);
1883   flistNoCutsOther->Add(hMassTrueNCother);
1884   flistNoCutsOther->Add(hMassNCother);
1885   flistNoCutsOther->Add(hMassTrueNCotherPM);
1886   flistNoCutsOther->Add(hMassNCotherPM);
1887   flistNoCutsOther->Add(hMassTrueNCotherSB);
1888   flistNoCutsOther->Add(hMassNCotherSB);
1889
1890
1891
1892  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
1893   TH1F *hdcaNCother=new TH1F("hdcaNCother","hdca_NoCuts_Other",100,0.,1000.);
1894   hdcaNCother->SetXTitle("dca   [#mum]");
1895   hdcaNCother->SetYTitle("Entries");
1896   TH1F *hcosthetastarNCother=new TH1F("hcosthetastarNCother","hCosThetaStar_NoCuts_Other",50,-1.,1.);
1897   hcosthetastarNCother->SetXTitle("cos #theta^{*}");
1898   hcosthetastarNCother->SetYTitle("Entries");
1899   TH1F *hptD0NCother=new TH1F("hptD0NCother","D^{0} transverse momentum distribution",34,ptbinsD0arr);
1900   hptD0NCother->SetXTitle("p_{t}  [GeV/c]");
1901   hptD0NCother->SetYTitle("Entries");
1902   TH1F *hptD0VsMaxPtNCother=new TH1F("hptD0VsMaxPtNCother","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
1903   TH2F *hptD0PTallsqrtNCother=new TH2F("hptD0PTallsqrtNCother","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
1904   TH2F *hptD0PTallNCother=new TH2F("hptD0PTallNCother","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
1905   TH2F *hptD0vsptBNCother=new TH2F("hptD0vsptBNCother","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1906   TH2F *hpD0vspBNCother=new TH2F("hpD0vspBNCother","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1907   TH2F *hptD0vsptcquarkNCother=new TH2F("hptD0vsptcquarkNCother","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1908   TH2F *hpD0vspcquarkNCother=new TH2F("hpD0vspcquarkNCother","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
1909   flistNoCutsOther->Add(hdcaNCother);
1910   flistNoCutsOther->Add(hcosthetastarNCother);
1911   flistNoCutsOther->Add(hptD0NCother);
1912   flistNoCutsOther->Add(hptD0VsMaxPtNCother);
1913   flistNoCutsOther->Add(hptD0PTallsqrtNCother);
1914   flistNoCutsOther->Add(hptD0PTallNCother);
1915   flistNoCutsOther->Add(hptD0vsptBNCother);
1916   flistNoCutsOther->Add(hpD0vspBNCother);
1917   flistNoCutsOther->Add(hptD0vsptcquarkNCother);
1918   flistNoCutsOther->Add(hpD0vspcquarkNCother);
1919
1920   TH1F *hd0zD0ptNCother;
1921   TH1F *hInvMassD0NCother,*hInvMassD0barNCother;
1922   TH2F *hInvMassPtNCother=new TH2F("hInvMassPtNCother","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
1923  THnSparseF *hSparseNCother=new THnSparseF("hSparseNCother","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
1924   hSparseNCother->SetBinEdges(0,massbins);
1925   hSparseNCother->SetBinEdges(1,massbins);
1926   hSparseNCother->SetBinEdges(2,ptbinsForNsparse);
1927   hSparseNCother->SetBinEdges(3,impparbins);
1928   hSparseNCother->SetBinEdges(4,massHypoBins); 
1929   flistNoCutsOther->Add(hSparseNCother);
1930   TH1F *hetaNCother;
1931   TH1F *hCosPDPBNCother;
1932   TH1F *hCosPcPDNCother;
1933   flistNoCutsOther->Add(hInvMassPtNCother);
1934   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
1935   TH2F *hd0D0VSd0xd0NCotherpt;
1936   TH2F *hangletracksVSd0xd0NCotherpt;
1937   TH2F *hangletracksVSd0D0NCotherpt;
1938   TH1F *hd0xd0NCotherpt;
1939
1940   TH2F *hTOFpidNCother=new TH2F("hTOFpidNCother","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
1941   flistNoCutsOther->Add(hTOFpidNCother);
1942
1943   for(Int_t i=0;i<fnbins;i++){
1944     namehist="hd0zD0ptNCother_pt";
1945     namehist+=i;
1946     titlehist="d0(z) No Cuts Otherm ptbin=";
1947     titlehist+=i;
1948     hd0zD0ptNCother=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
1949     hd0zD0ptNCother->SetXTitle("d_{0}(z)    [#mum]");
1950     hd0zD0ptNCother->SetYTitle("Entries");
1951     flistNoCutsOther->Add(hd0zD0ptNCother);
1952
1953     namehist="hInvMassD0NCother_pt";
1954     namehist+=i;
1955     titlehist="Invariant Mass No Cuts Other ptbin=";
1956     titlehist+=i;
1957     hInvMassD0NCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1958     hInvMassD0NCother->SetXTitle("Invariant Mass    [GeV]");
1959     hInvMassD0NCother->SetYTitle("Entries");
1960     flistNoCutsOther->Add(hInvMassD0NCother);
1961
1962
1963    namehist="hInvMassD0barNCother_pt";
1964     namehist+=i;
1965     titlehist="Invariant Mass D0bar No Cuts Other ptbin=";
1966     titlehist+=i;
1967     hInvMassD0barNCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
1968     hInvMassD0barNCother->SetXTitle("Invariant Mass    [GeV]");
1969     hInvMassD0barNCother->SetYTitle("Entries");
1970     flistNoCutsOther->Add(hInvMassD0barNCother);
1971
1972
1973     namehist="hetaNCother_pt";
1974     namehist+=i;
1975     titlehist="eta No Cuts Other ptbin=";
1976     titlehist+=i;
1977     hetaNCother=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
1978     hetaNCother->SetXTitle("Pseudorapidity");
1979     hetaNCother->SetYTitle("Entries");
1980     flistNoCutsOther->Add(hetaNCother);
1981
1982     namehist="hCosPDPBNCother_pt";
1983     namehist+=i;
1984     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
1985     titlehist+=i;
1986     hCosPDPBNCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1987     hCosPDPBNCother->SetXTitle("Cosine between D0 momentum and B momentum");
1988     hCosPDPBNCother->SetYTitle("Entries");
1989     flistNoCutsOther->Add(hCosPDPBNCother);
1990
1991     namehist="hCosPcPDNCother_pt";
1992     namehist+=i;
1993     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
1994     titlehist+=i;
1995     hCosPcPDNCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
1996     hCosPcPDNCother->SetXTitle("Cosine between c quark momentum and D0 momentum");
1997     hCosPcPDNCother->SetYTitle("Entries");
1998     flistNoCutsOther->Add(hCosPcPDNCother);
1999     
2000
2001  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2002     namehist="hd0xd0NCother_pt";
2003     namehist+=i;
2004     titlehist="d0xd0 No Cuts Other ptbin=";
2005     titlehist+=i;
2006     hd0xd0NCotherpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
2007     hd0xd0NCotherpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
2008     hd0xd0NCotherpt->SetYTitle("Entries");
2009     flistNoCutsOther->Add(hd0xd0NCotherpt);
2010
2011
2012     namehist="hd0D0VSd0xd0NCother_pt";
2013     namehist+=i;
2014     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Other ptbin=";
2015     titlehist+=i;
2016     hd0D0VSd0xd0NCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
2017     hd0D0VSd0xd0NCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2018     hd0D0VSd0xd0NCotherpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
2019     flistNoCutsOther->Add(hd0D0VSd0xd0NCotherpt);
2020     
2021     
2022     namehist="hangletracksVSd0xd0NCother_pt";
2023     namehist+=i;
2024     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} No Cuts Other ptbin=";
2025     titlehist+=i;
2026     hangletracksVSd0xd0NCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
2027     hangletracksVSd0xd0NCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2028     hangletracksVSd0xd0NCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
2029     flistNoCutsOther->Add(hangletracksVSd0xd0NCotherpt);
2030     
2031
2032     namehist="hangletracksVSd0D0NCother_pt";
2033     namehist+=i;
2034     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} No Cuts Other ptbin=";
2035     titlehist+=i;
2036     hangletracksVSd0D0NCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
2037     hangletracksVSd0D0NCotherpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
2038     hangletracksVSd0D0NCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
2039     flistNoCutsOther->Add(hangletracksVSd0D0NCotherpt);
2040
2041   }
2042   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
2043   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2044
2045
2046
2047
2048   //############# d0 D0 histos ###############à
2049   TH1F *hd0D0NCotherPM = new TH1F("hd0D0NCotherPM","D^{0} impact par. plot , No Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
2050   hd0D0NCotherPM->SetXTitle("Impact parameter [#mum]");
2051   hd0D0NCotherPM->SetYTitle("Entries");
2052
2053   TH1F *hd0D0VtxTrueNCotherPM = new TH1F("hd0D0VtxTrueNCotherPM","D^{0} impact par. w.r.t. True Vtx, No Cuts, Other,Mass Peak (All momenta)",1000,-1000.,1000.);
2054   hd0D0VtxTrueNCotherPM->SetXTitle("Impact parameter [#mum]");
2055   hd0D0VtxTrueNCotherPM->SetYTitle("Entries");
2056
2057   TH1F *hMCd0D0NCotherPM = new TH1F("hMCd0D0NCotherPM","D^{0} impact par. plot, No Cuts, Other,Mass Peak  (All momenta)",1000,-1000.,1000.);
2058   hMCd0D0NCotherPM->SetXTitle("MC Impact parameter [#mum]");
2059   hMCd0D0NCotherPM->SetYTitle("Entries");
2060
2061   TH1F *hd0D0NCotherSB = new TH1F("hd0D0NCotherSB","D^{0} impact par. plot , No Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
2062   hd0D0NCotherSB->SetXTitle("Impact parameter [#mum]");
2063   hd0D0NCotherSB->SetYTitle("Entries");
2064
2065   TH1F *hd0D0VtxTrueNCotherSB = new TH1F("hd0D0VtxTrueNCotherSB","D^{0} impact par. w.r.t. True Vtx, No Cuts, Other,Mass Peak (All momenta)",1000,-1000.,1000.);
2066   hd0D0VtxTrueNCotherSB->SetXTitle("Impact parameter [#mum]");
2067   hd0D0VtxTrueNCotherSB->SetYTitle("Entries");
2068
2069   TH1F *hMCd0D0NCotherSB = new TH1F("hMCd0D0NCotherSB","D^{0} impact par. plot, No Cuts, Other,Mass Peak  (All momenta)",1000,-1000.,1000.);
2070   hMCd0D0NCotherSB->SetXTitle("MC Impact parameter [#mum]");
2071   hMCd0D0NCotherSB->SetYTitle("Entries");
2072
2073   flistNoCutsOther->Add(hd0D0NCotherPM);
2074   flistNoCutsOther->Add(hd0D0VtxTrueNCotherPM);
2075   flistNoCutsOther->Add(hMCd0D0NCotherPM);
2076   flistNoCutsOther->Add(hd0D0NCotherSB);
2077   flistNoCutsOther->Add(hd0D0VtxTrueNCotherSB);
2078   flistNoCutsOther->Add(hMCd0D0NCotherSB);
2079   
2080   TH1F *hd0D0ptNCotherPM;
2081   TH1F *hMCd0D0ptNCotherPM;
2082   TH1F *hd0D0VtxTrueptNCotherPM;
2083   TH1F *hd0D0ptNCotherSB;
2084   TH1F *hMCd0D0ptNCotherSB;
2085   TH1F *hd0D0VtxTrueptNCotherSB;
2086   namehist="hd0D0ptNCother_";
2087   titlehist="D^{0} impact par. plot, No Cuts, Other, ";
2088   for(Int_t i=0;i<fnbins;i++){
2089     strnamept=namehist;
2090     strnamept.Append("PkMss_pt");
2091     strnamept+=i;
2092
2093     strtitlept=titlehist;
2094     strtitlept.Append(" Mass Peak, ");
2095     strtitlept+=fptbins[i];
2096     strtitlept.Append("<= pt <");
2097     strtitlept+=fptbins[i+1];
2098     strtitlept.Append(" [GeV/c]");
2099     
2100     hd0D0ptNCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2101     hd0D0ptNCotherPM->SetXTitle("Impact parameter [#mum] ");
2102     hd0D0ptNCotherPM->SetYTitle("Entries");
2103     flistNoCutsOther->Add(hd0D0ptNCotherPM);
2104
2105     strnamept.ReplaceAll("hd0D0","hMCd0D0");
2106     hMCd0D0ptNCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2107     hMCd0D0ptNCotherPM->SetXTitle("MC Impact parameter [#mum] ");
2108     hMCd0D0ptNCotherPM->SetYTitle("Entries");
2109     flistNoCutsOther->Add(hMCd0D0ptNCotherPM);
2110  
2111
2112     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
2113     hd0D0VtxTrueptNCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2114     hd0D0VtxTrueptNCotherPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
2115     hd0D0VtxTrueptNCotherPM->SetYTitle("Entries");
2116     flistNoCutsOther->Add(hd0D0VtxTrueptNCotherPM);
2117     
2118     strnamept=namehist;
2119     strnamept.Append("SBMss_pt");
2120     strnamept+=i;
2121
2122     strtitlept=titlehist;
2123     strtitlept.Append(" Side Bands, ");
2124     strtitlept+=fptbins[i];
2125     strtitlept.Append("<= pt <");
2126     strtitlept+=fptbins[i+1];
2127     strtitlept.Append(" [GeV/c]");
2128     
2129     hd0D0ptNCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2130     hd0D0ptNCotherSB->SetXTitle("Impact parameter [#mum] ");
2131     hd0D0ptNCotherSB->SetYTitle("Entries");
2132     flistNoCutsOther->Add(hd0D0ptNCotherSB);
2133
2134     strnamept.ReplaceAll("hd0D0","hMCd0D0");
2135     hMCd0D0ptNCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2136     hMCd0D0ptNCotherSB->SetXTitle("MC Impact parameter [#mum] ");
2137     hMCd0D0ptNCotherSB->SetYTitle("Entries");
2138     flistNoCutsOther->Add(hMCd0D0ptNCotherSB);
2139
2140     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
2141     hd0D0VtxTrueptNCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2142     hd0D0VtxTrueptNCotherSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
2143     hd0D0VtxTrueptNCotherSB->SetYTitle("Entries");
2144     flistNoCutsOther->Add(hd0D0VtxTrueptNCotherSB);
2145   }
2146
2147
2148   //################################################################################################
2149   //                                                                                               #
2150   //                         HISTOS FOR LOOSE CUTS                                                 #
2151   //                                                                                               #
2152   //################################################################################################
2153
2154   //############ LOOSE CUTS SIGNAL HISTOGRAMS ###############
2155   //
2156   // ####### global properties histo ############
2157
2158   TH2F *hCPtaVSd0d0LSCsign=new TH2F("hCPtaVSd0d0LSCsign","hCPtaVSd0d0_LooseCuts_Signal",1000,-100000.,100000.,100,-1.,1.);
2159   TH1F *hSecVtxZLSCsign=new TH1F("hSecVtxZLSCsign","hSecVtxZ_LooseCuts_Signal",1000,-8.,8.);
2160   TH1F *hSecVtxXLSCsign=new TH1F("hSecVtxXLSCsign","hSecVtxX_LooseCuts_Signal",1000,-3000.,3000.);
2161   TH1F *hSecVtxYLSCsign=new TH1F("hSecVtxYLSCsign","hSecVtxY_LooseCuts_Signal",1000,-3000.,3000.);
2162   TH2F *hSecVtxXYLSCsign=new TH2F("hSecVtxXYLSCsign","hSecVtxXY_LooseCuts_Signal",1000,-3000.,3000.,1000,-3000.,3000.);
2163   TH1F *hSecVtxPhiLSCsign=new TH1F("hSecVtxPhiLSCsign","hSecVtxPhi_LooseCuts_Signal",180,-180.1,180.1);
2164   TH1F *hd0singlTrackLSCsign=new TH1F("hd0singlTrackLSCsign","hd0singlTrackLooseCuts_Signal",1000,-5000.,5000.);
2165   TH1F *hCPtaLSCsign=new TH1F("hCPtaLSCsign","hCPta_LooseCuts_Signal",100,-1.,1.);
2166   TH1F *hd0xd0LSCsign=new TH1F("hd0xd0LSCsign","hd0xd0_LooseCuts_Signal",1000,-100000.,100000.);
2167   TH1F *hMassTrueLSCsign=new TH1F("hMassTrueLSCsign","D^{0} MC inv. Mass Loose Cuts Signal(All momenta)",600,1.600,2.200);
2168   TH1F *hMassLSCsign=new TH1F("hMassLSCsign","D^{0} inv. Mass Loose Cuts Signal (All momenta)",600,1.600,2.200);
2169   hMassLSCsign->Sumw2();
2170   TH1F *hMassTrueLSCsignPM=new TH1F("hMassTrueLSCsignPM","D^{0} MC inv. Mass Loose Cuts Signal, Mass Peak. (All momenta)",600,1.600,2.200);
2171   TH1F *hMassLSCsignPM=new TH1F("hMassLSCsignPM","D^{0} inv. Mass Loose Cuts Signal (All momenta), MassPeak",600,1.600,2.200);
2172   hMassLSCsignPM->Sumw2();
2173   TH1F *hMassTrueLSCsignSB=new TH1F("hMassTrueLSCsignSB","D^{0} MC inv. Mass in Side Bands Loose Cuts Signal(All momenta)",600,1.600,2.200);
2174   TH1F *hMassLSCsignSB=new TH1F("hMassLSCsignSB","D^{0} inv. Mass in Side Bands Loose Cuts Signal (All momenta)",600,1.600,2.200);
2175   hMassLSCsignSB->Sumw2();
2176
2177   flistLsCutsSignal->Add(hCPtaVSd0d0LSCsign);
2178   flistLsCutsSignal->Add(hSecVtxZLSCsign);
2179   flistLsCutsSignal->Add(hSecVtxYLSCsign);
2180   flistLsCutsSignal->Add(hSecVtxXLSCsign);
2181   flistLsCutsSignal->Add(hSecVtxXYLSCsign);
2182   flistLsCutsSignal->Add(hSecVtxPhiLSCsign);
2183   flistLsCutsSignal->Add(hd0singlTrackLSCsign);
2184   flistLsCutsSignal->Add(hCPtaLSCsign);
2185   flistLsCutsSignal->Add(hd0xd0LSCsign);
2186   flistLsCutsSignal->Add(hMassTrueLSCsign);
2187   flistLsCutsSignal->Add(hMassLSCsign);
2188   flistLsCutsSignal->Add(hMassTrueLSCsignPM);
2189   flistLsCutsSignal->Add(hMassLSCsignPM);
2190   flistLsCutsSignal->Add(hMassTrueLSCsignSB);
2191   flistLsCutsSignal->Add(hMassLSCsignSB);
2192
2193
2194   //%%% NEW HISTOS %%%%%%%%%%%%%%%%
2195   TH1F *hdcaLSCsign=new TH1F("hdcaLSCsign","hdca_LooseCuts_Sign",100,0.,1000.);
2196   hdcaLSCsign->SetXTitle("dca   [#mum]");
2197   hdcaLSCsign->SetYTitle("Entries");
2198   TH1F *hcosthetastarLSCsign=new TH1F("hcosthetastarLSCsign","hCosThetaStar_LooseCuts_Sign",50,-1.,1.);
2199   hcosthetastarLSCsign->SetXTitle("cos #theta^{*}");
2200   hcosthetastarLSCsign->SetYTitle("Entries");
2201   TH1F *hptD0LSCsign=new TH1F("hptD0LSCsign","D^{0} transverse momentum distribution",34,ptbinsD0arr);
2202   hptD0LSCsign->SetXTitle("p_{t}  [GeV/c]");
2203   hptD0LSCsign->SetYTitle("Entries");
2204   TH1F *hptD0VsMaxPtLSCsign=new TH1F("hptD0VsMaxPtLSCsign","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
2205   TH2F *hptD0PTallsqrtLSCsign=new TH2F("hptD0PTallsqrtLSCsign","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
2206   TH2F *hptD0PTallLSCsign=new TH2F("hptD0PTallLSCsign","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
2207   TH2F *hptD0vsptBLSCsign=new TH2F("hptD0vsptBLSCsign","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2208   TH2F *hpD0vspBLSCsign=new TH2F("hpD0vspBLSCsign","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2209   TH2F *hptD0vsptcquarkLSCsign=new TH2F("hptD0vsptcquarkLSCsign","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2210   TH2F *hpD0vspcquarkLSCsign=new TH2F("hpD0vspcquarkLSCsign","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2211   flistLsCutsSignal->Add(hdcaLSCsign);
2212   flistLsCutsSignal->Add(hcosthetastarLSCsign);
2213   flistLsCutsSignal->Add(hptD0LSCsign);
2214   flistLsCutsSignal->Add(hptD0VsMaxPtLSCsign);
2215   flistLsCutsSignal->Add(hptD0PTallsqrtLSCsign);
2216   flistLsCutsSignal->Add(hptD0PTallLSCsign);
2217   flistLsCutsSignal->Add(hptD0vsptBLSCsign);
2218   flistLsCutsSignal->Add(hpD0vspBLSCsign);
2219   flistLsCutsSignal->Add(hptD0vsptcquarkLSCsign);
2220   flistLsCutsSignal->Add(hpD0vspcquarkLSCsign);
2221  
2222   TH1F *hd0zD0ptLSCsign;
2223   TH1F *hInvMassD0LSCsign,*hInvMassD0barLSCsign;
2224   TH2F *hInvMassPtLSCsign=new TH2F("hInvMassPtLSCsign","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
2225  THnSparseF *hSparseLSCsign=new THnSparseF("hSparseLSCsign","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
2226   hSparseLSCsign->SetBinEdges(0,massbins);
2227   hSparseLSCsign->SetBinEdges(1,massbins);
2228   hSparseLSCsign->SetBinEdges(2,ptbinsForNsparse);
2229   hSparseLSCsign->SetBinEdges(3,impparbins);
2230   hSparseLSCsign->SetBinEdges(4,massHypoBins); 
2231   flistLsCutsSignal->Add(hSparseLSCsign);
2232   TH1F *hetaLSCsign;
2233   TH1F *hCosPDPBLSCsign;
2234   TH1F *hCosPcPDLSCsign;
2235   flistLsCutsSignal->Add(hInvMassPtLSCsign);
2236
2237   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2238   TH2F *hd0D0VSd0xd0LSCsignpt;
2239   TH2F *hangletracksVSd0xd0LSCsignpt;
2240   TH2F *hangletracksVSd0D0LSCsignpt;
2241   TH1F *hd0xd0LSCsignpt;
2242
2243   TH2F *hTOFpidLSCsign=new TH2F("hTOFpidLSCsign","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
2244   flistLsCutsSignal->Add(hTOFpidLSCsign);
2245
2246   for(Int_t i=0;i<fnbins;i++){
2247     namehist="hd0zD0ptLSCsign_pt";
2248     namehist+=i;
2249     titlehist="d0(z) Loose Cuts Signm ptbin=";
2250     titlehist+=i;
2251     hd0zD0ptLSCsign=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
2252     hd0zD0ptLSCsign->SetXTitle("d_{0}(z)    [#mum]");
2253     hd0zD0ptLSCsign->SetYTitle("Entries");
2254     flistLsCutsSignal->Add(hd0zD0ptLSCsign);
2255
2256     namehist="hInvMassD0LSCsign_pt";
2257     namehist+=i;
2258     titlehist="Invariant Mass Loose Cuts Sign ptbin=";
2259     titlehist+=i;
2260     hInvMassD0LSCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
2261     hInvMassD0LSCsign->SetXTitle("Invariant Mass    [GeV]");
2262     hInvMassD0LSCsign->SetYTitle("Entries");
2263     flistLsCutsSignal->Add(hInvMassD0LSCsign);
2264
2265
2266     namehist="hInvMassD0barLSCsign_pt";
2267     namehist+=i;
2268     titlehist="Invariant Mass D0bar Loose Cuts Signal ptbin=";
2269     titlehist+=i;
2270     hInvMassD0barLSCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
2271     hInvMassD0barLSCsign->SetXTitle("Invariant Mass    [GeV]");
2272     hInvMassD0barLSCsign->SetYTitle("Entries");
2273     flistLsCutsSignal->Add(hInvMassD0barLSCsign);
2274
2275     namehist="hetaLSCsign_pt";
2276     namehist+=i;
2277     titlehist="eta Loose Cuts Sign ptbin=";
2278     titlehist+=i;
2279     hetaLSCsign=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
2280     hetaLSCsign->SetXTitle("Pseudorapidity");
2281     hetaLSCsign->SetYTitle("Entries");
2282     flistLsCutsSignal->Add(hetaLSCsign);
2283
2284     namehist="hCosPDPBLSCsign_pt";
2285     namehist+=i;
2286     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
2287     titlehist+=i;
2288     hCosPDPBLSCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
2289     hCosPDPBLSCsign->SetXTitle("Cosine between D0 momentum and B momentum");
2290     hCosPDPBLSCsign->SetYTitle("Entries");
2291     flistLsCutsSignal->Add(hCosPDPBLSCsign);
2292
2293     namehist="hCosPcPDLSCsign_pt";
2294     namehist+=i;
2295     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
2296     titlehist+=i;
2297     hCosPcPDLSCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
2298     hCosPcPDLSCsign->SetXTitle("Cosine between c quark momentum and D0 momentum");
2299     hCosPcPDLSCsign->SetYTitle("Entries");
2300     flistLsCutsSignal->Add(hCosPcPDLSCsign);
2301
2302
2303  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2304     namehist="hd0xd0LSCsign_pt";
2305     namehist+=i;
2306     titlehist="d0xd0 Loose Cuts Sign ptbin=";
2307     titlehist+=i;
2308     hd0xd0LSCsignpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
2309     hd0xd0LSCsignpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
2310     hd0xd0LSCsignpt->SetYTitle("Entries");
2311     flistLsCutsSignal->Add(hd0xd0LSCsignpt);
2312
2313
2314     namehist="hd0D0VSd0xd0LSCsign_pt";
2315     namehist+=i;
2316     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Sign ptbin=";
2317     titlehist+=i;
2318     hd0D0VSd0xd0LSCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
2319     hd0D0VSd0xd0LSCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2320     hd0D0VSd0xd0LSCsignpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
2321     flistLsCutsSignal->Add(hd0D0VSd0xd0LSCsignpt);
2322     
2323     
2324     namehist="hangletracksVSd0xd0LSCsign_pt";
2325     namehist+=i;
2326     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Sign ptbin=";
2327     titlehist+=i;
2328     hangletracksVSd0xd0LSCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
2329     hangletracksVSd0xd0LSCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2330     hangletracksVSd0xd0LSCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
2331     flistLsCutsSignal->Add(hangletracksVSd0xd0LSCsignpt);
2332     
2333
2334     namehist="hangletracksVSd0D0LSCsign_pt";
2335     namehist+=i;
2336     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts Sign ptbin=";
2337     titlehist+=i;
2338     hangletracksVSd0D0LSCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
2339     hangletracksVSd0D0LSCsignpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
2340     hangletracksVSd0D0LSCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
2341     flistLsCutsSignal->Add(hangletracksVSd0D0LSCsignpt);
2342
2343     
2344   }
2345   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
2346   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2347
2348
2349   // ####### d0 D0 histos ############
2350   TH1F *hd0D0LSCsignPM = new TH1F("hd0D0LSCsignPM","D^{0} impact par. plot , Loose Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
2351   hd0D0LSCsignPM->SetXTitle("Impact parameter [#mum]");
2352   hd0D0LSCsignPM->SetYTitle("Entries");
2353
2354   TH1F *hd0D0VtxTrueLSCsignPM = new TH1F("hd0D0VtxTrueLSCsignPM","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
2355   hd0D0VtxTrueLSCsignPM->SetXTitle("Impact parameter [#mum]");
2356   hd0D0VtxTrueLSCsignPM->SetYTitle("Entries");
2357
2358   TH1F *hMCd0D0LSCsignPM = new TH1F("hMCd0D0LSCsignPM","D^{0} impact par. plot, Loose Cuts, Signal,Mass Peak  (All momenta)",1000,-1000.,1000.);
2359   hMCd0D0LSCsignPM->SetXTitle("MC Impact parameter [#mum]");
2360   hMCd0D0LSCsignPM->SetYTitle("Entries");
2361
2362   TH1F *hd0D0LSCsignSB = new TH1F("hd0D0LSCsignSB","D^{0} impact par. plot , Loose Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
2363   hd0D0LSCsignSB->SetXTitle("Impact parameter [#mum]");
2364   hd0D0LSCsignSB->SetYTitle("Entries");
2365
2366   TH1F *hd0D0VtxTrueLSCsignSB = new TH1F("hd0D0VtxTrueLSCsignSB","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
2367   hd0D0VtxTrueLSCsignSB->SetXTitle("Impact parameter [#mum]");
2368   hd0D0VtxTrueLSCsignSB->SetYTitle("Entries");
2369
2370   TH1F *hMCd0D0LSCsignSB = new TH1F("hMCd0D0LSCsignSB","D^{0} impact par. plot, Loose Cuts, Signal,Mass Peak  (All momenta)",1000,-1000.,1000.);
2371   hMCd0D0LSCsignSB->SetXTitle("MC Impact parameter [#mum]");
2372   hMCd0D0LSCsignSB->SetYTitle("Entries");
2373
2374   flistLsCutsSignal->Add(hd0D0LSCsignPM);
2375   flistLsCutsSignal->Add(hd0D0VtxTrueLSCsignPM);
2376   flistLsCutsSignal->Add(hMCd0D0LSCsignPM);
2377   flistLsCutsSignal->Add(hd0D0LSCsignSB);
2378   flistLsCutsSignal->Add(hd0D0VtxTrueLSCsignSB);
2379   flistLsCutsSignal->Add(hMCd0D0LSCsignSB);
2380   
2381   TH1F *hd0D0ptLSCsignPM;
2382   TH1F *hMCd0D0ptLSCsignPM;
2383   TH1F *hd0D0VtxTrueptLSCsignPM;
2384   TH1F *hd0D0ptLSCsignSB;
2385   TH1F *hMCd0D0ptLSCsignSB;
2386   TH1F *hd0D0VtxTrueptLSCsignSB;
2387   namehist="hd0D0ptLSCsign_";
2388   titlehist="D^{0} impact par. plot, Loose Cuts, Signal, ";
2389   for(Int_t i=0;i<fnbins;i++){
2390     strnamept=namehist;
2391     strnamept.Append("PkMss_pt");
2392     strnamept+=i;
2393
2394     strtitlept=titlehist;
2395     strtitlept.Append(" Mass Peak, ");
2396     strtitlept+=fptbins[i];
2397     strtitlept.Append("<= pt <");
2398     strtitlept+=fptbins[i+1];
2399     strtitlept.Append(" [GeV/c]");
2400     
2401     hd0D0ptLSCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2402     hd0D0ptLSCsignPM->SetXTitle("Impact parameter [#mum] ");
2403     hd0D0ptLSCsignPM->SetYTitle("Entries");
2404     flistLsCutsSignal->Add(hd0D0ptLSCsignPM);
2405
2406     strnamept.ReplaceAll("hd0D0","hMCd0D0");
2407     hMCd0D0ptLSCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2408     hMCd0D0ptLSCsignPM->SetXTitle("MC Impact parameter [#mum] ");
2409     hMCd0D0ptLSCsignPM->SetYTitle("Entries");
2410     flistLsCutsSignal->Add(hMCd0D0ptLSCsignPM);
2411  
2412
2413     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
2414     hd0D0VtxTrueptLSCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2415     hd0D0VtxTrueptLSCsignPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
2416     hd0D0VtxTrueptLSCsignPM->SetYTitle("Entries");
2417     flistLsCutsSignal->Add(hd0D0VtxTrueptLSCsignPM);
2418     
2419     strnamept=namehist;
2420     strnamept.Append("SBMss_pt");
2421     strnamept+=i;
2422
2423     strtitlept=titlehist;
2424     strtitlept.Append(" Side Bands, ");
2425     strtitlept+=fptbins[i];
2426     strtitlept.Append("<= pt <");
2427     strtitlept+=fptbins[i+1];
2428     strtitlept.Append(" [GeV/c]");
2429     
2430     hd0D0ptLSCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2431     hd0D0ptLSCsignSB->SetXTitle("Impact parameter [#mum] ");
2432     hd0D0ptLSCsignSB->SetYTitle("Entries");
2433     flistLsCutsSignal->Add(hd0D0ptLSCsignSB);
2434
2435     strnamept.ReplaceAll("hd0D0","hMCd0D0");
2436     hMCd0D0ptLSCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2437     hMCd0D0ptLSCsignSB->SetXTitle("MC Impact parameter [#mum] ");
2438     hMCd0D0ptLSCsignSB->SetYTitle("Entries");
2439     flistLsCutsSignal->Add(hMCd0D0ptLSCsignSB);
2440
2441     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
2442     hd0D0VtxTrueptLSCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2443     hd0D0VtxTrueptLSCsignSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
2444     hd0D0VtxTrueptLSCsignSB->SetYTitle("Entries");
2445     flistLsCutsSignal->Add(hd0D0VtxTrueptLSCsignSB);
2446   }
2447
2448
2449   //############ LOOSE CUTS BACKGROUND HISTOGRAMS ###########
2450   //
2451   //   ######## global properties histos #######
2452   TH2F *hCPtaVSd0d0LSCback=new TH2F("hCPtaVSd0d0LSCback","hCPtaVSd0d0_LooseCuts_Background",1000,-100000.,100000.,100,-1.,1.);
2453   TH1F *hSecVtxZLSCback=new TH1F("hSecVtxZLSCback","hSecVtxZ_LooseCuts_Background",1000,-8.,8.);
2454   TH1F *hSecVtxXLSCback=new TH1F("hSecVtxXLSCback","hSecVtxX_LooseCuts_Background",1000,-3000.,3000.);
2455   TH1F *hSecVtxYLSCback=new TH1F("hSecVtxYLSCback","hSecVtxY_LooseCuts_Background",1000,-3000.,3000.);
2456   TH2F *hSecVtxXYLSCback=new TH2F("hSecVtxXYLSCback","hSecVtxXY_LooseCuts_Background",1000,-3000.,3000.,1000,-3000.,3000.);
2457   TH1F *hSecVtxPhiLSCback=new TH1F("hSecVtxPhiLSCback","hSecVtxPhi_LooseCuts_Background",180,-180.1,180.1);
2458   TH1F *hd0singlTrackLSCback=new TH1F("hd0singlTrackLSCback","hd0singlTrackLooseCuts_Back",1000,-5000.,5000.);
2459   TH1F *hCPtaLSCback=new TH1F("hCPtaLSCback","hCPta_LooseCuts_Background",100,-1.,1.);
2460   TH1F *hd0xd0LSCback=new TH1F("hd0xd0LSCback","hd0xd0_LooseCuts_Background",1000,-100000.,100000.);
2461   TH1F *hMassTrueLSCback=new TH1F("hMassTrueLSCback","D^{0} MC inv. Mass Loose Cuts Background(All momenta)",600,1.600,2.200);
2462   TH1F *hMassLSCback=new TH1F("hMassLSCback","D^{0} inv. Mass Loose Cuts Background (All momenta)",600,1.600,2.200);
2463   hMassLSCback->Sumw2();
2464   TH1F *hMassTrueLSCbackPM=new TH1F("hMassTrueLSCbackPM","D^{0} MC inv. Mass Loose Cuts Background, Mass Peak. (All momenta)",600,1.600,2.200);
2465   TH1F *hMassLSCbackPM=new TH1F("hMassLSCbackPM","D^{0} inv. Mass Loose Cuts Background (All momenta), MassPeak",600,1.600,2.200);
2466   hMassLSCbackPM->Sumw2();
2467   TH1F *hMassTrueLSCbackSB=new TH1F("hMassTrueLSCbackSB","D^{0} MC inv. Mass in Side Bands Loose Cuts Background(All momenta)",600,1.600,2.200);
2468   TH1F *hMassLSCbackSB=new TH1F("hMassLSCbackSB","D^{0} inv. Mass in Side Bands Loose Cuts Background (All momenta)",600,1.600,2.200);
2469   hMassLSCbackSB->Sumw2();
2470
2471   flistLsCutsBack->Add(hCPtaVSd0d0LSCback);
2472   flistLsCutsBack->Add(hSecVtxZLSCback);
2473   flistLsCutsBack->Add(hSecVtxYLSCback);
2474   flistLsCutsBack->Add(hSecVtxXLSCback);
2475   flistLsCutsBack->Add(hSecVtxXYLSCback);
2476   flistLsCutsBack->Add(hSecVtxPhiLSCback);
2477   flistLsCutsBack->Add(hd0singlTrackLSCback);
2478   flistLsCutsBack->Add(hCPtaLSCback);
2479   flistLsCutsBack->Add(hd0xd0LSCback);
2480   flistLsCutsBack->Add(hMassTrueLSCback);
2481   flistLsCutsBack->Add(hMassLSCback);
2482   flistLsCutsBack->Add(hMassTrueLSCbackPM);
2483   flistLsCutsBack->Add(hMassLSCbackPM);
2484   flistLsCutsBack->Add(hMassTrueLSCbackSB);
2485   flistLsCutsBack->Add(hMassLSCbackSB);
2486
2487
2488
2489
2490
2491
2492
2493
2494  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
2495   TH1F *hdcaLSCback=new TH1F("hdcaLSCback","hdca_LooseCuts_Backgr",100,0.,1000.);
2496   hdcaLSCback->SetXTitle("dca   [#mum]");
2497   hdcaLSCback->SetYTitle("Entries");
2498   TH1F *hcosthetastarLSCback=new TH1F("hcosthetastarLSCback","hCosThetaStar_LooseCuts_Backgr",50,-1.,1.);
2499   hcosthetastarLSCback->SetXTitle("cos #theta^{*}");
2500   hcosthetastarLSCback->SetYTitle("Entries");
2501   TH1F *hptD0LSCback=new TH1F("hptD0LSCback","D^{0} transverse momentum distribution",34,ptbinsD0arr);
2502   hptD0LSCback->SetXTitle("p_{t}  [GeV/c]");
2503   hptD0LSCback->SetYTitle("Entries");
2504   TH1F *hptD0VsMaxPtLSCback=new TH1F("hptD0VsMaxPtLSCback","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
2505   TH2F *hptD0PTallsqrtLSCback=new TH2F("hptD0PTallsqrtLSCback","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
2506   TH2F *hptD0PTallLSCback=new TH2F("hptD0PTallLSCback","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
2507   TH2F *hptD0vsptBLSCback=new TH2F("hptD0vsptBLSCback","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2508   TH2F *hpD0vspBLSCback=new TH2F("hpD0vspBLSCback","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2509   TH2F *hptD0vsptcquarkLSCback=new TH2F("hptD0vsptcquarkLSCback","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2510   TH2F *hpD0vspcquarkLSCback=new TH2F("hpD0vspcquarkLSCback","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2511   flistLsCutsBack->Add(hdcaLSCback);
2512   flistLsCutsBack->Add(hcosthetastarLSCback);
2513   flistLsCutsBack->Add(hptD0LSCback);
2514   flistLsCutsBack->Add(hptD0VsMaxPtLSCback);
2515   flistLsCutsBack->Add(hptD0PTallsqrtLSCback);
2516   flistLsCutsBack->Add(hptD0PTallLSCback);
2517   flistLsCutsBack->Add(hptD0vsptBLSCback);
2518   flistLsCutsBack->Add(hpD0vspBLSCback);
2519   flistLsCutsBack->Add(hptD0vsptcquarkLSCback);
2520   flistLsCutsBack->Add(hpD0vspcquarkLSCback);
2521  
2522   TH1F *hd0zD0ptLSCback;
2523   TH1F *hInvMassD0LSCback,*hInvMassD0barLSCback;
2524   TH2F *hInvMassPtLSCback=new TH2F("hInvMassPtLSCback","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
2525  THnSparseF *hSparseLSCback=new THnSparseF("hSparseLSCback","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
2526   hSparseLSCback->SetBinEdges(0,massbins);
2527   hSparseLSCback->SetBinEdges(1,massbins);
2528   hSparseLSCback->SetBinEdges(2,ptbinsForNsparse);
2529   hSparseLSCback->SetBinEdges(3,impparbins);
2530   hSparseLSCback->SetBinEdges(4,massHypoBins); 
2531   flistLsCutsBack->Add(hSparseLSCback);
2532   TH1F *hetaLSCback;
2533   TH1F *hCosPDPBLSCback;
2534   TH1F *hCosPcPDLSCback;
2535   flistLsCutsBack->Add(hInvMassPtLSCback);
2536  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2537   TH2F *hd0D0VSd0xd0LSCbackpt;
2538   TH2F *hangletracksVSd0xd0LSCbackpt;
2539   TH2F *hangletracksVSd0D0LSCbackpt;
2540   TH1F *hd0xd0LSCbackpt;
2541
2542   TH2F *hTOFpidLSCback=new TH2F("hTOFpidLSCback","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
2543   flistLsCutsBack->Add(hTOFpidLSCback);
2544
2545   for(Int_t i=0;i<fnbins;i++){
2546     namehist="hd0zD0ptLSCback_pt";
2547     namehist+=i;
2548     titlehist="d0(z) Loose Cuts Backgr ptbin=";
2549     titlehist+=i;
2550     hd0zD0ptLSCback=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
2551     hd0zD0ptLSCback->SetXTitle("d_{0}(z)    [#mum]");
2552     hd0zD0ptLSCback->SetYTitle("Entries");
2553     flistLsCutsBack->Add(hd0zD0ptLSCback);
2554
2555     namehist="hInvMassD0LSCback_pt";
2556     namehist+=i;
2557     titlehist="Invariant Mass Loose Cuts Backgr ptbin=";
2558     titlehist+=i;
2559     hInvMassD0LSCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
2560     hInvMassD0LSCback->SetXTitle("Invariant Mass    [GeV]");
2561     hInvMassD0LSCback->SetYTitle("Entries");
2562     flistLsCutsBack->Add(hInvMassD0LSCback);
2563     
2564     namehist="hInvMassD0barLSCback_pt";
2565     namehist+=i;
2566     titlehist="Invariant Mass D0bar Loose Cuts Back ptbin=";
2567     titlehist+=i;
2568     hInvMassD0barLSCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
2569     hInvMassD0barLSCback->SetXTitle("Invariant Mass    [GeV]");
2570     hInvMassD0barLSCback->SetYTitle("Entries");
2571     flistLsCutsBack->Add(hInvMassD0barLSCback);
2572
2573
2574     namehist="hetaLSCback_pt";
2575     namehist+=i;
2576     titlehist="eta Loose Cuts Backgr ptbin=";
2577     titlehist+=i;
2578     hetaLSCback=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
2579     hetaLSCback->SetXTitle("Pseudorapidity");
2580     hetaLSCback->SetYTitle("Entries");
2581     flistLsCutsBack->Add(hetaLSCback);
2582
2583     namehist="hCosPDPBLSCback_pt";
2584     namehist+=i;
2585     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
2586     titlehist+=i;
2587     hCosPDPBLSCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
2588     hCosPDPBLSCback->SetXTitle("Cosine between D0 momentum and B momentum");
2589     hCosPDPBLSCback->SetYTitle("Entries");
2590     flistLsCutsBack->Add(hCosPDPBLSCback);
2591
2592     namehist="hCosPcPDLSCback_pt";
2593     namehist+=i;
2594     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
2595     titlehist+=i;
2596     hCosPcPDLSCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
2597     hCosPcPDLSCback->SetXTitle("Cosine between c quark momentum and D0 momentum");
2598     hCosPcPDLSCback->SetYTitle("Entries");
2599     flistLsCutsBack->Add(hCosPcPDLSCback);
2600
2601  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2602     namehist="hd0xd0LSCback_pt";
2603     namehist+=i;
2604     titlehist="d0xd0 Loose Cuts Back ptbin=";
2605     titlehist+=i;
2606     hd0xd0LSCbackpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
2607     hd0xd0LSCbackpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
2608     hd0xd0LSCbackpt->SetYTitle("Entries");
2609     flistLsCutsBack->Add(hd0xd0LSCbackpt);
2610
2611
2612     namehist="hd0D0VSd0xd0LSCback_pt";
2613     namehist+=i;
2614     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Back ptbin=";
2615     titlehist+=i;
2616     hd0D0VSd0xd0LSCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
2617     hd0D0VSd0xd0LSCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2618     hd0D0VSd0xd0LSCbackpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
2619     flistLsCutsBack->Add(hd0D0VSd0xd0LSCbackpt);
2620     
2621     
2622     namehist="hangletracksVSd0xd0LSCback_pt";
2623     namehist+=i;
2624     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Back ptbin=";
2625     titlehist+=i;
2626     hangletracksVSd0xd0LSCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
2627     hangletracksVSd0xd0LSCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2628     hangletracksVSd0xd0LSCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
2629     flistLsCutsBack->Add(hangletracksVSd0xd0LSCbackpt);
2630     
2631
2632     namehist="hangletracksVSd0D0LSCback_pt";
2633     namehist+=i;
2634     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts Back ptbin=";
2635     titlehist+=i;
2636     hangletracksVSd0D0LSCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
2637     hangletracksVSd0D0LSCbackpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
2638     hangletracksVSd0D0LSCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
2639     flistLsCutsBack->Add(hangletracksVSd0D0LSCbackpt);
2640     
2641   }
2642   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
2643   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2644
2645
2646
2647
2648
2649
2650
2651   // ####### d0 D0 histos ############
2652   
2653  TH1F *hd0D0LSCbackPM = new TH1F("hd0D0LSCbackPM","D^{0} impact par. plot , Loose Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
2654   hd0D0LSCbackPM->SetXTitle("Impact parameter [#mum]");
2655   hd0D0LSCbackPM->SetYTitle("Entries");
2656
2657   TH1F *hd0D0VtxTrueLSCbackPM = new TH1F("hd0D0VtxTrueLSCbackPM","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, Background,Mass Peak (All momenta)",1000,-1000.,1000.);
2658   hd0D0VtxTrueLSCbackPM->SetXTitle("Impact parameter [#mum]");
2659   hd0D0VtxTrueLSCbackPM->SetYTitle("Entries");
2660
2661   TH1F *hMCd0D0LSCbackPM = new TH1F("hMCd0D0LSCbackPM","D^{0} impact par. plot, Loose Cuts, Background,Mass Peak  (All momenta)",1000,-1000.,1000.);
2662   hMCd0D0LSCbackPM->SetXTitle("MC Impact parameter [#mum]");
2663   hMCd0D0LSCbackPM->SetYTitle("Entries");
2664
2665   TH1F *hd0D0LSCbackSB = new TH1F("hd0D0LSCbackSB","D^{0} impact par. plot , Loose Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
2666   hd0D0LSCbackSB->SetXTitle("Impact parameter [#mum]");
2667   hd0D0LSCbackSB->SetYTitle("Entries");
2668
2669   TH1F *hd0D0VtxTrueLSCbackSB = new TH1F("hd0D0VtxTrueLSCbackSB","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, Background,Mass Peak (All momenta)",1000,-1000.,1000.);
2670   hd0D0VtxTrueLSCbackSB->SetXTitle("Impact parameter [#mum]");
2671   hd0D0VtxTrueLSCbackSB->SetYTitle("Entries");
2672
2673   TH1F *hMCd0D0LSCbackSB = new TH1F("hMCd0D0LSCbackSB","D^{0} impact par. plot, Loose Cuts, Background,Mass Peak  (All momenta)",1000,-1000.,1000.);
2674   hMCd0D0LSCbackSB->SetXTitle("MC Impact parameter [#mum]");
2675   hMCd0D0LSCbackSB->SetYTitle("Entries");
2676
2677   flistLsCutsBack->Add(hd0D0LSCbackPM);
2678   flistLsCutsBack->Add(hd0D0VtxTrueLSCbackPM);
2679   flistLsCutsBack->Add(hMCd0D0LSCbackPM);
2680   flistLsCutsBack->Add(hd0D0LSCbackSB);
2681   flistLsCutsBack->Add(hd0D0VtxTrueLSCbackSB);
2682   flistLsCutsBack->Add(hMCd0D0LSCbackSB);
2683   
2684   TH1F *hd0D0ptLSCbackPM;
2685   TH1F *hMCd0D0ptLSCbackPM;
2686   TH1F *hd0D0VtxTrueptLSCbackPM;
2687   TH1F *hd0D0ptLSCbackSB;
2688   TH1F *hMCd0D0ptLSCbackSB;
2689   TH1F *hd0D0VtxTrueptLSCbackSB;
2690   namehist="hd0D0ptLSCback_";
2691   titlehist="D^{0} impact par. plot, Loose Cuts, Background, ";
2692   for(Int_t i=0;i<fnbins;i++){
2693     strnamept=namehist;
2694     strnamept.Append("PkMss_pt");
2695     strnamept+=i;
2696
2697     strtitlept=titlehist;
2698     strtitlept.Append(" Mass Peak, ");
2699     strtitlept+=fptbins[i];
2700     strtitlept.Append("<= pt <");
2701     strtitlept+=fptbins[i+1];
2702     strtitlept.Append(" [GeV/c]");
2703     
2704     hd0D0ptLSCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2705     hd0D0ptLSCbackPM->SetXTitle("Impact parameter [#mum] ");
2706     hd0D0ptLSCbackPM->SetYTitle("Entries");
2707     flistLsCutsBack->Add(hd0D0ptLSCbackPM);
2708
2709     strnamept.ReplaceAll("hd0D0","hMCd0D0");
2710     hMCd0D0ptLSCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2711     hMCd0D0ptLSCbackPM->SetXTitle("MC Impact parameter [#mum] ");
2712     hMCd0D0ptLSCbackPM->SetYTitle("Entries");
2713     flistLsCutsBack->Add(hMCd0D0ptLSCbackPM);
2714  
2715
2716     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
2717     hd0D0VtxTrueptLSCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2718     hd0D0VtxTrueptLSCbackPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
2719     hd0D0VtxTrueptLSCbackPM->SetYTitle("Entries");
2720     flistLsCutsBack->Add(hd0D0VtxTrueptLSCbackPM);
2721     
2722     strnamept=namehist;
2723     strnamept.Append("SBMss_pt");
2724     strnamept+=i;
2725
2726     strtitlept=titlehist;
2727     strtitlept.Append(" Side Bands, ");
2728     strtitlept+=fptbins[i];
2729     strtitlept.Append("<= pt <");
2730     strtitlept+=fptbins[i+1];
2731     strtitlept.Append(" [GeV/c]");
2732     
2733     hd0D0ptLSCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2734     hd0D0ptLSCbackSB->SetXTitle("Impact parameter [#mum] ");
2735     hd0D0ptLSCbackSB->SetYTitle("Entries");
2736     flistLsCutsBack->Add(hd0D0ptLSCbackSB);
2737
2738     strnamept.ReplaceAll("hd0D0","hMCd0D0");
2739     hMCd0D0ptLSCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2740     hMCd0D0ptLSCbackSB->SetXTitle("MC Impact parameter [#mum] ");
2741     hMCd0D0ptLSCbackSB->SetYTitle("Entries");
2742     flistLsCutsBack->Add(hMCd0D0ptLSCbackSB);
2743
2744     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
2745     hd0D0VtxTrueptLSCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
2746     hd0D0VtxTrueptLSCbackSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
2747     hd0D0VtxTrueptLSCbackSB->SetYTitle("Entries");
2748     flistLsCutsBack->Add(hd0D0VtxTrueptLSCbackSB);
2749   }
2750
2751
2752
2753  //############ LOOSE CUTS FROMB HISTOGRAMS ###########
2754   //
2755   //#######  global properties histos
2756
2757   TH2F *hCPtaVSd0d0LSCfromB=new TH2F("hCPtaVSd0d0LSCfromB","hCPtaVSd0d0_LooseCuts_FromB",1000,-100000.,100000.,100,-1.,1.);
2758   TH1F *hSecVtxZLSCfromB=new TH1F("hSecVtxZLSCfromB","hSecVtxZ_LooseCuts_FromB",1000,-8.,8.);
2759   TH1F *hSecVtxXLSCfromB=new TH1F("hSecVtxXLSCfromB","hSecVtxX_LooseCuts_FromB",1000,-3000.,3000.);
2760   TH1F *hSecVtxYLSCfromB=new TH1F("hSecVtxYLSCfromB","hSecVtxY_LooseCuts_FromB",1000,-3000.,3000.);
2761   TH2F *hSecVtxXYLSCfromB=new TH2F("hSecVtxXYLSCfromB","hSecVtxXY_LooseCuts_FromB",1000,-3000.,3000.,1000,-3000.,3000.);
2762   TH1F *hSecVtxPhiLSCfromB=new TH1F("hSecVtxPhiLSCfromB","hSecVtxPhi_LooseCuts_FromB",180,-180.1,180.1);
2763   TH1F *hd0singlTrackLSCfromB=new TH1F("hd0singlTrackLSCfromB","hd0singlTrackLooseCuts_FromB",1000,-5000.,5000.);
2764   TH1F *hCPtaLSCfromB=new TH1F("hCPtaLSCfromB","hCPta_LooseCuts_FromB",100,-1.,1.);
2765   TH1F *hd0xd0LSCfromB=new TH1F("hd0xd0LSCfromB","hd0xd0_LooseCuts_FromB",1000,-100000.,100000.);
2766   TH1F *hMassTrueLSCfromB=new TH1F("hMassTrueLSCfromB","D^{0} MC inv. Mass Loose Cuts FromB(All momenta)",600,1.600,2.200);
2767   TH1F *hMassLSCfromB=new TH1F("hMassLSCfromB","D^{0} inv. Mass Loose Cuts FromB (All momenta)",600,1.600,2.200);
2768   hMassLSCfromB->Sumw2();
2769   TH1F *hMassTrueLSCfromBPM=new TH1F("hMassTrueLSCfromBPM","D^{0} MC inv. Mass Loose Cuts FromB, Mass Peak. (All momenta)",600,1.600,2.200);
2770   TH1F *hMassLSCfromBPM=new TH1F("hMassLSCfromBPM","D^{0} inv. Mass Loose Cuts FromB (All momenta), MassPeak",600,1.600,2.200);
2771   hMassLSCfromBPM->Sumw2();
2772   TH1F *hMassTrueLSCfromBSB=new TH1F("hMassTrueLSCfromBSB","D^{0} MC inv. Mass in Side Bands Loose Cuts FromB(All momenta)",600,1.600,2.200);
2773   TH1F *hMassLSCfromBSB=new TH1F("hMassLSCfromBSB","D^{0} inv. Mass in Side Bands Loose Cuts FromB (All momenta)",600,1.600,2.200);
2774   hMassLSCfromBSB->Sumw2();
2775
2776   flistLsCutsFromB->Add(hCPtaVSd0d0LSCfromB);
2777   flistLsCutsFromB->Add(hSecVtxZLSCfromB);
2778   flistLsCutsFromB->Add(hSecVtxYLSCfromB);
2779   flistLsCutsFromB->Add(hSecVtxXLSCfromB);
2780   flistLsCutsFromB->Add(hSecVtxXYLSCfromB);
2781   flistLsCutsFromB->Add(hSecVtxPhiLSCfromB);
2782   flistLsCutsFromB->Add(hd0singlTrackLSCfromB);
2783   flistLsCutsFromB->Add(hCPtaLSCfromB);
2784   flistLsCutsFromB->Add(hd0xd0LSCfromB);
2785   flistLsCutsFromB->Add(hMassTrueLSCfromB);
2786   flistLsCutsFromB->Add(hMassLSCfromB);
2787   flistLsCutsFromB->Add(hMassTrueLSCfromBPM);
2788   flistLsCutsFromB->Add(hMassLSCfromBPM);
2789   flistLsCutsFromB->Add(hMassTrueLSCfromBSB);
2790   flistLsCutsFromB->Add(hMassLSCfromBSB);
2791
2792
2793
2794
2795  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
2796   TH1F *hdcaLSCfromB=new TH1F("hdcaLSCfromB","hdca_LooseCuts_FromB",100,0.,1000.);
2797   hdcaLSCfromB->SetXTitle("dca   [#mum]");
2798   hdcaLSCfromB->SetYTitle("Entries");
2799   TH1F *hcosthetastarLSCfromB=new TH1F("hcosthetastarLSCfromB","hCosThetaStar_LooseCuts_FromB",50,-1.,1.);
2800   hcosthetastarLSCfromB->SetXTitle("cos #theta^{*}");
2801   hcosthetastarLSCfromB->SetYTitle("Entries");
2802   TH1F *hptD0LSCfromB=new TH1F("hptD0LSCfromB","D^{0} transverse momentum distribution",34,ptbinsD0arr);
2803   hptD0LSCfromB->SetXTitle("p_{t}  [GeV/c]");
2804   hptD0LSCfromB->SetYTitle("Entries");
2805   TH1F *hptD0VsMaxPtLSCfromB=new TH1F("hptD0VsMaxPtLSCfromB","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
2806   TH2F *hptD0PTallsqrtLSCfromB=new TH2F("hptD0PTallsqrtLSCfromB","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
2807   TH2F *hptD0PTallLSCfromB=new TH2F("hptD0PTallLSCfromB","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
2808   TH2F *hptD0vsptBLSCfromB=new TH2F("hptD0vsptBLSCfromB","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2809   TH2F *hpD0vspBLSCfromB=new TH2F("hpD0vspBLSCfromB","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2810   TH2F *hptD0vsptcquarkLSCfromB=new TH2F("hptD0vsptcquarkLSCfromB","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2811   TH2F *hpD0vspcquarkLSCfromB=new TH2F("hpD0vspcquarkLSCfromB","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
2812   flistLsCutsFromB->Add(hdcaLSCfromB);
2813   flistLsCutsFromB->Add(hcosthetastarLSCfromB);
2814   flistLsCutsFromB->Add(hptD0LSCfromB);
2815   flistLsCutsFromB->Add(hptD0VsMaxPtLSCfromB);
2816   flistLsCutsFromB->Add(hptD0PTallsqrtLSCfromB);
2817   flistLsCutsFromB->Add(hptD0PTallLSCfromB);
2818   flistLsCutsFromB->Add(hptD0vsptBLSCfromB);
2819   flistLsCutsFromB->Add(hpD0vspBLSCfromB);
2820   flistLsCutsFromB->Add(hptD0vsptcquarkLSCfromB);
2821   flistLsCutsFromB->Add(hpD0vspcquarkLSCfromB);
2822  
2823   TH1F *hd0zD0ptLSCfromB;
2824   TH1F *hInvMassD0LSCfromB,*hInvMassD0barLSCfromB;
2825   TH2F *hInvMassPtLSCfromB=new TH2F("hInvMassPtLSCfromB","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
2826  THnSparseF *hSparseLSCfromB=new THnSparseF("hSparseLSCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
2827   hSparseLSCfromB->SetBinEdges(0,massbins);
2828   hSparseLSCfromB->SetBinEdges(1,massbins);
2829   hSparseLSCfromB->SetBinEdges(2,ptbinsForNsparse);
2830   hSparseLSCfromB->SetBinEdges(3,impparbins);
2831   hSparseLSCfromB->SetBinEdges(4,massHypoBins); 
2832   flistLsCutsFromB->Add(hSparseLSCfromB);
2833   TH1F *hetaLSCfromB;
2834   TH1F *hCosPDPBLSCfromB;
2835   TH1F *hCosPcPDLSCfromB;
2836   flistLsCutsFromB->Add(hInvMassPtLSCfromB);
2837    // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2838   TH2F *hd0D0VSd0xd0LSCfromBpt;
2839   TH2F *hangletracksVSd0xd0LSCfromBpt;
2840   TH2F *hangletracksVSd0D0LSCfromBpt;
2841   TH1F *hd0xd0LSCfromBpt;
2842
2843
2844   TH2F *hTOFpidLSCfromB=new TH2F("hTOFpidLSCfromB","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
2845   flistLsCutsFromB->Add(hTOFpidLSCfromB);
2846
2847   for(Int_t i=0;i<fnbins;i++){
2848     namehist="hd0zD0ptLSCfromB_pt";
2849     namehist+=i;
2850     titlehist="d0(z) Loose Cuts FromBm ptbin=";
2851     titlehist+=i;
2852     hd0zD0ptLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
2853     hd0zD0ptLSCfromB->SetXTitle("d_{0}(z)    [#mum]");
2854     hd0zD0ptLSCfromB->SetYTitle("Entries");
2855     flistLsCutsFromB->Add(hd0zD0ptLSCfromB);
2856
2857     namehist="hInvMassD0LSCfromB_pt";
2858     namehist+=i;
2859     titlehist="Invariant Mass Loose Cuts FromB ptbin=";
2860     titlehist+=i;
2861     hInvMassD0LSCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
2862     hInvMassD0LSCfromB->SetXTitle("Invariant Mass    [GeV]");
2863     hInvMassD0LSCfromB->SetYTitle("Entries");
2864     flistLsCutsFromB->Add(hInvMassD0LSCfromB);
2865
2866     namehist="hInvMassD0barLSCfromB_pt";
2867     namehist+=i;
2868     titlehist="Invariant Mass D0bar Loose Cuts FromB ptbin=";
2869     titlehist+=i;
2870     hInvMassD0barLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
2871     hInvMassD0barLSCfromB->SetXTitle("Invariant Mass    [GeV]");
2872     hInvMassD0barLSCfromB->SetYTitle("Entries");
2873     flistLsCutsFromB->Add(hInvMassD0barLSCfromB);
2874
2875     namehist="hetaLSCfromB_pt";
2876     namehist+=i;
2877     titlehist="eta Loose Cuts FromB ptbin=";
2878     titlehist+=i;
2879     hetaLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
2880     hetaLSCfromB->SetXTitle("Pseudorapidity");
2881     hetaLSCfromB->SetYTitle("Entries");
2882     flistLsCutsFromB->Add(hetaLSCfromB);
2883
2884     namehist="hCosPDPBLSCfromB_pt";
2885     namehist+=i;
2886     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
2887     titlehist+=i;
2888     hCosPDPBLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
2889     hCosPDPBLSCfromB->SetXTitle("Cosine between D0 momentum and B momentum");
2890     hCosPDPBLSCfromB->SetYTitle("Entries");
2891     flistLsCutsFromB->Add(hCosPDPBLSCfromB);
2892
2893     namehist="hCosPcPDLSCfromB_pt";
2894     namehist+=i;
2895     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
2896     titlehist+=i;
2897     hCosPcPDLSCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
2898     hCosPcPDLSCfromB->SetXTitle("Cosine between c quark momentum and D0 momentum");
2899     hCosPcPDLSCfromB->SetYTitle("Entries");
2900     flistLsCutsFromB->Add(hCosPcPDLSCfromB);
2901
2902  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
2903     namehist="hd0xd0LSCfromB_pt";
2904     namehist+=i;
2905     titlehist="d0xd0 Loose Cuts FromB ptbin=";
2906     titlehist+=i;
2907     hd0xd0LSCfromBpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
2908     hd0xd0LSCfromBpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
2909     hd0xd0LSCfromBpt->SetYTitle("Entries");
2910     flistLsCutsFromB->Add(hd0xd0LSCfromBpt);
2911
2912
2913     namehist="hd0D0VSd0xd0LSCfromB_pt";
2914     namehist+=i;
2915     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromB ptbin=";
2916     titlehist+=i;
2917     hd0D0VSd0xd0LSCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
2918     hd0D0VSd0xd0LSCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2919     hd0D0VSd0xd0LSCfromBpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
2920     flistLsCutsFromB->Add(hd0D0VSd0xd0LSCfromBpt);
2921     
2922     
2923     namehist="hangletracksVSd0xd0LSCfromB_pt";
2924     namehist+=i;
2925     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromB ptbin=";
2926     titlehist+=i;
2927     hangletracksVSd0xd0LSCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
2928     hangletracksVSd0xd0LSCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
2929     hangletracksVSd0xd0LSCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
2930     flistLsCutsFromB->Add(hangletracksVSd0xd0LSCfromBpt);
2931     
2932
2933     namehist="hangletracksVSd0D0LSCfromB_pt";
2934     namehist+=i;
2935     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts FromB ptbin=";
2936     titlehist+=i;
2937     hangletracksVSd0D0LSCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
2938     hangletracksVSd0D0LSCfromBpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
2939     hangletracksVSd0D0LSCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
2940     flistLsCutsFromB->Add(hangletracksVSd0D0LSCfromBpt);
2941     
2942   }
2943   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
2944   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2945
2946
2947
2948
2949
2950   // ######### d0 D0 histos ##############
2951   TH1F *hd0D0LSCfromBPM = new TH1F("hd0D0LSCfromBPM","D^{0} impact par. plot , Loose Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
2952   hd0D0LSCfromBPM->SetXTitle("Impact parameter [#mum]");
2953   hd0D0LSCfromBPM->SetYTitle("Entries");
2954
2955   TH1F *hd0D0VtxTrueLSCfromBPM = new TH1F("hd0D0VtxTrueLSCfromBPM","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
2956   hd0D0VtxTrueLSCfromBPM->SetXTitle("Impact parameter [#mum]");
2957   hd0D0VtxTrueLSCfromBPM->SetYTitle("Entries");
2958
2959   TH1F *hMCd0D0LSCfromBPM = new TH1F("hMCd0D0LSCfromBPM","D^{0} impact par. plot, Loose Cuts, FromB,Mass Peak  (All momenta)",1000,-1000.,1000.);
2960   hMCd0D0LSCfromBPM->SetXTitle("MC Impact parameter [#mum]");
2961   hMCd0D0LSCfromBPM->SetYTitle("Entries");
2962
2963   TH1F *hd0D0LSCfromBSB = new TH1F("hd0D0LSCfromBSB","D^{0} impact par. plot , Loose Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
2964   hd0D0LSCfromBSB->SetXTitle("Impact parameter [#mum]");
2965   hd0D0LSCfromBSB->SetYTitle("Entries");
2966
2967   TH1F *hd0D0VtxTrueLSCfromBSB = new TH1F("hd0D0VtxTrueLSCfromBSB","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
2968   hd0D0VtxTrueLSCfromBSB->SetXTitle("Impact parameter [#mum]");
2969   hd0D0VtxTrueLSCfromBSB->SetYTitle("Entries");
2970
2971   TH1F *hMCd0D0LSCfromBSB = new TH1F("hMCd0D0LSCfromBSB","D^{0} impact par. plot, Loose Cuts, FromB,Mass Peak  (All momenta)",1000,-1000.,1000.);
2972   hMCd0D0LSCfromBSB->SetXTitle("MC Impact parameter [#mum]");
2973   hMCd0D0LSCfromBSB->SetYTitle("Entries");
2974
2975   flistLsCutsFromB->Add(hd0D0LSCfromBPM);
2976   flistLsCutsFromB->Add(hd0D0VtxTrueLSCfromBPM);
2977   flistLsCutsFromB->Add(hMCd0D0LSCfromBPM);
2978   flistLsCutsFromB->Add(hd0D0LSCfromBSB);
2979   flistLsCutsFromB->Add(hd0D0VtxTrueLSCfromBSB);
2980   flistLsCutsFromB->Add(hMCd0D0LSCfromBSB);
2981   
2982   TH1F *hd0D0ptLSCfromBPM;
2983   TH1F *hMCd0D0ptLSCfromBPM;
2984   TH1F *hd0D0VtxTrueptLSCfromBPM;
2985   TH1F *hd0D0ptLSCfromBSB;
2986   TH1F *hMCd0D0ptLSCfromBSB;
2987   TH1F *hd0D0VtxTrueptLSCfromBSB;
2988   namehist="hd0D0ptLSCfromB_";
2989   titlehist="D^{0} impact par. plot, Loose Cuts, FromB, ";
2990   for(Int_t i=0;i<fnbins;i++){
2991     strnamept=namehist;
2992     strnamept.Append("PkMss_pt");
2993     strnamept+=i;
2994
2995     strtitlept=titlehist;
2996     strtitlept.Append(" Mass Peak, ");
2997     strtitlept+=fptbins[i];
2998     strtitlept.Append("<= pt <");
2999     strtitlept+=fptbins[i+1];
3000     strtitlept.Append(" [GeV/c]");
3001     
3002     hd0D0ptLSCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3003     hd0D0ptLSCfromBPM->SetXTitle("Impact parameter [#mum] ");
3004     hd0D0ptLSCfromBPM->SetYTitle("Entries");
3005     flistLsCutsFromB->Add(hd0D0ptLSCfromBPM);
3006
3007     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3008     hMCd0D0ptLSCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3009     hMCd0D0ptLSCfromBPM->SetXTitle("MC Impact parameter [#mum] ");
3010     hMCd0D0ptLSCfromBPM->SetYTitle("Entries");
3011     flistLsCutsFromB->Add(hMCd0D0ptLSCfromBPM);
3012  
3013
3014     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3015     hd0D0VtxTrueptLSCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3016     hd0D0VtxTrueptLSCfromBPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3017     hd0D0VtxTrueptLSCfromBPM->SetYTitle("Entries");
3018     flistLsCutsFromB->Add(hd0D0VtxTrueptLSCfromBPM);
3019     
3020     strnamept=namehist;
3021     strnamept.Append("SBMss_pt");
3022     strnamept+=i;
3023
3024     strtitlept=titlehist;
3025     strtitlept.Append(" Side Bands, ");
3026     strtitlept+=fptbins[i];
3027     strtitlept.Append("<= pt <");
3028     strtitlept+=fptbins[i+1];
3029     strtitlept.Append(" [GeV/c]");
3030     
3031     hd0D0ptLSCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3032     hd0D0ptLSCfromBSB->SetXTitle("Impact parameter [#mum] ");
3033     hd0D0ptLSCfromBSB->SetYTitle("Entries");
3034     flistLsCutsFromB->Add(hd0D0ptLSCfromBSB);
3035
3036     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3037     hMCd0D0ptLSCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3038     hMCd0D0ptLSCfromBSB->SetXTitle("MC Impact parameter [#mum] ");
3039     hMCd0D0ptLSCfromBSB->SetYTitle("Entries");
3040     flistLsCutsFromB->Add(hMCd0D0ptLSCfromBSB);
3041
3042     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3043     hd0D0VtxTrueptLSCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3044     hd0D0VtxTrueptLSCfromBSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3045     hd0D0VtxTrueptLSCfromBSB->SetYTitle("Entries");
3046     flistLsCutsFromB->Add(hd0D0VtxTrueptLSCfromBSB);
3047   }
3048
3049
3050
3051  //############ LOOSE CUTS FROM DSTAR HISTOGRAMS ###########
3052  //
3053   //############## global properties histos
3054   TH2F *hCPtaVSd0d0LSCfromDstar=new TH2F("hCPtaVSd0d0LSCfromDstar","hCPtaVSd0d0_LooseCuts_FromDStar",1000,-100000.,100000.,100,-1.,1.);
3055   TH1F *hSecVtxZLSCfromDstar=new TH1F("hSecVtxZLSCfromDstar","hSecVtxZ_LooseCuts_FromDStar",1000,-8.,8.);
3056   TH1F *hSecVtxXLSCfromDstar=new TH1F("hSecVtxXLSCfromDstar","hSecVtxX_LooseCuts_FromDStar",1000,-3000.,3000.);
3057   TH1F *hSecVtxYLSCfromDstar=new TH1F("hSecVtxYLSCfromDstar","hSecVtxY_LooseCuts_FromDStar",1000,-3000.,3000.);
3058   TH2F *hSecVtxXYLSCfromDstar=new TH2F("hSecVtxXYLSCfromDstar","hSecVtxXY_LooseCuts_FromDStar",1000,-3000.,3000.,1000,-3000.,3000.);
3059   TH1F *hSecVtxPhiLSCfromDstar=new TH1F("hSecVtxPhiLSCfromDstar","hSecVtxPhi_LooseCuts_FromDStar",180,-180.1,180.1);
3060   TH1F *hd0singlTrackLSCfromDstar=new TH1F("hd0singlTrackLSCfromDstar","hd0singlTrackLooseCuts_FromDstar",1000,-5000.,5000.);
3061   TH1F *hCPtaLSCfromDstar=new TH1F("hCPtaLSCfromDstar","hCPta_LooseCuts_FromDStar",100,-1.,1.);
3062   TH1F *hd0xd0LSCfromDstar=new TH1F("hd0xd0LSCfromDstar","hd0xd0_LooseCuts_FromDStar",1000,-100000.,100000.);
3063   TH1F *hMassTrueLSCfromDstar=new TH1F("hMassTrueLSCfromDstar","D^{0} MC inv. Mass Loose Cuts FromDStar(All momenta)",600,1.600,2.200);
3064   TH1F *hMassLSCfromDstar=new TH1F("hMassLSCfromDstar","D^{0} inv. Mass Loose Cuts FromDStar (All momenta)",600,1.600,2.200);
3065   hMassLSCfromDstar->Sumw2();
3066   TH1F *hMassTrueLSCfromDstarPM=new TH1F("hMassTrueLSCfromDstarPM","D^{0} MC inv. Mass Loose Cuts FromDStar, Mass Peak. (All momenta)",600,1.600,2.200);
3067   TH1F *hMassLSCfromDstarPM=new TH1F("hMassLSCfromDstarPM","D^{0} inv. Mass Loose Cuts FromDStar (All momenta), MassPeak",600,1.600,2.200);
3068   hMassLSCfromDstarPM->Sumw2();
3069   TH1F *hMassTrueLSCfromDstarSB=new TH1F("hMassTrueLSCfromDstarSB","D^{0} MC inv. Mass in Side Bands Loose Cuts FromDStar(All momenta)",600,1.600,2.200);
3070   TH1F *hMassLSCfromDstarSB=new TH1F("hMassLSCfromDstarSB","D^{0} inv. Mass in Side Bands Loose Cuts FromDStar (All momenta)",600,1.600,2.200);
3071   hMassLSCfromDstarSB->Sumw2();
3072
3073   flistLsCutsFromDstar->Add(hCPtaVSd0d0LSCfromDstar);
3074   flistLsCutsFromDstar->Add(hSecVtxZLSCfromDstar);
3075   flistLsCutsFromDstar->Add(hSecVtxYLSCfromDstar);
3076   flistLsCutsFromDstar->Add(hSecVtxXLSCfromDstar);
3077   flistLsCutsFromDstar->Add(hSecVtxXYLSCfromDstar);
3078   flistLsCutsFromDstar->Add(hSecVtxPhiLSCfromDstar);
3079   flistLsCutsFromDstar->Add(hd0singlTrackLSCfromDstar);
3080   flistLsCutsFromDstar->Add(hCPtaLSCfromDstar);
3081   flistLsCutsFromDstar->Add(hd0xd0LSCfromDstar);
3082   flistLsCutsFromDstar->Add(hMassTrueLSCfromDstar);
3083   flistLsCutsFromDstar->Add(hMassLSCfromDstar);
3084   flistLsCutsFromDstar->Add(hMassTrueLSCfromDstarPM);
3085   flistLsCutsFromDstar->Add(hMassLSCfromDstarPM);
3086   flistLsCutsFromDstar->Add(hMassTrueLSCfromDstarSB);
3087   flistLsCutsFromDstar->Add(hMassLSCfromDstarSB);
3088
3089
3090
3091
3092
3093
3094
3095  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
3096   TH1F *hdcaLSCfromDstar=new TH1F("hdcaLSCfromDstar","hdca_LooseCuts_FromDstar",100,0.,1000.);
3097   hdcaLSCfromDstar->SetXTitle("dca   [#mum]");
3098   hdcaLSCfromDstar->SetYTitle("Entries");
3099   TH1F *hcosthetastarLSCfromDstar=new TH1F("hcosthetastarLSCfromDstar","hCosThetaStar_LooseCuts_FromDstar",50,-1.,1.);
3100   hcosthetastarLSCfromDstar->SetXTitle("cos #theta^{*}");
3101   hcosthetastarLSCfromDstar->SetYTitle("Entries");
3102   TH1F *hptD0LSCfromDstar=new TH1F("hptD0LSCfromDstar","D^{0} transverse momentum distribution",34,ptbinsD0arr);
3103   hptD0LSCfromDstar->SetXTitle("p_{t}  [GeV/c]");
3104   hptD0LSCfromDstar->SetYTitle("Entries");
3105   TH1F *hptD0VsMaxPtLSCfromDstar=new TH1F("hptD0VsMaxPtLSCfromDstar","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
3106   TH2F *hptD0PTallsqrtLSCfromDstar=new TH2F("hptD0PTallsqrtLSCfromDstar","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
3107   TH2F *hptD0PTallLSCfromDstar=new TH2F("hptD0PTallLSCfromDstar","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
3108   TH2F *hptD0vsptBLSCfromDstar=new TH2F("hptD0vsptBLSCfromDstar","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3109   TH2F *hpD0vspBLSCfromDstar=new TH2F("hpD0vspBLSCfromDstar","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3110   TH2F *hptD0vsptcquarkLSCfromDstar=new TH2F("hptD0vsptcquarkLSCfromDstar","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3111   TH2F *hpD0vspcquarkLSCfromDstar=new TH2F("hpD0vspcquarkLSCfromDstar","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3112   flistLsCutsFromDstar->Add(hdcaLSCfromDstar);
3113   flistLsCutsFromDstar->Add(hcosthetastarLSCfromDstar);
3114   flistLsCutsFromDstar->Add(hptD0LSCfromDstar);
3115   flistLsCutsFromDstar->Add(hptD0VsMaxPtLSCfromDstar);
3116   flistLsCutsFromDstar->Add(hptD0PTallsqrtLSCfromDstar);
3117   flistLsCutsFromDstar->Add(hptD0PTallLSCfromDstar);
3118   flistLsCutsFromDstar->Add(hptD0vsptBLSCfromDstar);
3119   flistLsCutsFromDstar->Add(hpD0vspBLSCfromDstar);
3120   flistLsCutsFromDstar->Add(hptD0vsptcquarkLSCfromDstar);
3121   flistLsCutsFromDstar->Add(hpD0vspcquarkLSCfromDstar);
3122  
3123   TH1F *hd0zD0ptLSCfromDstar;
3124   TH1F *hInvMassD0LSCfromDstar,*hInvMassD0barLSCfromDstar;
3125   TH2F *hInvMassPtLSCfromDstar=new TH2F("hInvMassPtLSCfromDstar","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
3126  THnSparseF *hSparseLSCfromDstar=new THnSparseF("hSparseLSCfromDstar","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
3127   hSparseLSCfromDstar->SetBinEdges(0,massbins);
3128   hSparseLSCfromDstar->SetBinEdges(1,massbins);
3129   hSparseLSCfromDstar->SetBinEdges(2,ptbinsForNsparse);
3130   hSparseLSCfromDstar->SetBinEdges(3,impparbins);
3131   hSparseLSCfromDstar->SetBinEdges(4,massHypoBins); 
3132   flistLsCutsFromDstar->Add(hSparseLSCfromDstar);
3133   TH1F *hetaLSCfromDstar;
3134   TH1F *hCosPDPBLSCfromDstar;
3135   TH1F *hCosPcPDLSCfromDstar;
3136   flistLsCutsFromDstar->Add(hInvMassPtLSCfromDstar);
3137   // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
3138   TH2F *hd0D0VSd0xd0LSCfromDstarpt;
3139   TH2F *hangletracksVSd0xd0LSCfromDstarpt;
3140   TH2F *hangletracksVSd0D0LSCfromDstarpt;
3141   TH1F *hd0xd0LSCfromDstarpt;
3142
3143   TH2F *hTOFpidLSCfromDstar=new TH2F("hTOFpidLSCfromDstar","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
3144   flistLsCutsFromDstar->Add(hTOFpidLSCfromDstar);
3145
3146   for(Int_t i=0;i<fnbins;i++){
3147     namehist="hd0zD0ptLSCfromDstar_pt";
3148     namehist+=i;
3149     titlehist="d0(z) Loose Cuts FromDstarm ptbin=";
3150     titlehist+=i;
3151     hd0zD0ptLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
3152     hd0zD0ptLSCfromDstar->SetXTitle("d_{0}(z)    [#mum]");
3153     hd0zD0ptLSCfromDstar->SetYTitle("Entries");
3154     flistLsCutsFromDstar->Add(hd0zD0ptLSCfromDstar);
3155
3156     namehist="hInvMassD0LSCfromDstar_pt";
3157     namehist+=i;
3158     titlehist="Invariant Mass Loose Cuts FromDstar ptbin=";
3159     titlehist+=i;
3160     hInvMassD0LSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
3161     hInvMassD0LSCfromDstar->SetXTitle("Invariant Mass    [GeV]");
3162     hInvMassD0LSCfromDstar->SetYTitle("Entries");
3163     flistLsCutsFromDstar->Add(hInvMassD0LSCfromDstar);
3164
3165     namehist="hInvMassD0barLSCfromDstar_pt";
3166     namehist+=i;
3167     titlehist="Invariant Mass D0bar Loose Cuts FromDstar ptbin=";
3168     titlehist+=i;
3169     hInvMassD0barLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
3170     hInvMassD0barLSCfromDstar->SetXTitle("Invariant Mass    [GeV]");
3171     hInvMassD0barLSCfromDstar->SetYTitle("Entries");
3172     flistLsCutsFromDstar->Add(hInvMassD0barLSCfromDstar);
3173
3174     namehist="hetaLSCfromDstar_pt";
3175     namehist+=i;
3176     titlehist="eta Loose Cuts FromDstar ptbin=";
3177     titlehist+=i;
3178     hetaLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
3179     hetaLSCfromDstar->SetXTitle("Pseudorapidity");
3180     hetaLSCfromDstar->SetYTitle("Entries");
3181     flistLsCutsFromDstar->Add(hetaLSCfromDstar);
3182
3183     namehist="hCosPDPBLSCfromDstar_pt";
3184     namehist+=i;
3185     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
3186     titlehist+=i;
3187     hCosPDPBLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
3188     hCosPDPBLSCfromDstar->SetXTitle("Cosine between D0 momentum and B momentum");
3189     hCosPDPBLSCfromDstar->SetYTitle("Entries");
3190     flistLsCutsFromDstar->Add(hCosPDPBLSCfromDstar);
3191
3192     namehist="hCosPcPDLSCfromDstar_pt";
3193     namehist+=i;
3194     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
3195     titlehist+=i;
3196     hCosPcPDLSCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
3197     hCosPcPDLSCfromDstar->SetXTitle("Cosine between c quark momentum and D0 momentum");
3198     hCosPcPDLSCfromDstar->SetYTitle("Entries");
3199     flistLsCutsFromDstar->Add(hCosPcPDLSCfromDstar);
3200     
3201  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
3202     namehist="hd0xd0LSCfromDstar_pt";
3203     namehist+=i;
3204     titlehist="d0xd0 Loose Cuts FromDstar ptbin=";
3205     titlehist+=i;
3206     hd0xd0LSCfromDstarpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
3207     hd0xd0LSCfromDstarpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
3208     hd0xd0LSCfromDstarpt->SetYTitle("Entries");
3209     flistLsCutsFromDstar->Add(hd0xd0LSCfromDstarpt);
3210
3211
3212     namehist="hd0D0VSd0xd0LSCfromDstar_pt";
3213     namehist+=i;
3214     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromDstar ptbin=";
3215     titlehist+=i;
3216     hd0D0VSd0xd0LSCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
3217     hd0D0VSd0xd0LSCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
3218     hd0D0VSd0xd0LSCfromDstarpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
3219     flistLsCutsFromDstar->Add(hd0D0VSd0xd0LSCfromDstarpt);
3220     
3221     
3222     namehist="hangletracksVSd0xd0LSCfromDstar_pt";
3223     namehist+=i;
3224     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts FromDstar ptbin=";
3225     titlehist+=i;
3226     hangletracksVSd0xd0LSCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
3227     hangletracksVSd0xd0LSCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
3228     hangletracksVSd0xd0LSCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
3229     flistLsCutsFromDstar->Add(hangletracksVSd0xd0LSCfromDstarpt);
3230     
3231
3232     namehist="hangletracksVSd0D0LSCfromDstar_pt";
3233     namehist+=i;
3234     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts FromDstar ptbin=";
3235     titlehist+=i;
3236     hangletracksVSd0D0LSCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
3237     hangletracksVSd0D0LSCfromDstarpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
3238     hangletracksVSd0D0LSCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
3239     flistLsCutsFromDstar->Add(hangletracksVSd0D0LSCfromDstarpt);
3240
3241
3242   }
3243   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
3244   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3245
3246
3247
3248
3249
3250
3251   //########## d0 D0 histos #############  
3252   TH1F *hd0D0LSCfromDstPM = new TH1F("hd0D0LSCfromDstarPM","D^{0} impact par. plot , Loose Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
3253   hd0D0LSCfromDstPM->SetXTitle("Impact parameter [#mum]");
3254   hd0D0LSCfromDstPM->SetYTitle("Entries");
3255
3256   TH1F *hd0D0VtxTrueLSCfromDstPM = new TH1F("hd0D0VtxTrueLSCfromDstarPM","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
3257   hd0D0VtxTrueLSCfromDstPM->SetXTitle("Impact parameter [#mum]");
3258   hd0D0VtxTrueLSCfromDstPM->SetYTitle("Entries");
3259
3260   TH1F *hMCd0D0LSCfromDstPM = new TH1F("hMCd0D0LSCfromDstarPM","D^{0} impact par. plot, Loose Cuts, FromDStar,Mass Peak  (All momenta)",1000,-1000.,1000.);
3261   hMCd0D0LSCfromDstPM->SetXTitle("MC Impact parameter [#mum]");
3262   hMCd0D0LSCfromDstPM->SetYTitle("Entries");
3263
3264   TH1F *hd0D0LSCfromDstSB = new TH1F("hd0D0LSCfromDstarSB","D^{0} impact par. plot , Loose Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
3265   hd0D0LSCfromDstSB->SetXTitle("Impact parameter [#mum]");
3266   hd0D0LSCfromDstSB->SetYTitle("Entries");
3267
3268   TH1F *hd0D0VtxTrueLSCfromDstSB = new TH1F("hd0D0VtxTrueLSCfromDstarSB","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
3269   hd0D0VtxTrueLSCfromDstSB->SetXTitle("Impact parameter [#mum]");
3270   hd0D0VtxTrueLSCfromDstSB->SetYTitle("Entries");
3271
3272   TH1F *hMCd0D0LSCfromDstSB = new TH1F("hMCd0D0LSCfromDstarSB","D^{0} impact par. plot, Loose Cuts, FromDStar,Mass Peak  (All momenta)",1000,-1000.,1000.);
3273   hMCd0D0LSCfromDstSB->SetXTitle("MC Impact parameter [#mum]");
3274   hMCd0D0LSCfromDstSB->SetYTitle("Entries");
3275
3276   flistLsCutsFromDstar->Add(hd0D0LSCfromDstPM);
3277   flistLsCutsFromDstar->Add(hd0D0VtxTrueLSCfromDstPM);
3278   flistLsCutsFromDstar->Add(hMCd0D0LSCfromDstPM);
3279   flistLsCutsFromDstar->Add(hd0D0LSCfromDstSB);
3280   flistLsCutsFromDstar->Add(hd0D0VtxTrueLSCfromDstSB);
3281   flistLsCutsFromDstar->Add(hMCd0D0LSCfromDstSB);
3282   
3283   TH1F *hd0D0ptLSCfromDstPM;
3284   TH1F *hMCd0D0ptLSCfromDstPM;
3285   TH1F *hd0D0VtxTrueptLSCfromDstPM;
3286   TH1F *hd0D0ptLSCfromDstSB;
3287   TH1F *hMCd0D0ptLSCfromDstSB;
3288   TH1F *hd0D0VtxTrueptLSCfromDstSB;
3289   namehist="hd0D0ptLSCfromDstar_";
3290   titlehist="D^{0} impact par. plot, Loose Cuts, FromDStar, ";
3291   for(Int_t i=0;i<fnbins;i++){
3292     strnamept=namehist;
3293     strnamept.Append("PkMss_pt");
3294     strnamept+=i;
3295
3296     strtitlept=titlehist;
3297     strtitlept.Append(" Mass Peak, ");
3298     strtitlept+=fptbins[i];
3299     strtitlept.Append("<= pt <");
3300     strtitlept+=fptbins[i+1];
3301     strtitlept.Append(" [GeV/c]");
3302     
3303     hd0D0ptLSCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3304     hd0D0ptLSCfromDstPM->SetXTitle("Impact parameter [#mum] ");
3305     hd0D0ptLSCfromDstPM->SetYTitle("Entries");
3306     flistLsCutsFromDstar->Add(hd0D0ptLSCfromDstPM);
3307
3308     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3309     hMCd0D0ptLSCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3310     hMCd0D0ptLSCfromDstPM->SetXTitle("MC Impact parameter [#mum] ");
3311     hMCd0D0ptLSCfromDstPM->SetYTitle("Entries");
3312     flistLsCutsFromDstar->Add(hMCd0D0ptLSCfromDstPM);
3313  
3314
3315     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3316     hd0D0VtxTrueptLSCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3317     hd0D0VtxTrueptLSCfromDstPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3318     hd0D0VtxTrueptLSCfromDstPM->SetYTitle("Entries");
3319     flistLsCutsFromDstar->Add(hd0D0VtxTrueptLSCfromDstPM);
3320     
3321     strnamept=namehist;
3322     strnamept.Append("SBMss_pt");
3323     strnamept+=i;
3324
3325     strtitlept=titlehist;
3326     strtitlept.Append(" Side Bands, ");
3327     strtitlept+=fptbins[i];
3328     strtitlept.Append("<= pt <");
3329     strtitlept+=fptbins[i+1];
3330     strtitlept.Append(" [GeV/c]");
3331     
3332     hd0D0ptLSCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3333     hd0D0ptLSCfromDstSB->SetXTitle("Impact parameter [#mum] ");
3334     hd0D0ptLSCfromDstSB->SetYTitle("Entries");
3335     flistLsCutsFromDstar->Add(hd0D0ptLSCfromDstSB);
3336
3337     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3338     hMCd0D0ptLSCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3339     hMCd0D0ptLSCfromDstSB->SetXTitle("MC Impact parameter [#mum] ");
3340     hMCd0D0ptLSCfromDstSB->SetYTitle("Entries");
3341     flistLsCutsFromDstar->Add(hMCd0D0ptLSCfromDstSB);
3342
3343     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3344     hd0D0VtxTrueptLSCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3345     hd0D0VtxTrueptLSCfromDstSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3346     hd0D0VtxTrueptLSCfromDstSB->SetYTitle("Entries");
3347     flistLsCutsFromDstar->Add(hd0D0VtxTrueptLSCfromDstSB);
3348   }
3349
3350
3351   //############ LOOSE CUTS OTHER HISTOGRAMS ###########
3352   //
3353   //########### global properties histos ###########
3354
3355   TH2F *hCPtaVSd0d0LSCother=new TH2F("hCPtaVSd0d0LSCother","hCPtaVSd0d0_LooseCuts_other",1000,-100000.,100000.,100,-1.,1.);
3356   TH1F *hSecVtxZLSCother=new TH1F("hSecVtxZLSCother","hSecVtxZ_LooseCuts_other",1000,-8.,8.);
3357   TH1F *hSecVtxXLSCother=new TH1F("hSecVtxXLSCother","hSecVtxX_LooseCuts_other",1000,-3000.,3000.);
3358   TH1F *hSecVtxYLSCother=new TH1F("hSecVtxYLSCother","hSecVtxY_LooseCuts_other",1000,-3000.,3000.);
3359   TH2F *hSecVtxXYLSCother=new TH2F("hSecVtxXYLSCother","hSecVtxXY_LooseCuts_other",1000,-3000.,3000.,1000,-3000.,3000.);
3360   TH1F *hSecVtxPhiLSCother=new TH1F("hSecVtxPhiLSCother","hSecVtxPhi_LooseCuts_other",180,-180.1,180.1);
3361   TH1F *hd0singlTrackLSCother=new TH1F("hd0singlTrackLSCother","hd0singlTrackLooseCuts_Other",1000,-5000.,5000.);
3362   TH1F *hCPtaLSCother=new TH1F("hCPtaLSCother","hCPta_LooseCuts_other",100,-1.,1.);
3363   TH1F *hd0xd0LSCother=new TH1F("hd0xd0LSCother","hd0xd0_LooseCuts_other",1000,-100000.,100000.);
3364   TH1F *hMassTrueLSCother=new TH1F("hMassTrueLSCother","D^{0} MC inv. Mass Loose Cuts other(All momenta)",600,1.600,2.200);
3365   TH1F *hMassLSCother=new TH1F("hMassLSCother","D^{0} inv. Mass Loose Cuts other (All momenta)",600,1.600,2.200);
3366   hMassLSCother->Sumw2();
3367   TH1F *hMassTrueLSCotherPM=new TH1F("hMassTrueLSCotherPM","D^{0} MC inv. Mass Loose Cuts other, Mass Peak. (All momenta)",600,1.600,2.200);
3368   TH1F *hMassLSCotherPM=new TH1F("hMassLSCotherPM","D^{0} inv. Mass Loose Cuts other (All momenta), MassPeak",600,1.600,2.200);
3369   hMassLSCotherPM->Sumw2();
3370   TH1F *hMassTrueLSCotherSB=new TH1F("hMassTrueLSCotherSB","D^{0} MC inv. Mass in Side Bands Loose Cuts other(All momenta)",600,1.600,2.200);
3371   TH1F *hMassLSCotherSB=new TH1F("hMassLSCotherSB","D^{0} inv. Mass in Side Bands Loose Cuts other (All momenta)",600,1.600,2.200);
3372   hMassLSCotherSB->Sumw2();
3373
3374   flistLsCutsOther->Add(hCPtaVSd0d0LSCother);
3375   flistLsCutsOther->Add(hSecVtxZLSCother);
3376   flistLsCutsOther->Add(hSecVtxYLSCother);
3377   flistLsCutsOther->Add(hSecVtxXLSCother);
3378   flistLsCutsOther->Add(hSecVtxXYLSCother);
3379   flistLsCutsOther->Add(hSecVtxPhiLSCother);
3380   flistLsCutsOther->Add(hd0singlTrackLSCother);
3381   flistLsCutsOther->Add(hCPtaLSCother);
3382   flistLsCutsOther->Add(hd0xd0LSCother);
3383   flistLsCutsOther->Add(hMassTrueLSCother);
3384   flistLsCutsOther->Add(hMassLSCother);
3385   flistLsCutsOther->Add(hMassTrueLSCotherPM);
3386   flistLsCutsOther->Add(hMassLSCotherPM);
3387   flistLsCutsOther->Add(hMassTrueLSCotherSB);
3388   flistLsCutsOther->Add(hMassLSCotherSB);
3389
3390
3391
3392
3393  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
3394   TH1F *hdcaLSCother=new TH1F("hdcaLSCother","hdca_LooseCuts_Other",100,0.,1000.);
3395   hdcaLSCother->SetXTitle("dca   [#mum]");
3396   hdcaLSCother->SetYTitle("Entries");
3397   TH1F *hcosthetastarLSCother=new TH1F("hcosthetastarLSCother","hCosThetaStar_LooseCuts_Other",50,-1.,1.);
3398   hcosthetastarLSCother->SetXTitle("cos #theta^{*}");
3399   hcosthetastarLSCother->SetYTitle("Entries");
3400   TH1F *hptD0LSCother=new TH1F("hptD0LSCother","D^{0} transverse momentum distribution",34,ptbinsD0arr);
3401   hptD0LSCother->SetXTitle("p_{t}  [GeV/c]");
3402   hptD0LSCother->SetYTitle("Entries");
3403   TH1F *hptD0VsMaxPtLSCother=new TH1F("hptD0VsMaxPtLSCother","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
3404   TH2F *hptD0PTallsqrtLSCother=new TH2F("hptD0PTallsqrtLSCother","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
3405   TH2F *hptD0PTallLSCother=new TH2F("hptD0PTallLSCother","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
3406   TH2F *hptD0vsptBLSCother=new TH2F("hptD0vsptBLSCother","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3407   TH2F *hpD0vspBLSCother=new TH2F("hpD0vspBLSCother","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3408   TH2F *hptD0vsptcquarkLSCother=new TH2F("hptD0vsptcquarkLSCother","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3409   TH2F *hpD0vspcquarkLSCother=new TH2F("hpD0vspcquarkLSCother","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3410   flistLsCutsOther->Add(hdcaLSCother);
3411   flistLsCutsOther->Add(hcosthetastarLSCother);
3412   flistLsCutsOther->Add(hptD0LSCother);
3413   flistLsCutsOther->Add(hptD0VsMaxPtLSCother);
3414   flistLsCutsOther->Add(hptD0PTallsqrtLSCother);
3415   flistLsCutsOther->Add(hptD0PTallLSCother);
3416   flistLsCutsOther->Add(hptD0vsptBLSCother);
3417   flistLsCutsOther->Add(hpD0vspBLSCother);
3418   flistLsCutsOther->Add(hptD0vsptcquarkLSCother);
3419   flistLsCutsOther->Add(hpD0vspcquarkLSCother);
3420
3421   TH1F *hd0zD0ptLSCother;
3422   TH1F *hInvMassD0LSCother,*hInvMassD0barLSCother;
3423   TH2F *hInvMassPtLSCother=new TH2F("hInvMassPtLSCother","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
3424  THnSparseF *hSparseLSCother=new THnSparseF("hSparseLSCother","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
3425   hSparseLSCother->SetBinEdges(0,massbins);
3426   hSparseLSCother->SetBinEdges(1,massbins);
3427   hSparseLSCother->SetBinEdges(2,ptbinsForNsparse);
3428   hSparseLSCother->SetBinEdges(3,impparbins);
3429   hSparseLSCother->SetBinEdges(4,massHypoBins); 
3430   flistLsCutsOther->Add(hSparseLSCother);
3431   TH1F *hetaLSCother;
3432   TH1F *hCosPDPBLSCother;
3433   TH1F *hCosPcPDLSCother;
3434   flistLsCutsOther->Add(hInvMassPtLSCother);
3435  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
3436   TH2F *hd0D0VSd0xd0LSCotherpt;
3437   TH2F *hangletracksVSd0xd0LSCotherpt;
3438   TH2F *hangletracksVSd0D0LSCotherpt;
3439   TH1F *hd0xd0LSCotherpt;
3440
3441   TH2F *hTOFpidLSCother=new TH2F("hTOFpidLSCother","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
3442   flistLsCutsOther->Add(hTOFpidLSCother);
3443
3444   for(Int_t i=0;i<fnbins;i++){
3445     namehist="hd0zD0ptLSCother_pt";
3446     namehist+=i;
3447     titlehist="d0(z) Loose Cuts Otherm ptbin=";
3448     titlehist+=i;
3449     hd0zD0ptLSCother=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
3450     hd0zD0ptLSCother->SetXTitle("d_{0}(z)    [#mum]");
3451     hd0zD0ptLSCother->SetYTitle("Entries");
3452     flistLsCutsOther->Add(hd0zD0ptLSCother);
3453
3454     namehist="hInvMassD0LSCother_pt";
3455     namehist+=i;
3456     titlehist="Invariant Mass Loose Cuts Other ptbin=";
3457     titlehist+=i;
3458     hInvMassD0LSCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
3459     hInvMassD0LSCother->SetXTitle("Invariant Mass    [GeV]");
3460     hInvMassD0LSCother->SetYTitle("Entries");
3461     flistLsCutsOther->Add(hInvMassD0LSCother);
3462
3463     namehist="hInvMassD0barLSCother_pt";
3464     namehist+=i;
3465     titlehist="Invariant Mass D0bar Loose Cuts Other ptbin=";
3466     titlehist+=i;
3467     hInvMassD0barLSCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
3468     hInvMassD0barLSCother->SetXTitle("Invariant Mass    [GeV]");
3469     hInvMassD0barLSCother->SetYTitle("Entries");
3470     flistLsCutsOther->Add(hInvMassD0barLSCother);
3471
3472     namehist="hetaLSCother_pt";
3473     namehist+=i;
3474     titlehist="eta Loose Cuts Other ptbin=";
3475     titlehist+=i;
3476     hetaLSCother=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
3477     hetaLSCother->SetXTitle("Pseudorapidity");
3478     hetaLSCother->SetYTitle("Entries");
3479     flistLsCutsOther->Add(hetaLSCother);
3480
3481     namehist="hCosPDPBLSCother_pt";
3482     namehist+=i;
3483     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
3484     titlehist+=i;
3485     hCosPDPBLSCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
3486     hCosPDPBLSCother->SetXTitle("Cosine between D0 momentum and B momentum");
3487     hCosPDPBLSCother->SetYTitle("Entries");
3488     flistLsCutsOther->Add(hCosPDPBLSCother);
3489
3490     namehist="hCosPcPDLSCother_pt";
3491     namehist+=i;
3492     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
3493     titlehist+=i;
3494     hCosPcPDLSCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
3495     hCosPcPDLSCother->SetXTitle("Cosine between c quark momentum and D0 momentum");
3496     hCosPcPDLSCother->SetYTitle("Entries");
3497     flistLsCutsOther->Add(hCosPcPDLSCother);
3498
3499  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
3500     namehist="hd0xd0LSCother_pt";
3501     namehist+=i;
3502     titlehist="d0xd0 Loose Cuts Other ptbin=";
3503     titlehist+=i;
3504     hd0xd0LSCotherpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
3505     hd0xd0LSCotherpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
3506     hd0xd0LSCotherpt->SetYTitle("Entries");
3507     flistLsCutsOther->Add(hd0xd0LSCotherpt);
3508
3509
3510     namehist="hd0D0VSd0xd0LSCother_pt";
3511     namehist+=i;
3512     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Other ptbin=";
3513     titlehist+=i;
3514     hd0D0VSd0xd0LSCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
3515     hd0D0VSd0xd0LSCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
3516     hd0D0VSd0xd0LSCotherpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
3517     flistLsCutsOther->Add(hd0D0VSd0xd0LSCotherpt);
3518     
3519     
3520     namehist="hangletracksVSd0xd0LSCother_pt";
3521     namehist+=i;
3522     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Loose Cuts Other ptbin=";
3523     titlehist+=i;
3524     hangletracksVSd0xd0LSCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
3525     hangletracksVSd0xd0LSCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
3526     hangletracksVSd0xd0LSCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
3527     flistLsCutsOther->Add(hangletracksVSd0xd0LSCotherpt);
3528     
3529
3530     namehist="hangletracksVSd0D0LSCother_pt";
3531     namehist+=i;
3532     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Loose Cuts Other ptbin=";
3533     titlehist+=i;
3534     hangletracksVSd0D0LSCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
3535     hangletracksVSd0D0LSCotherpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
3536     hangletracksVSd0D0LSCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
3537     flistLsCutsOther->Add(hangletracksVSd0D0LSCotherpt);
3538
3539     
3540   }
3541   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
3542   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3543
3544
3545
3546   //############# d0 D0 histos ###############à
3547   TH1F *hd0D0LSCotherPM = new TH1F("hd0D0LSCotherPM","D^{0} impact par. plot , Loose Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
3548   hd0D0LSCotherPM->SetXTitle("Impact parameter [#mum]");
3549   hd0D0LSCotherPM->SetYTitle("Entries");
3550
3551   TH1F *hd0D0VtxTrueLSCotherPM = new TH1F("hd0D0VtxTrueLSCotherPM","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, Other,Mass Peak (All momenta)",1000,-1000.,1000.);
3552   hd0D0VtxTrueLSCotherPM->SetXTitle("Impact parameter [#mum]");
3553   hd0D0VtxTrueLSCotherPM->SetYTitle("Entries");
3554
3555   TH1F *hMCd0D0LSCotherPM = new TH1F("hMCd0D0LSCotherPM","D^{0} impact par. plot, Loose Cuts, Other,Mass Peak  (All momenta)",1000,-1000.,1000.);
3556   hMCd0D0LSCotherPM->SetXTitle("MC Impact parameter [#mum]");
3557   hMCd0D0LSCotherPM->SetYTitle("Entries");
3558
3559   TH1F *hd0D0LSCotherSB = new TH1F("hd0D0LSCotherSB","D^{0} impact par. plot , Loose Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
3560   hd0D0LSCotherSB->SetXTitle("Impact parameter [#mum]");
3561   hd0D0LSCotherSB->SetYTitle("Entries");
3562
3563   TH1F *hd0D0VtxTrueLSCotherSB = new TH1F("hd0D0VtxTrueLSCotherSB","D^{0} impact par. w.r.t. True Vtx, Loose Cuts, Other,Mass Peak (All momenta)",1000,-1000.,1000.);
3564   hd0D0VtxTrueLSCotherSB->SetXTitle("Impact parameter [#mum]");
3565   hd0D0VtxTrueLSCotherSB->SetYTitle("Entries");
3566
3567   TH1F *hMCd0D0LSCotherSB = new TH1F("hMCd0D0LSCotherSB","D^{0} impact par. plot, Loose Cuts, Other,Mass Peak  (All momenta)",1000,-1000.,1000.);
3568   hMCd0D0LSCotherSB->SetXTitle("MC Impact parameter [#mum]");
3569   hMCd0D0LSCotherSB->SetYTitle("Entries");
3570
3571   flistLsCutsOther->Add(hd0D0LSCotherPM);
3572   flistLsCutsOther->Add(hd0D0VtxTrueLSCotherPM);
3573   flistLsCutsOther->Add(hMCd0D0LSCotherPM);
3574   flistLsCutsOther->Add(hd0D0LSCotherSB);
3575   flistLsCutsOther->Add(hd0D0VtxTrueLSCotherSB);
3576   flistLsCutsOther->Add(hMCd0D0LSCotherSB);
3577   
3578   TH1F *hd0D0ptLSCotherPM;
3579   TH1F *hMCd0D0ptLSCotherPM;
3580   TH1F *hd0D0VtxTrueptLSCotherPM;
3581   TH1F *hd0D0ptLSCotherSB;
3582   TH1F *hMCd0D0ptLSCotherSB;
3583   TH1F *hd0D0VtxTrueptLSCotherSB;
3584   namehist="hd0D0ptLSCother_";
3585   titlehist="D^{0} impact par. plot, Loose Cuts, Other, ";
3586   for(Int_t i=0;i<fnbins;i++){
3587     strnamept=namehist;
3588     strnamept.Append("PkMss_pt");
3589     strnamept+=i;
3590
3591     strtitlept=titlehist;
3592     strtitlept.Append(" Mass Peak, ");
3593     strtitlept+=fptbins[i];
3594     strtitlept.Append("<= pt <");
3595     strtitlept+=fptbins[i+1];
3596     strtitlept.Append(" [GeV/c]");
3597     
3598     hd0D0ptLSCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3599     hd0D0ptLSCotherPM->SetXTitle("Impact parameter [#mum] ");
3600     hd0D0ptLSCotherPM->SetYTitle("Entries");
3601     flistLsCutsOther->Add(hd0D0ptLSCotherPM);
3602
3603     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3604     hMCd0D0ptLSCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3605     hMCd0D0ptLSCotherPM->SetXTitle("MC Impact parameter [#mum] ");
3606     hMCd0D0ptLSCotherPM->SetYTitle("Entries");
3607     flistLsCutsOther->Add(hMCd0D0ptLSCotherPM);
3608  
3609
3610     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3611     hd0D0VtxTrueptLSCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3612     hd0D0VtxTrueptLSCotherPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3613     hd0D0VtxTrueptLSCotherPM->SetYTitle("Entries");
3614     flistLsCutsOther->Add(hd0D0VtxTrueptLSCotherPM);
3615     
3616     strnamept=namehist;
3617     strnamept.Append("SBMss_pt");
3618     strnamept+=i;
3619
3620     strtitlept=titlehist;
3621     strtitlept.Append(" Side Bands, ");
3622     strtitlept+=fptbins[i];
3623     strtitlept.Append("<= pt <");
3624     strtitlept+=fptbins[i+1];
3625     strtitlept.Append(" [GeV/c]");
3626     
3627     hd0D0ptLSCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3628     hd0D0ptLSCotherSB->SetXTitle("Impact parameter [#mum] ");
3629     hd0D0ptLSCotherSB->SetYTitle("Entries");
3630     flistLsCutsOther->Add(hd0D0ptLSCotherSB);
3631
3632     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3633     hMCd0D0ptLSCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3634     hMCd0D0ptLSCotherSB->SetXTitle("MC Impact parameter [#mum] ");
3635     hMCd0D0ptLSCotherSB->SetYTitle("Entries");
3636     flistLsCutsOther->Add(hMCd0D0ptLSCotherSB);
3637
3638     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3639     hd0D0VtxTrueptLSCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3640     hd0D0VtxTrueptLSCotherSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3641     hd0D0VtxTrueptLSCotherSB->SetYTitle("Entries");
3642     flistLsCutsOther->Add(hd0D0VtxTrueptLSCotherSB);
3643   }
3644
3645   //Printf("END OF LSCUTS HISTOS CREATION \n");
3646
3647
3648   //################################################################################################
3649   //                                                                                               #
3650   //                         HISTOS FOR TIGHT CUTS                                                 #
3651   //                                                                                               #
3652   //################################################################################################
3653
3654   //############ TIGHT CUTS SIGNAL HISTOGRAMS ###############
3655   //
3656   // ####### global properties histo ############
3657
3658   TH2F *hCPtaVSd0d0TGHCsign=new TH2F("hCPtaVSd0d0TGHCsign","hCPtaVSd0d0_TightCuts_Signal",1000,-100000.,100000.,100,-1.,1.);
3659   TH1F *hSecVtxZTGHCsign=new TH1F("hSecVtxZTGHCsign","hSecVtxZ_TightCuts_Signal",1000,-8.,8.);
3660   TH1F *hSecVtxXTGHCsign=new TH1F("hSecVtxXTGHCsign","hSecVtxX_TightCuts_Signal",1000,-3000.,3000.);
3661   TH1F *hSecVtxYTGHCsign=new TH1F("hSecVtxYTGHCsign","hSecVtxY_TightCuts_Signal",1000,-3000.,3000.);
3662   TH2F *hSecVtxXYTGHCsign=new TH2F("hSecVtxXYTGHCsign","hSecVtxXY_TightCuts_Signal",1000,-3000.,3000.,1000,-3000.,3000.);
3663   TH1F *hSecVtxPhiTGHCsign=new TH1F("hSecVtxPhiTGHCsign","hSecVtxPhi_TightCuts_Signal",180,-180.1,180.1);
3664   TH1F *hd0singlTrackTGHCsign=new TH1F("hd0singlTrackTGHCsign","hd0singlTrackTightCuts_Signal",1000,-5000.,5000.);
3665   TH1F *hCPtaTGHCsign=new TH1F("hCPtaTGHCsign","hCPta_TightCuts_Signal",100,-1.,1.);
3666   TH1F *hd0xd0TGHCsign=new TH1F("hd0xd0TGHCsign","hd0xd0_TightCuts_Signal",1000,-100000.,100000.);
3667   TH1F *hMassTrueTGHCsign=new TH1F("hMassTrueTGHCsign","D^{0} MC inv. Mass Tight Cuts Signal(All momenta)",600,1.600,2.200);
3668   TH1F *hMassTGHCsign=new TH1F("hMassTGHCsign","D^{0} inv. Mass Tight Cuts Signal (All momenta)",600,1.600,2.200);
3669   hMassTGHCsign->Sumw2();
3670   TH1F *hMassTrueTGHCsignPM=new TH1F("hMassTrueTGHCsignPM","D^{0} MC inv. Mass Tight Cuts Signal, Mass Peak. (All momenta)",600,1.600,2.200);
3671   TH1F *hMassTGHCsignPM=new TH1F("hMassTGHCsignPM","D^{0} inv. Mass Tight Cuts Signal (All momenta), MassPeak",600,1.600,2.200);
3672   hMassTGHCsignPM->Sumw2();
3673   TH1F *hMassTrueTGHCsignSB=new TH1F("hMassTrueTGHCsignSB","D^{0} MC inv. Mass in Side Bands Tight Cuts Signal(All momenta)",600,1.600,2.200);
3674   TH1F *hMassTGHCsignSB=new TH1F("hMassTGHCsignSB","D^{0} inv. Mass in Side Bands Tight Cuts Signal (All momenta)",600,1.600,2.200);
3675   hMassTGHCsignSB->Sumw2();
3676
3677   flistTghCutsSignal->Add(hCPtaVSd0d0TGHCsign);
3678   flistTghCutsSignal->Add(hSecVtxZTGHCsign);
3679   flistTghCutsSignal->Add(hSecVtxYTGHCsign);
3680   flistTghCutsSignal->Add(hSecVtxXTGHCsign);
3681   flistTghCutsSignal->Add(hSecVtxXYTGHCsign);
3682   flistTghCutsSignal->Add(hSecVtxPhiTGHCsign);
3683   flistTghCutsSignal->Add(hd0singlTrackTGHCsign);
3684   flistTghCutsSignal->Add(hCPtaTGHCsign);
3685   flistTghCutsSignal->Add(hd0xd0TGHCsign);
3686   flistTghCutsSignal->Add(hMassTrueTGHCsign);
3687   flistTghCutsSignal->Add(hMassTGHCsign);
3688   flistTghCutsSignal->Add(hMassTrueTGHCsignPM);
3689   flistTghCutsSignal->Add(hMassTGHCsignPM);
3690   flistTghCutsSignal->Add(hMassTrueTGHCsignSB);
3691   flistTghCutsSignal->Add(hMassTGHCsignSB);
3692
3693
3694
3695
3696
3697
3698  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
3699   TH1F *hdcaTGHCsign=new TH1F("hdcaTGHCsign","hdca_TightCuts_Signal",100,0.,1000.);
3700   hdcaTGHCsign->SetXTitle("dca   [#mum]");
3701   hdcaTGHCsign->SetYTitle("Entries");
3702   TH1F *hcosthetastarTGHCsign=new TH1F("hcosthetastarTGHCsign","hCosThetaStar_TightCuts_Signal",50,-1.,1.);
3703   hcosthetastarTGHCsign->SetXTitle("cos #theta^{*}");
3704   hcosthetastarTGHCsign->SetYTitle("Entries");
3705   TH1F *hptD0TGHCsign=new TH1F("hptD0TGHCsign","D^{0} transverse momentum distribution",34,ptbinsD0arr);
3706   hptD0TGHCsign->SetXTitle("p_{t}  [GeV/c]");
3707   hptD0TGHCsign->SetYTitle("Entries");
3708   TH1F *hptD0VsMaxPtTGHCsign=new TH1F("hptD0VsMaxPtTGHCsign","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
3709   TH2F *hptD0PTallsqrtTGHCsign=new TH2F("hptD0PTallsqrtTGHCsign","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
3710   TH2F *hptD0PTallTGHCsign=new TH2F("hptD0PTallTGHCsign","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
3711   TH2F *hptD0vsptBTGHCsign=new TH2F("hptD0vsptBTGHCsign","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3712   TH2F *hpD0vspBTGHCsign=new TH2F("hpD0vspBTGHCsign","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3713   TH2F *hptD0vsptcquarkTGHCsign=new TH2F("hptD0vsptcquarkTGHCsign","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3714   TH2F *hpD0vspcquarkTGHCsign=new TH2F("hpD0vspcquarkTGHCsign","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
3715   flistTghCutsSignal->Add(hdcaTGHCsign);
3716   flistTghCutsSignal->Add(hcosthetastarTGHCsign);
3717   flistTghCutsSignal->Add(hptD0TGHCsign);
3718   flistTghCutsSignal->Add(hptD0VsMaxPtTGHCsign);
3719   flistTghCutsSignal->Add(hptD0PTallsqrtTGHCsign);
3720   flistTghCutsSignal->Add(hptD0PTallTGHCsign);
3721   flistTghCutsSignal->Add(hptD0vsptBTGHCsign);
3722   flistTghCutsSignal->Add(hpD0vspBTGHCsign);
3723   flistTghCutsSignal->Add(hptD0vsptcquarkTGHCsign);
3724   flistTghCutsSignal->Add(hpD0vspcquarkTGHCsign);
3725  
3726   TH1F *hd0zD0ptTGHCsign;
3727   TH1F *hInvMassD0TGHCsign,*hInvMassD0barTGHCsign;
3728   TH2F *hInvMassPtTGHCsign=new TH2F("hInvMassPtTGHCsign","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
3729  THnSparseF *hSparseTGHCsign=new THnSparseF("hSparseTGHCsign","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
3730   hSparseTGHCsign->SetBinEdges(0,massbins);
3731   hSparseTGHCsign->SetBinEdges(1,massbins);
3732   hSparseTGHCsign->SetBinEdges(2,ptbinsForNsparse);
3733   hSparseTGHCsign->SetBinEdges(3,impparbins);
3734   hSparseTGHCsign->SetBinEdges(4,massHypoBins); 
3735   flistTghCutsSignal->Add(hSparseTGHCsign);
3736   TH1F *hetaTGHCsign;
3737   TH1F *hCosPDPBTGHCsign;
3738   TH1F *hCosPcPDTGHCsign;
3739   flistTghCutsSignal->Add(hInvMassPtTGHCsign);
3740 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
3741   TH2F *hd0D0VSd0xd0TGHCsignpt;
3742   TH2F *hangletracksVSd0xd0TGHCsignpt;
3743   TH2F *hangletracksVSd0D0TGHCsignpt;
3744   TH1F *hd0xd0TGHCsignpt;
3745
3746   TH2F *hTOFpidTGHCsign=new TH2F("hTOFpidTGHCsign","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
3747   flistTghCutsSignal->Add(hTOFpidTGHCsign);
3748
3749   for(Int_t i=0;i<fnbins;i++){
3750     // Printf("INSIDE FIRST LOOP FOR  TIGHT CUTS HISTO CREATION %d\n", fnbins);
3751     namehist="hd0zD0ptTGHCsign_pt";
3752     namehist+=i;
3753     titlehist="d0(z) Tight Cuts Signal ptbin=";
3754     titlehist+=i;
3755     hd0zD0ptTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
3756     hd0zD0ptTGHCsign->SetXTitle("d_{0}(z)    [#mum]");
3757     hd0zD0ptTGHCsign->SetYTitle("Entries");
3758     flistTghCutsSignal->Add(hd0zD0ptTGHCsign);
3759
3760     namehist="hInvMassD0TGHCsign_pt";
3761     namehist+=i;
3762     titlehist="Invariant Mass Tight Cuts Signal ptbin=";
3763     titlehist+=i;
3764     hInvMassD0TGHCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
3765     hInvMassD0TGHCsign->SetXTitle("Invariant Mass    [GeV]");
3766     hInvMassD0TGHCsign->SetYTitle("Entries");
3767     flistTghCutsSignal->Add(hInvMassD0TGHCsign);
3768
3769     namehist="hInvMassD0barTGHCsign_pt";
3770     namehist+=i;
3771     titlehist="Invariant Mass D0bar Tight Cuts Signal ptbin=";
3772     titlehist+=i;
3773     hInvMassD0barTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
3774     hInvMassD0barTGHCsign->SetXTitle("Invariant Mass    [GeV]");
3775     hInvMassD0barTGHCsign->SetYTitle("Entries");
3776     flistTghCutsSignal->Add(hInvMassD0barTGHCsign);
3777
3778
3779     namehist="hetaTGHCsign_pt";
3780     namehist+=i;
3781     titlehist="eta Tight Cuts Signal ptbin=";
3782     titlehist+=i;
3783     hetaTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
3784     hetaTGHCsign->SetXTitle("Pseudorapidity");
3785     hetaTGHCsign->SetYTitle("Entries");
3786     flistTghCutsSignal->Add(hetaTGHCsign);
3787
3788     namehist="hCosPDPBTGHCsign_pt";
3789     namehist+=i;
3790     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
3791     titlehist+=i;
3792     hCosPDPBTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
3793     hCosPDPBTGHCsign->SetXTitle("Cosine between D0 momentum and B momentum");
3794     hCosPDPBTGHCsign->SetYTitle("Entries");
3795     flistTghCutsSignal->Add(hCosPDPBTGHCsign);
3796
3797     namehist="hCosPcPDTGHCsign_pt";
3798     namehist+=i;
3799     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
3800     titlehist+=i;
3801     hCosPcPDTGHCsign=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
3802     hCosPcPDTGHCsign->SetXTitle("Cosine between c quark momentum and D0 momentum");
3803     hCosPcPDTGHCsign->SetYTitle("Entries");
3804     flistTghCutsSignal->Add(hCosPcPDTGHCsign);
3805    
3806  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
3807     namehist="hd0xd0TGHCsign_pt";
3808     namehist+=i;
3809     titlehist="d0xd0 Tight Cuts Signal ptbin=";
3810     titlehist+=i;
3811     hd0xd0TGHCsignpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
3812     hd0xd0TGHCsignpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
3813     hd0xd0TGHCsignpt->SetYTitle("Entries");
3814     flistTghCutsSignal->Add(hd0xd0TGHCsignpt);
3815
3816
3817     namehist="hd0D0VSd0xd0TGHCsign_pt";
3818     namehist+=i;
3819     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Signal ptbin=";
3820     titlehist+=i;
3821     hd0D0VSd0xd0TGHCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
3822     hd0D0VSd0xd0TGHCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
3823     hd0D0VSd0xd0TGHCsignpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
3824     flistTghCutsSignal->Add(hd0D0VSd0xd0TGHCsignpt);
3825     
3826     
3827     namehist="hangletracksVSd0xd0TGHCsign_pt";
3828     namehist+=i;
3829     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Signal ptbin=";
3830     titlehist+=i;
3831     hangletracksVSd0xd0TGHCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
3832     hangletracksVSd0xd0TGHCsignpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
3833     hangletracksVSd0xd0TGHCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
3834     flistTghCutsSignal->Add(hangletracksVSd0xd0TGHCsignpt);
3835     
3836
3837     namehist="hangletracksVSd0D0TGHCsign_pt";
3838     namehist+=i;
3839     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts Signal ptbin=";
3840     titlehist+=i;
3841     hangletracksVSd0D0TGHCsignpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
3842     hangletracksVSd0D0TGHCsignpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
3843     hangletracksVSd0D0TGHCsignpt->SetYTitle(" angle between K and #p tracks  [rad]");
3844     flistTghCutsSignal->Add(hangletracksVSd0D0TGHCsignpt);
3845
3846   }
3847   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
3848   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3849
3850
3851
3852
3853
3854
3855
3856
3857   // ####### d0 D0 histos ############
3858   TH1F *hd0D0TGHCsignPM = new TH1F("hd0D0TGHCsignPM","D^{0} impact par. plot , Tight Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
3859   hd0D0TGHCsignPM->SetXTitle("Impact parameter [#mum]");
3860   hd0D0TGHCsignPM->SetYTitle("Entries");
3861
3862   TH1F *hd0D0VtxTrueTGHCsignPM = new TH1F("hd0D0VtxTrueTGHCsignPM","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
3863   hd0D0VtxTrueTGHCsignPM->SetXTitle("Impact parameter [#mum]");
3864   hd0D0VtxTrueTGHCsignPM->SetYTitle("Entries");
3865
3866   TH1F *hMCd0D0TGHCsignPM = new TH1F("hMCd0D0TGHCsignPM","D^{0} impact par. plot, Tight Cuts, Signal,Mass Peak  (All momenta)",1000,-1000.,1000.);
3867   hMCd0D0TGHCsignPM->SetXTitle("MC Impact parameter [#mum]");
3868   hMCd0D0TGHCsignPM->SetYTitle("Entries");
3869
3870   TH1F *hd0D0TGHCsignSB = new TH1F("hd0D0TGHCsignSB","D^{0} impact par. plot , Tight Cuts ,Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
3871   hd0D0TGHCsignSB->SetXTitle("Impact parameter [#mum]");
3872   hd0D0TGHCsignSB->SetYTitle("Entries");
3873
3874   TH1F *hd0D0VtxTrueTGHCsignSB = new TH1F("hd0D0VtxTrueTGHCsignSB","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, Signal,Mass Peak (All momenta)",1000,-1000.,1000.);
3875   hd0D0VtxTrueTGHCsignSB->SetXTitle("Impact parameter [#mum]");
3876   hd0D0VtxTrueTGHCsignSB->SetYTitle("Entries");
3877
3878   TH1F *hMCd0D0TGHCsignSB = new TH1F("hMCd0D0TGHCsignSB","D^{0} impact par. plot, Tight Cuts, Signal,Mass Peak  (All momenta)",1000,-1000.,1000.);
3879   hMCd0D0TGHCsignSB->SetXTitle("MC Impact parameter [#mum]");
3880   hMCd0D0TGHCsignSB->SetYTitle("Entries");
3881
3882   flistTghCutsSignal->Add(hd0D0TGHCsignPM);
3883   flistTghCutsSignal->Add(hd0D0VtxTrueTGHCsignPM);
3884   flistTghCutsSignal->Add(hMCd0D0TGHCsignPM);
3885   flistTghCutsSignal->Add(hd0D0TGHCsignSB);
3886   flistTghCutsSignal->Add(hd0D0VtxTrueTGHCsignSB);
3887   flistTghCutsSignal->Add(hMCd0D0TGHCsignSB);
3888   
3889   TH1F *hd0D0ptTGHCsignPM;
3890   TH1F *hMCd0D0ptTGHCsignPM;
3891   TH1F *hd0D0VtxTrueptTGHCsignPM;
3892   TH1F *hd0D0ptTGHCsignSB;
3893   TH1F *hMCd0D0ptTGHCsignSB;
3894   TH1F *hd0D0VtxTrueptTGHCsignSB;
3895   namehist="hd0D0ptTGHCsign_";
3896   titlehist="D^{0} impact par. plot, Tight Cuts, Signal, ";
3897   for(Int_t i=0;i<fnbins;i++){
3898     strnamept=namehist;
3899     strnamept.Append("PkMss_pt");
3900     strnamept+=i;
3901
3902     strtitlept=titlehist;
3903     strtitlept.Append(" Mass Peak, ");
3904     strtitlept+=fptbins[i];
3905     strtitlept.Append("<= pt <");
3906     strtitlept+=fptbins[i+1];
3907     strtitlept.Append(" [GeV/c]");
3908     
3909     hd0D0ptTGHCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3910     hd0D0ptTGHCsignPM->SetXTitle("Impact parameter [#mum] ");
3911     hd0D0ptTGHCsignPM->SetYTitle("Entries");
3912     flistTghCutsSignal->Add(hd0D0ptTGHCsignPM);
3913
3914     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3915     hMCd0D0ptTGHCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3916     hMCd0D0ptTGHCsignPM->SetXTitle("MC Impact parameter [#mum] ");
3917     hMCd0D0ptTGHCsignPM->SetYTitle("Entries");
3918     flistTghCutsSignal->Add(hMCd0D0ptTGHCsignPM);
3919  
3920
3921     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3922     hd0D0VtxTrueptTGHCsignPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3923     hd0D0VtxTrueptTGHCsignPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3924     hd0D0VtxTrueptTGHCsignPM->SetYTitle("Entries");
3925     flistTghCutsSignal->Add(hd0D0VtxTrueptTGHCsignPM);
3926     
3927     strnamept=namehist;
3928     strnamept.Append("SBMss_pt");
3929     strnamept+=i;
3930
3931     strtitlept=titlehist;
3932     strtitlept.Append(" Side Bands, ");
3933     strtitlept+=fptbins[i];
3934     strtitlept.Append("<= pt <");
3935     strtitlept+=fptbins[i+1];
3936     strtitlept.Append(" [GeV/c]");
3937     
3938     hd0D0ptTGHCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3939     hd0D0ptTGHCsignSB->SetXTitle("Impact parameter [#mum] ");
3940     hd0D0ptTGHCsignSB->SetYTitle("Entries");
3941     flistTghCutsSignal->Add(hd0D0ptTGHCsignSB);
3942
3943     strnamept.ReplaceAll("hd0D0","hMCd0D0");
3944     hMCd0D0ptTGHCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3945     hMCd0D0ptTGHCsignSB->SetXTitle("MC Impact parameter [#mum] ");
3946     hMCd0D0ptTGHCsignSB->SetYTitle("Entries");
3947     flistTghCutsSignal->Add(hMCd0D0ptTGHCsignSB);
3948
3949     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
3950     hd0D0VtxTrueptTGHCsignSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
3951     hd0D0VtxTrueptTGHCsignSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
3952     hd0D0VtxTrueptTGHCsignSB->SetYTitle("Entries");
3953     flistTghCutsSignal->Add(hd0D0VtxTrueptTGHCsignSB);
3954   }
3955
3956
3957   //############ TIGHT CUTS BACKGROUND HISTOGRAMS ###########
3958   //
3959   //   ######## global properties histos #######
3960   TH2F *hCPtaVSd0d0TGHCback=new TH2F("hCPtaVSd0d0TGHCback","hCPtaVSd0d0_TightCuts_Background",1000,-100000.,100000.,100,-1.,1.);
3961   TH1F *hSecVtxZTGHCback=new TH1F("hSecVtxZTGHCback","hSecVtxZ_TightCuts_Background",1000,-8.,8.);
3962   TH1F *hSecVtxXTGHCback=new TH1F("hSecVtxXTGHCback","hSecVtxX_TightCuts_Background",1000,-3000.,3000.);
3963   TH1F *hSecVtxYTGHCback=new TH1F("hSecVtxYTGHCback","hSecVtxY_TightCuts_Background",1000,-3000.,3000.);
3964   TH2F *hSecVtxXYTGHCback=new TH2F("hSecVtxXYTGHCback","hSecVtxXY_TightCuts_Background",1000,-3000.,3000.,1000,-3000.,3000.);
3965   TH1F *hSecVtxPhiTGHCback=new TH1F("hSecVtxPhiTGHCback","hSecVtxPhi_TightCuts_Background",180,-180.1,180.1);
3966   TH1F *hd0singlTrackTGHCback=new TH1F("hd0singlTrackTGHCback","hd0singlTrackTightCuts_Back",1000,-5000.,5000.);
3967   TH1F *hCPtaTGHCback=new TH1F("hCPtaTGHCback","hCPta_TightCuts_Background",100,-1.,1.);
3968   TH1F *hd0xd0TGHCback=new TH1F("hd0xd0TGHCback","hd0xd0_TightCuts_Background",1000,-100000.,100000.);
3969   TH1F *hMassTrueTGHCback=new TH1F("hMassTrueTGHCback","D^{0} MC inv. Mass Tight Cuts Background(All momenta)",600,1.600,2.200);
3970   TH1F *hMassTGHCback=new TH1F("hMassTGHCback","D^{0} inv. Mass Tight Cuts Background (All momenta)",600,1.600,2.200);
3971   hMassTGHCback->Sumw2();
3972   TH1F *hMassTrueTGHCbackPM=new TH1F("hMassTrueTGHCbackPM","D^{0} MC inv. Mass Tight Cuts Background, Mass Peak. (All momenta)",600,1.600,2.200);
3973   TH1F *hMassTGHCbackPM=new TH1F("hMassTGHCbackPM","D^{0} inv. Mass Tight Cuts Background (All momenta), MassPeak",600,1.600,2.200);
3974   hMassTGHCbackPM->Sumw2();
3975   TH1F *hMassTrueTGHCbackSB=new TH1F("hMassTrueTGHCbackSB","D^{0} MC inv. Mass in Side Bands Tight Cuts Backgrround(All momenta)",600,1.600,2.200);
3976   TH1F *hMassTGHCbackSB=new TH1F("hMassTGHCbackSB","D^{0} inv. Mass in Side Bands Tight Cuts Background (All momenta)",600,1.600,2.200);
3977   hMassTGHCbackSB->Sumw2();
3978
3979   flistTghCutsBack->Add(hCPtaVSd0d0TGHCback);
3980   flistTghCutsBack->Add(hSecVtxZTGHCback);
3981   flistTghCutsBack->Add(hSecVtxYTGHCback);
3982   flistTghCutsBack->Add(hSecVtxXTGHCback);
3983   flistTghCutsBack->Add(hSecVtxXYTGHCback);
3984   flistTghCutsBack->Add(hSecVtxPhiTGHCback);
3985   flistTghCutsBack->Add(hd0singlTrackTGHCback);
3986   flistTghCutsBack->Add(hCPtaTGHCback);
3987   flistTghCutsBack->Add(hd0xd0TGHCback);
3988   flistTghCutsBack->Add(hMassTrueTGHCback);
3989   flistTghCutsBack->Add(hMassTGHCback);
3990   flistTghCutsBack->Add(hMassTrueTGHCbackPM);
3991   flistTghCutsBack->Add(hMassTGHCbackPM);
3992   flistTghCutsBack->Add(hMassTrueTGHCbackSB);
3993   flistTghCutsBack->Add(hMassTGHCbackSB);
3994
3995
3996
3997
3998
3999
4000
4001  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
4002   TH1F *hdcaTGHCback=new TH1F("hdcaTGHCback","hdca_TightCuts_Backgr",100,0.,1000.);
4003   hdcaTGHCback->SetXTitle("dca   [#mum]");
4004   hdcaTGHCback->SetYTitle("Entries");
4005   TH1F *hcosthetastarTGHCback=new TH1F("hcosthetastarTGHCback","hCosThetaStar_TightCuts_Backgr",50,-1.,1.);
4006   hcosthetastarTGHCback->SetXTitle("cos #theta^{*}");
4007   hcosthetastarTGHCback->SetYTitle("Entries");
4008   TH1F *hptD0TGHCback=new TH1F("hptD0TGHCback","D^{0} transverse momentum distribution",34,ptbinsD0arr);
4009   hptD0TGHCback->SetXTitle("p_{t}  [GeV/c]");
4010   hptD0TGHCback->SetYTitle("Entries");
4011   TH1F *hptD0VsMaxPtTGHCback=new TH1F("hptD0VsMaxPtTGHCback","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
4012   TH2F *hptD0PTallsqrtTGHCback=new TH2F("hptD0PTallsqrtTGHCback","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
4013   TH2F *hptD0PTallTGHCback=new TH2F("hptD0PTallTGHCback","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
4014   TH2F *hptD0vsptBTGHCback=new TH2F("hptD0vsptBTGHCback","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4015   TH2F *hpD0vspBTGHCback=new TH2F("hpD0vspBTGHCback","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4016   TH2F *hptD0vsptcquarkTGHCback=new TH2F("hptD0vsptcquarkTGHCback","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4017   TH2F *hpD0vspcquarkTGHCback=new TH2F("hpD0vspcquarkTGHCback","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4018   flistTghCutsBack->Add(hdcaTGHCback);
4019   flistTghCutsBack->Add(hcosthetastarTGHCback);
4020   flistTghCutsBack->Add(hptD0TGHCback);
4021   flistTghCutsBack->Add(hptD0VsMaxPtTGHCback);
4022   flistTghCutsBack->Add(hptD0PTallsqrtTGHCback);
4023   flistTghCutsBack->Add(hptD0PTallTGHCback);
4024   flistTghCutsBack->Add(hptD0vsptBTGHCback);
4025   flistTghCutsBack->Add(hpD0vspBTGHCback);
4026   flistTghCutsBack->Add(hptD0vsptcquarkTGHCback);
4027   flistTghCutsBack->Add(hpD0vspcquarkTGHCback);
4028  
4029   TH1F *hd0zD0ptTGHCback;
4030   TH1F *hInvMassD0TGHCback,*hInvMassD0barTGHCback;
4031   TH2F *hInvMassPtTGHCback=new TH2F("hInvMassPtTGHCback","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
4032  THnSparseF *hSparseTGHCback=new THnSparseF("hSparseTGHCback","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
4033   hSparseTGHCback->SetBinEdges(0,massbins);
4034   hSparseTGHCback->SetBinEdges(1,massbins);
4035   hSparseTGHCback->SetBinEdges(2,ptbinsForNsparse);
4036   hSparseTGHCback->SetBinEdges(3,impparbins);
4037   hSparseTGHCback->SetBinEdges(4,massHypoBins); 
4038   flistTghCutsBack->Add(hSparseTGHCback);
4039   TH1F *hetaTGHCback;
4040   TH1F *hCosPDPBTGHCback;
4041   TH1F *hCosPcPDTGHCback;
4042   flistTghCutsBack->Add(hInvMassPtTGHCback);
4043 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4044   TH2F *hd0D0VSd0xd0TGHCbackpt;
4045   TH2F *hangletracksVSd0xd0TGHCbackpt;
4046   TH2F *hangletracksVSd0D0TGHCbackpt;
4047   TH1F *hd0xd0TGHCbackpt;
4048
4049   TH2F *hTOFpidTGHCback=new TH2F("hTOFpidTGHCback","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
4050   flistTghCutsBack->Add(hTOFpidTGHCback);
4051
4052
4053   for(Int_t i=0;i<fnbins;i++){
4054     namehist="hd0zD0ptTGHCback_pt";
4055     namehist+=i;
4056     titlehist="d0(z) Tight Cuts Backgrm ptbin=";
4057     titlehist+=i;
4058     hd0zD0ptTGHCback=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
4059     hd0zD0ptTGHCback->SetXTitle("d_{0}(z)    [#mum]");
4060     hd0zD0ptTGHCback->SetYTitle("Entries");
4061     flistTghCutsBack->Add(hd0zD0ptTGHCback);
4062
4063     namehist="hInvMassD0TGHCback_pt";
4064     namehist+=i;
4065     titlehist="Invariant Mass Tight Cuts Backgr ptbin=";
4066     titlehist+=i;
4067     hInvMassD0TGHCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4068     hInvMassD0TGHCback->SetXTitle("Invariant Mass    [GeV]");
4069     hInvMassD0TGHCback->SetYTitle("Entries");
4070     flistTghCutsBack->Add(hInvMassD0TGHCback);
4071
4072     namehist="hInvMassD0barTGHCback_pt";
4073     namehist+=i;
4074     titlehist="Invariant Mass D0bar Tight Cuts Back ptbin=";
4075     titlehist+=i;
4076     hInvMassD0barTGHCback=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4077     hInvMassD0barTGHCback->SetXTitle("Invariant Mass    [GeV]");
4078     hInvMassD0barTGHCback->SetYTitle("Entries");
4079     flistTghCutsBack->Add(hInvMassD0barTGHCback);
4080
4081     namehist="hetaTGHCback_pt";
4082     namehist+=i;
4083     titlehist="eta Tight Cuts Backgr ptbin=";
4084     titlehist+=i;
4085     hetaTGHCback=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
4086     hetaTGHCback->SetXTitle("Pseudorapidity");
4087     hetaTGHCback->SetYTitle("Entries");
4088     flistTghCutsBack->Add(hetaTGHCback);
4089
4090     namehist="hCosPDPBTGHCback_pt";
4091     namehist+=i;
4092     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
4093     titlehist+=i;
4094     hCosPDPBTGHCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4095     hCosPDPBTGHCback->SetXTitle("Cosine between D0 momentum and B momentum");
4096     hCosPDPBTGHCback->SetYTitle("Entries");
4097     flistTghCutsBack->Add(hCosPDPBTGHCback);
4098
4099     namehist="hCosPcPDTGHCback_pt";
4100     namehist+=i;
4101     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
4102     titlehist+=i;
4103     hCosPcPDTGHCback=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4104     hCosPcPDTGHCback->SetXTitle("Cosine between c quark momentum and D0 momentum");
4105     hCosPcPDTGHCback->SetYTitle("Entries");
4106     flistTghCutsBack->Add(hCosPcPDTGHCback);
4107
4108  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4109     namehist="hd0xd0TGHCback_pt";
4110     namehist+=i;
4111     titlehist="d0xd0 Tight Cuts Back ptbin=";
4112     titlehist+=i;
4113     hd0xd0TGHCbackpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
4114     hd0xd0TGHCbackpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
4115     hd0xd0TGHCbackpt->SetYTitle("Entries");
4116     flistTghCutsBack->Add(hd0xd0TGHCbackpt);
4117
4118
4119     namehist="hd0D0VSd0xd0TGHCback_pt";
4120     namehist+=i;
4121     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Back ptbin=";
4122     titlehist+=i;
4123     hd0D0VSd0xd0TGHCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
4124     hd0D0VSd0xd0TGHCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
4125     hd0D0VSd0xd0TGHCbackpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
4126     flistTghCutsBack->Add(hd0D0VSd0xd0TGHCbackpt);
4127     
4128     
4129     namehist="hangletracksVSd0xd0TGHCback_pt";
4130     namehist+=i;
4131     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Back ptbin=";
4132     titlehist+=i;
4133     hangletracksVSd0xd0TGHCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
4134     hangletracksVSd0xd0TGHCbackpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
4135     hangletracksVSd0xd0TGHCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
4136     flistTghCutsBack->Add(hangletracksVSd0xd0TGHCbackpt);
4137     
4138
4139     namehist="hangletracksVSd0D0TGHCback_pt";
4140     namehist+=i;
4141     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts Back ptbin=";
4142     titlehist+=i;
4143     hangletracksVSd0D0TGHCbackpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
4144     hangletracksVSd0D0TGHCbackpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
4145     hangletracksVSd0D0TGHCbackpt->SetYTitle(" angle between K and #p tracks  [rad]");
4146     flistTghCutsBack->Add(hangletracksVSd0D0TGHCbackpt);
4147
4148     
4149   }
4150   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
4151   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4152
4153
4154
4155
4156   // ####### d0 D0 histos ############
4157   
4158  TH1F *hd0D0TGHCbackPM = new TH1F("hd0D0TGHCbackPM","D^{0} impact par. plot , Tight Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
4159   hd0D0TGHCbackPM->SetXTitle("Impact parameter [#mum]");
4160   hd0D0TGHCbackPM->SetYTitle("Entries");
4161
4162   TH1F *hd0D0VtxTrueTGHCbackPM = new TH1F("hd0D0VtxTrueTGHCbackPM","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, Background,Mass Peak (All momenta)",1000,-1000.,1000.);
4163   hd0D0VtxTrueTGHCbackPM->SetXTitle("Impact parameter [#mum]");
4164   hd0D0VtxTrueTGHCbackPM->SetYTitle("Entries");
4165
4166   TH1F *hMCd0D0TGHCbackPM = new TH1F("hMCd0D0TGHCbackPM","D^{0} impact par. plot, Tight Cuts, Background,Mass Peak  (All momenta)",1000,-1000.,1000.);
4167   hMCd0D0TGHCbackPM->SetXTitle("MC Impact parameter [#mum]");
4168   hMCd0D0TGHCbackPM->SetYTitle("Entries");
4169
4170   TH1F *hd0D0TGHCbackSB = new TH1F("hd0D0TGHCbackSB","D^{0} impact par. plot , Tight Cuts ,Background,Mass Peak (All momenta)",1000,-1000.,1000.);
4171   hd0D0TGHCbackSB->SetXTitle("Impact parameter [#mum]");
4172   hd0D0TGHCbackSB->SetYTitle("Entries");
4173
4174   TH1F *hd0D0VtxTrueTGHCbackSB = new TH1F("hd0D0VtxTrueTGHCbackSB","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, Background,Mass Peak (All momenta)",1000,-1000.,1000.);
4175   hd0D0VtxTrueTGHCbackSB->SetXTitle("Impact parameter [#mum]");
4176   hd0D0VtxTrueTGHCbackSB->SetYTitle("Entries");
4177
4178   TH1F *hMCd0D0TGHCbackSB = new TH1F("hMCd0D0TGHCbackSB","D^{0} impact par. plot, Tight Cuts, Background,Mass Peak  (All momenta)",1000,-1000.,1000.);
4179   hMCd0D0TGHCbackSB->SetXTitle("MC Impact parameter [#mum]");
4180   hMCd0D0TGHCbackSB->SetYTitle("Entries");
4181
4182   flistTghCutsBack->Add(hd0D0TGHCbackPM);
4183   flistTghCutsBack->Add(hd0D0VtxTrueTGHCbackPM);
4184   flistTghCutsBack->Add(hMCd0D0TGHCbackPM);
4185   flistTghCutsBack->Add(hd0D0TGHCbackSB);
4186   flistTghCutsBack->Add(hd0D0VtxTrueTGHCbackSB);
4187   flistTghCutsBack->Add(hMCd0D0TGHCbackSB);
4188   
4189   TH1F *hd0D0ptTGHCbackPM;
4190   TH1F *hMCd0D0ptTGHCbackPM;
4191   TH1F *hd0D0VtxTrueptTGHCbackPM;
4192   TH1F *hd0D0ptTGHCbackSB;
4193   TH1F *hMCd0D0ptTGHCbackSB;
4194   TH1F *hd0D0VtxTrueptTGHCbackSB;
4195   namehist="hd0D0ptTGHCback_";
4196   titlehist="D^{0} impact par. plot, Tight Cuts, Background, ";
4197   for(Int_t i=0;i<fnbins;i++){
4198     strnamept=namehist;
4199     strnamept.Append("PkMss_pt");
4200     strnamept+=i;
4201
4202     strtitlept=titlehist;
4203     strtitlept.Append(" Mass Peak, ");
4204     strtitlept+=fptbins[i];
4205     strtitlept.Append("<= pt <");
4206     strtitlept+=fptbins[i+1];
4207     strtitlept.Append(" [GeV/c]");
4208     
4209     hd0D0ptTGHCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4210     hd0D0ptTGHCbackPM->SetXTitle("Impact parameter [#mum] ");
4211     hd0D0ptTGHCbackPM->SetYTitle("Entries");
4212     flistTghCutsBack->Add(hd0D0ptTGHCbackPM);
4213
4214     strnamept.ReplaceAll("hd0D0","hMCd0D0");
4215     hMCd0D0ptTGHCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4216     hMCd0D0ptTGHCbackPM->SetXTitle("MC Impact parameter [#mum] ");
4217     hMCd0D0ptTGHCbackPM->SetYTitle("Entries");
4218     flistTghCutsBack->Add(hMCd0D0ptTGHCbackPM);
4219  
4220
4221     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
4222     hd0D0VtxTrueptTGHCbackPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4223     hd0D0VtxTrueptTGHCbackPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
4224     hd0D0VtxTrueptTGHCbackPM->SetYTitle("Entries");
4225     flistTghCutsBack->Add(hd0D0VtxTrueptTGHCbackPM);
4226     
4227     strnamept=namehist;
4228     strnamept.Append("SBMss_pt");
4229     strnamept+=i;
4230
4231     strtitlept=titlehist;
4232     strtitlept.Append(" Side Bands, ");
4233     strtitlept+=fptbins[i];
4234     strtitlept.Append("<= pt <");
4235     strtitlept+=fptbins[i+1];
4236     strtitlept.Append(" [GeV/c]");
4237     
4238     hd0D0ptTGHCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4239     hd0D0ptTGHCbackSB->SetXTitle("Impact parameter [#mum] ");
4240     hd0D0ptTGHCbackSB->SetYTitle("Entries");
4241     flistTghCutsBack->Add(hd0D0ptTGHCbackSB);
4242
4243     strnamept.ReplaceAll("hd0D0","hMCd0D0");
4244     hMCd0D0ptTGHCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4245     hMCd0D0ptTGHCbackSB->SetXTitle("MC Impact parameter [#mum] ");
4246     hMCd0D0ptTGHCbackSB->SetYTitle("Entries");
4247     flistTghCutsBack->Add(hMCd0D0ptTGHCbackSB);
4248
4249     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
4250     hd0D0VtxTrueptTGHCbackSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4251     hd0D0VtxTrueptTGHCbackSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
4252     hd0D0VtxTrueptTGHCbackSB->SetYTitle("Entries");
4253     flistTghCutsBack->Add(hd0D0VtxTrueptTGHCbackSB);
4254   }
4255
4256
4257
4258  //############ TIGHT CUTS FROMB HISTOGRAMS ###########
4259   //
4260   //#######  global properties histos
4261
4262   TH2F *hCPtaVSd0d0TGHCfromB=new TH2F("hCPtaVSd0d0TGHCfromB","hCPtaVSd0d0_TightCuts_FromB",1000,-100000.,100000.,100,-1.,1.);
4263   TH1F *hSecVtxZTGHCfromB=new TH1F("hSecVtxZTGHCfromB","hSecVtxZ_TightCuts_FromB",1000,-8.,8.);
4264   TH1F *hSecVtxXTGHCfromB=new TH1F("hSecVtxXTGHCfromB","hSecVtxX_TightCuts_FromB",1000,-3000.,3000.);
4265   TH1F *hSecVtxYTGHCfromB=new TH1F("hSecVtxYTGHCfromB","hSecVtxY_TightCuts_FromB",1000,-3000.,3000.);
4266   TH2F *hSecVtxXYTGHCfromB=new TH2F("hSecVtxXYTGHCfromB","hSecVtxXY_TightCuts_FromB",1000,-3000.,3000.,1000,-3000.,3000.);
4267   TH1F *hSecVtxPhiTGHCfromB=new TH1F("hSecVtxPhiTGHCfromB","hSecVtxPhi_TightCuts_FromB",180,-180.1,180.1);
4268   TH1F *hd0singlTrackTGHCfromB=new TH1F("hd0singlTrackTGHCfromB","hd0singlTrackTightCuts_FromB",1000,-5000.,5000.);
4269   TH1F *hCPtaTGHCfromB=new TH1F("hCPtaTGHCfromB","hCPta_TightCuts_FromB",100,-1.,1.);
4270   TH1F *hd0xd0TGHCfromB=new TH1F("hd0xd0TGHCfromB","hd0xd0_TightCuts_FromB",1000,-100000.,100000.);
4271   TH1F *hMassTrueTGHCfromB=new TH1F("hMassTrueTGHCfromB","D^{0} MC inv. Mass Tight Cuts FromB(All momenta)",600,1.600,2.200);
4272   TH1F *hMassTGHCfromB=new TH1F("hMassTGHCfromB","D^{0} inv. Mass Tight Cuts FromB (All momenta)",600,1.600,2.200);
4273   hMassTGHCfromB->Sumw2();
4274   TH1F *hMassTrueTGHCfromBPM=new TH1F("hMassTrueTGHCfromBPM","D^{0} MC inv. Mass Tight Cuts FromB, Mass Peak. (All momenta)",600,1.600,2.200);
4275   TH1F *hMassTGHCfromBPM=new TH1F("hMassTGHCfromBPM","D^{0} inv. Mass Tight Cuts FromB (All momenta), MassPeak",600,1.600,2.200);
4276   hMassTGHCfromBPM->Sumw2();
4277   TH1F *hMassTrueTGHCfromBSB=new TH1F("hMassTrueTGHCfromBSB","D^{0} MC inv. Mass in Side Bands Tight Cuts FromB(All momenta)",600,1.600,2.200);
4278   TH1F *hMassTGHCfromBSB=new TH1F("hMassTGHCfromBSB","D^{0} inv. Mass in Side Bands Tight Cuts FromB (All momenta)",600,1.600,2.200);
4279   hMassTGHCfromBSB->Sumw2();
4280
4281   flistTghCutsFromB->Add(hCPtaVSd0d0TGHCfromB);
4282   flistTghCutsFromB->Add(hSecVtxZTGHCfromB);
4283   flistTghCutsFromB->Add(hSecVtxYTGHCfromB);
4284   flistTghCutsFromB->Add(hSecVtxXTGHCfromB);
4285   flistTghCutsFromB->Add(hSecVtxXYTGHCfromB);
4286   flistTghCutsFromB->Add(hSecVtxPhiTGHCfromB);
4287   flistTghCutsFromB->Add(hd0singlTrackTGHCfromB);
4288   flistTghCutsFromB->Add(hCPtaTGHCfromB);
4289   flistTghCutsFromB->Add(hd0xd0TGHCfromB);
4290   flistTghCutsFromB->Add(hMassTrueTGHCfromB);
4291   flistTghCutsFromB->Add(hMassTGHCfromB);
4292   flistTghCutsFromB->Add(hMassTrueTGHCfromBPM);
4293   flistTghCutsFromB->Add(hMassTGHCfromBPM);
4294   flistTghCutsFromB->Add(hMassTrueTGHCfromBSB);
4295   flistTghCutsFromB->Add(hMassTGHCfromBSB);
4296
4297
4298
4299  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
4300   TH1F *hdcaTGHCfromB=new TH1F("hdcaTGHCfromB","hdca_TightCuts_FromB",100,0.,1000.);
4301   hdcaTGHCfromB->SetXTitle("dca   [#mum]");
4302   hdcaTGHCfromB->SetYTitle("Entries");
4303   TH1F *hcosthetastarTGHCfromB=new TH1F("hcosthetastarTGHCfromB","hCosThetaStar_TightCuts_FromB",50,-1.,1.);
4304   hcosthetastarTGHCfromB->SetXTitle("cos #theta^{*}");
4305   hcosthetastarTGHCfromB->SetYTitle("Entries");
4306   TH1F *hptD0TGHCfromB=new TH1F("hptD0TGHCfromB","D^{0} transverse momentum distribution",34,ptbinsD0arr);
4307   hptD0TGHCfromB->SetXTitle("p_{t}  [GeV/c]");
4308   hptD0TGHCfromB->SetYTitle("Entries");
4309   TH1F *hptD0VsMaxPtTGHCfromB=new TH1F("hptD0VsMaxPtTGHCfromB","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
4310   TH2F *hptD0PTallsqrtTGHCfromB=new TH2F("hptD0PTallsqrtTGHCfromB","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
4311   TH2F *hptD0PTallTGHCfromB=new TH2F("hptD0PTallTGHCfromB","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
4312   TH2F *hptD0vsptBTGHCfromB=new TH2F("hptD0vsptBTGHCfromB","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4313   TH2F *hpD0vspBTGHCfromB=new TH2F("hpD0vspBTGHCfromB","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4314   TH2F *hptD0vsptcquarkTGHCfromB=new TH2F("hptD0vsptcquarkTGHCfromB","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4315   TH2F *hpD0vspcquarkTGHCfromB=new TH2F("hpD0vspcquarkTGHCfromB","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4316   flistTghCutsFromB->Add(hdcaTGHCfromB);
4317   flistTghCutsFromB->Add(hcosthetastarTGHCfromB);
4318   flistTghCutsFromB->Add(hptD0TGHCfromB);
4319   flistTghCutsFromB->Add(hptD0VsMaxPtTGHCfromB);
4320   flistTghCutsFromB->Add(hptD0PTallsqrtTGHCfromB);
4321   flistTghCutsFromB->Add(hptD0PTallTGHCfromB);
4322   flistTghCutsFromB->Add(hptD0vsptBTGHCfromB);
4323   flistTghCutsFromB->Add(hpD0vspBTGHCfromB);
4324   flistTghCutsFromB->Add(hptD0vsptcquarkTGHCfromB);
4325   flistTghCutsFromB->Add(hpD0vspcquarkTGHCfromB);
4326  
4327   TH1F *hd0zD0ptTGHCfromB;
4328   TH1F *hInvMassD0TGHCfromB,*hInvMassD0barTGHCfromB;
4329   TH2F *hInvMassPtTGHCfromB=new TH2F("hInvMassPtTGHCfromB","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
4330  THnSparseF *hSparseTGHCfromB=new THnSparseF("hSparseTGHCfromB","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
4331   hSparseTGHCfromB->SetBinEdges(0,massbins);
4332   hSparseTGHCfromB->SetBinEdges(1,massbins);
4333   hSparseTGHCfromB->SetBinEdges(2,ptbinsForNsparse);
4334   hSparseTGHCfromB->SetBinEdges(3,impparbins);
4335   hSparseTGHCfromB->SetBinEdges(4,massHypoBins); 
4336   flistTghCutsFromB->Add(hSparseTGHCfromB);
4337   TH1F *hetaTGHCfromB;
4338   TH1F *hCosPDPBTGHCfromB;
4339   TH1F *hCosPcPDTGHCfromB;
4340   flistTghCutsFromB->Add(hInvMassPtTGHCfromB);
4341 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4342   TH2F *hd0D0VSd0xd0TGHCfromBpt;
4343   TH2F *hangletracksVSd0xd0TGHCfromBpt;
4344   TH2F *hangletracksVSd0D0TGHCfromBpt;
4345   TH1F *hd0xd0TGHCfromBpt;
4346
4347   TH2F *hTOFpidTGHCfromB=new TH2F("hTOFpidTGHCfromB","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
4348   flistTghCutsFromB->Add(hTOFpidTGHCfromB);
4349
4350
4351   for(Int_t i=0;i<fnbins;i++){
4352     namehist="hd0zD0ptTGHCfromB_pt";
4353     namehist+=i;
4354     titlehist="d0(z) Tight Cuts FromBm ptbin=";
4355     titlehist+=i;
4356     hd0zD0ptTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
4357     hd0zD0ptTGHCfromB->SetXTitle("d_{0}(z)    [#mum]");
4358     hd0zD0ptTGHCfromB->SetYTitle("Entries");
4359     flistTghCutsFromB->Add(hd0zD0ptTGHCfromB);
4360
4361     namehist="hInvMassD0TGHCfromB_pt";
4362     namehist+=i;
4363     titlehist="Invariant Mass Tight Cuts FromB ptbin=";
4364     titlehist+=i;
4365     hInvMassD0TGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4366     hInvMassD0TGHCfromB->SetXTitle("Invariant Mass    [GeV]");
4367     hInvMassD0TGHCfromB->SetYTitle("Entries");
4368     flistTghCutsFromB->Add(hInvMassD0TGHCfromB);
4369
4370     namehist="hInvMassD0barTGHCfromB_pt";
4371     namehist+=i;
4372     titlehist="Invariant Mass D0bar Tight Cuts FromB ptbin=";
4373     titlehist+=i;
4374     hInvMassD0barTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4375     hInvMassD0barTGHCfromB->SetXTitle("Invariant Mass    [GeV]");
4376     hInvMassD0barTGHCfromB->SetYTitle("Entries");
4377     flistTghCutsFromB->Add(hInvMassD0barTGHCfromB);
4378
4379     namehist="hetaTGHCfromB_pt";
4380     namehist+=i;
4381     titlehist="eta Tight Cuts FromB ptbin=";
4382     titlehist+=i;
4383     hetaTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
4384     hetaTGHCfromB->SetXTitle("Pseudorapidity");
4385     hetaTGHCfromB->SetYTitle("Entries");
4386     flistTghCutsFromB->Add(hetaTGHCfromB);
4387
4388     namehist="hCosPDPBTGHCfromB_pt";
4389     namehist+=i;
4390     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
4391     titlehist+=i;
4392     hCosPDPBTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4393     hCosPDPBTGHCfromB->SetXTitle("Cosine between D0 momentum and B momentum");
4394     hCosPDPBTGHCfromB->SetYTitle("Entries");
4395     flistTghCutsFromB->Add(hCosPDPBTGHCfromB);
4396
4397     namehist="hCosPcPDTGHCfromB_pt";
4398     namehist+=i;
4399     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
4400     titlehist+=i;
4401     hCosPcPDTGHCfromB=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4402     hCosPcPDTGHCfromB->SetXTitle("Cosine between c quark momentum and D0 momentum");
4403     hCosPcPDTGHCfromB->SetYTitle("Entries");
4404     flistTghCutsFromB->Add(hCosPcPDTGHCfromB);
4405
4406 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4407     namehist="hd0xd0TGHCfromB_pt";
4408     namehist+=i;
4409     titlehist="d0xd0 Tight Cuts FromB ptbin=";
4410     titlehist+=i;
4411     hd0xd0TGHCfromBpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
4412     hd0xd0TGHCfromBpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
4413     hd0xd0TGHCfromBpt->SetYTitle("Entries");
4414     flistTghCutsFromB->Add(hd0xd0TGHCfromBpt);
4415
4416
4417     namehist="hd0D0VSd0xd0TGHCfromB_pt";
4418     namehist+=i;
4419     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromB ptbin=";
4420     titlehist+=i;
4421     hd0D0VSd0xd0TGHCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
4422     hd0D0VSd0xd0TGHCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
4423     hd0D0VSd0xd0TGHCfromBpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
4424     flistTghCutsFromB->Add(hd0D0VSd0xd0TGHCfromBpt);
4425     
4426     
4427     namehist="hangletracksVSd0xd0TGHCfromB_pt";
4428     namehist+=i;
4429     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromB ptbin=";
4430     titlehist+=i;
4431     hangletracksVSd0xd0TGHCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
4432     hangletracksVSd0xd0TGHCfromBpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
4433     hangletracksVSd0xd0TGHCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
4434     flistTghCutsFromB->Add(hangletracksVSd0xd0TGHCfromBpt);
4435     
4436
4437     namehist="hangletracksVSd0D0TGHCfromB_pt";
4438     namehist+=i;
4439     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts FromB ptbin=";
4440     titlehist+=i;
4441     hangletracksVSd0D0TGHCfromBpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
4442     hangletracksVSd0D0TGHCfromBpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
4443     hangletracksVSd0D0TGHCfromBpt->SetYTitle(" angle between K and #p tracks  [rad]");
4444     flistTghCutsFromB->Add(hangletracksVSd0D0TGHCfromBpt);
4445     
4446   }
4447   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
4448   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4449
4450
4451
4452
4453
4454   // ######### d0 D0 histos ##############
4455   TH1F *hd0D0TGHCfromBPM = new TH1F("hd0D0TGHCfromBPM","D^{0} impact par. plot , Tight Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
4456   hd0D0TGHCfromBPM->SetXTitle("Impact parameter [#mum]");
4457   hd0D0TGHCfromBPM->SetYTitle("Entries");
4458
4459   TH1F *hd0D0VtxTrueTGHCfromBPM = new TH1F("hd0D0VtxTrueTGHCfromBPM","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
4460   hd0D0VtxTrueTGHCfromBPM->SetXTitle("Impact parameter [#mum]");
4461   hd0D0VtxTrueTGHCfromBPM->SetYTitle("Entries");
4462
4463   TH1F *hMCd0D0TGHCfromBPM = new TH1F("hMCd0D0TGHCfromBPM","D^{0} impact par. plot, Tight Cuts, FromB,Mass Peak  (All momenta)",1000,-1000.,1000.);
4464   hMCd0D0TGHCfromBPM->SetXTitle("MC Impact parameter [#mum]");
4465   hMCd0D0TGHCfromBPM->SetYTitle("Entries");
4466
4467   TH1F *hd0D0TGHCfromBSB = new TH1F("hd0D0TGHCfromBSB","D^{0} impact par. plot , Tight Cuts ,FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
4468   hd0D0TGHCfromBSB->SetXTitle("Impact parameter [#mum]");
4469   hd0D0TGHCfromBSB->SetYTitle("Entries");
4470
4471   TH1F *hd0D0VtxTrueTGHCfromBSB = new TH1F("hd0D0VtxTrueTGHCfromBSB","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, FromB,Mass Peak (All momenta)",1000,-1000.,1000.);
4472   hd0D0VtxTrueTGHCfromBSB->SetXTitle("Impact parameter [#mum]");
4473   hd0D0VtxTrueTGHCfromBSB->SetYTitle("Entries");
4474
4475   TH1F *hMCd0D0TGHCfromBSB = new TH1F("hMCd0D0TGHCfromBSB","D^{0} impact par. plot, Tight Cuts, FromB,Mass Peak  (All momenta)",1000,-1000.,1000.);
4476   hMCd0D0TGHCfromBSB->SetXTitle("MC Impact parameter [#mum]");
4477   hMCd0D0TGHCfromBSB->SetYTitle("Entries");
4478
4479   flistTghCutsFromB->Add(hd0D0TGHCfromBPM);
4480   flistTghCutsFromB->Add(hd0D0VtxTrueTGHCfromBPM);
4481   flistTghCutsFromB->Add(hMCd0D0TGHCfromBPM);
4482   flistTghCutsFromB->Add(hd0D0TGHCfromBSB);
4483   flistTghCutsFromB->Add(hd0D0VtxTrueTGHCfromBSB);
4484   flistTghCutsFromB->Add(hMCd0D0TGHCfromBSB);
4485   
4486   TH1F *hd0D0ptTGHCfromBPM;
4487   TH1F *hMCd0D0ptTGHCfromBPM;
4488   TH1F *hd0D0VtxTrueptTGHCfromBPM;
4489   TH1F *hd0D0ptTGHCfromBSB;
4490   TH1F *hMCd0D0ptTGHCfromBSB;
4491   TH1F *hd0D0VtxTrueptTGHCfromBSB;
4492   namehist="hd0D0ptTGHCfromB_";
4493   titlehist="D^{0} impact par. plot, Tight Cuts, FromB, ";
4494   for(Int_t i=0;i<fnbins;i++){
4495     strnamept=namehist;
4496     strnamept.Append("PkMss_pt");
4497     strnamept+=i;
4498
4499     strtitlept=titlehist;
4500     strtitlept.Append(" Mass Peak, ");
4501     strtitlept+=fptbins[i];
4502     strtitlept.Append("<= pt <");
4503     strtitlept+=fptbins[i+1];
4504     strtitlept.Append(" [GeV/c]");
4505     
4506     hd0D0ptTGHCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4507     hd0D0ptTGHCfromBPM->SetXTitle("Impact parameter [#mum] ");
4508     hd0D0ptTGHCfromBPM->SetYTitle("Entries");
4509     flistTghCutsFromB->Add(hd0D0ptTGHCfromBPM);
4510
4511     strnamept.ReplaceAll("hd0D0","hMCd0D0");
4512     hMCd0D0ptTGHCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4513     hMCd0D0ptTGHCfromBPM->SetXTitle("MC Impact parameter [#mum] ");
4514     hMCd0D0ptTGHCfromBPM->SetYTitle("Entries");
4515     flistTghCutsFromB->Add(hMCd0D0ptTGHCfromBPM);
4516  
4517
4518     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
4519     hd0D0VtxTrueptTGHCfromBPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4520     hd0D0VtxTrueptTGHCfromBPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
4521     hd0D0VtxTrueptTGHCfromBPM->SetYTitle("Entries");
4522     flistTghCutsFromB->Add(hd0D0VtxTrueptTGHCfromBPM);
4523     
4524     strnamept=namehist;
4525     strnamept.Append("SBMss_pt");
4526     strnamept+=i;
4527
4528     strtitlept=titlehist;
4529     strtitlept.Append(" Side Bands, ");
4530     strtitlept+=fptbins[i];
4531     strtitlept.Append("<= pt <");
4532     strtitlept+=fptbins[i+1];
4533     strtitlept.Append(" [GeV/c]");
4534     
4535     hd0D0ptTGHCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4536     hd0D0ptTGHCfromBSB->SetXTitle("Impact parameter [#mum] ");
4537     hd0D0ptTGHCfromBSB->SetYTitle("Entries");
4538     flistTghCutsFromB->Add(hd0D0ptTGHCfromBSB);
4539
4540     strnamept.ReplaceAll("hd0D0","hMCd0D0");
4541     hMCd0D0ptTGHCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4542     hMCd0D0ptTGHCfromBSB->SetXTitle("MC Impact parameter [#mum] ");
4543     hMCd0D0ptTGHCfromBSB->SetYTitle("Entries");
4544     flistTghCutsFromB->Add(hMCd0D0ptTGHCfromBSB);
4545
4546     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
4547     hd0D0VtxTrueptTGHCfromBSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4548     hd0D0VtxTrueptTGHCfromBSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
4549     hd0D0VtxTrueptTGHCfromBSB->SetYTitle("Entries");
4550     flistTghCutsFromB->Add(hd0D0VtxTrueptTGHCfromBSB);
4551   }
4552
4553
4554
4555  //############ TIGHT CUTS FROM DSTAR HISTOGRAMS ###########
4556  //
4557   //############## global properties histos
4558   TH2F *hCPtaVSd0d0TGHCfromDstar=new TH2F("hCPtaVSd0d0TGHCfromDstar","hCPtaVSd0d0_TightCuts_FromDStar",1000,-100000.,100000.,100,-1.,1.);
4559   TH1F *hSecVtxZTGHCfromDstar=new TH1F("hSecVtxZTGHCfromDstar","hSecVtxZ_TightCuts_FromDStar",1000,-8.,8.);
4560   TH1F *hSecVtxXTGHCfromDstar=new TH1F("hSecVtxXTGHCfromDstar","hSecVtxX_TightCuts_FromDStar",1000,-3000.,3000.);
4561   TH1F *hSecVtxYTGHCfromDstar=new TH1F("hSecVtxYTGHCfromDstar","hSecVtxY_TightCuts_FromDStar",1000,-3000.,3000.);
4562   TH2F *hSecVtxXYTGHCfromDstar=new TH2F("hSecVtxXYTGHCfromDstar","hSecVtxXY_TightCuts_FromDStar",1000,-3000.,3000.,1000,-3000.,3000.);
4563   TH1F *hSecVtxPhiTGHCfromDstar=new TH1F("hSecVtxPhiTGHCfromDstar","hSecVtxPhi_TightCuts_FromDStar",180,-180.1,180.1);
4564   TH1F *hd0singlTrackTGHCfromDstar=new TH1F("hd0singlTrackTGHCfromDstar","hd0singlTrackTightCuts_FromDstar",1000,-5000.,5000.);
4565   TH1F *hCPtaTGHCfromDstar=new TH1F("hCPtaTGHCfromDstar","hCPta_TightCuts_FromDStar",100,-1.,1.);
4566   TH1F *hd0xd0TGHCfromDstar=new TH1F("hd0xd0TGHCfromDstar","hd0xd0_TightCuts_FromDStar",1000,-100000.,100000.);
4567   TH1F *hMassTrueTGHCfromDstar=new TH1F("hMassTrueTGHCfromDstar","D^{0} MC inv. Mass Tight Cuts FromDStar(All momenta)",600,1.600,2.200);
4568   TH1F *hMassTGHCfromDstar=new TH1F("hMassTGHCfromDstar","D^{0} inv. Mass Tight Cuts FromDStar (All momenta)",600,1.600,2.200);
4569   hMassTGHCfromDstar->Sumw2();
4570   TH1F *hMassTrueTGHCfromDstarPM=new TH1F("hMassTrueTGHCfromDstarPM","D^{0} MC inv. Mass Tight Cuts FromDStar, Mass Peak. (All momenta)",600,1.600,2.200);
4571   TH1F *hMassTGHCfromDstarPM=new TH1F("hMassTGHCfromDstarPM","D^{0} inv. Mass Tight Cuts FromDStar (All momenta), MassPeak",600,1.600,2.200);
4572   hMassTGHCfromDstarPM->Sumw2();
4573   TH1F *hMassTrueTGHCfromDstarSB=new TH1F("hMassTrueTGHCfromDstarSB","D^{0} MC inv. Mass in Side Bands Tight Cuts FromDStar(All momenta)",600,1.600,2.200);
4574   TH1F *hMassTGHCfromDstarSB=new TH1F("hMassTGHCfromDstarSB","D^{0} inv. Mass in Side Bands Tight Cuts FromDStar (All momenta)",600,1.600,2.200);
4575   hMassTGHCfromDstarSB->Sumw2();
4576
4577   flistTghCutsFromDstar->Add(hCPtaVSd0d0TGHCfromDstar);
4578   flistTghCutsFromDstar->Add(hSecVtxZTGHCfromDstar);
4579   flistTghCutsFromDstar->Add(hSecVtxYTGHCfromDstar);
4580   flistTghCutsFromDstar->Add(hSecVtxXTGHCfromDstar);
4581   flistTghCutsFromDstar->Add(hSecVtxXYTGHCfromDstar);
4582   flistTghCutsFromDstar->Add(hSecVtxPhiTGHCfromDstar);
4583   flistTghCutsFromDstar->Add(hd0singlTrackTGHCfromDstar);
4584   flistTghCutsFromDstar->Add(hCPtaTGHCfromDstar);
4585   flistTghCutsFromDstar->Add(hd0xd0TGHCfromDstar);
4586   flistTghCutsFromDstar->Add(hMassTrueTGHCfromDstar);
4587   flistTghCutsFromDstar->Add(hMassTGHCfromDstar);
4588   flistTghCutsFromDstar->Add(hMassTrueTGHCfromDstarPM);
4589   flistTghCutsFromDstar->Add(hMassTGHCfromDstarPM);
4590   flistTghCutsFromDstar->Add(hMassTrueTGHCfromDstarSB);
4591   flistTghCutsFromDstar->Add(hMassTGHCfromDstarSB);
4592
4593
4594
4595
4596
4597  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
4598   TH1F *hdcaTGHCfromDstar=new TH1F("hdcaTGHCfromDstar","hdca_TightCuts_FromDstar",100,0.,1000.);
4599   hdcaTGHCfromDstar->SetXTitle("dca   [#mum]");
4600   hdcaTGHCfromDstar->SetYTitle("Entries");
4601   TH1F *hcosthetastarTGHCfromDstar=new TH1F("hcosthetastarTGHCfromDstar","hCosThetaStar_TightCuts_FromDstar",50,-1.,1.);
4602   hcosthetastarTGHCfromDstar->SetXTitle("cos #theta^{*}");
4603   hcosthetastarTGHCfromDstar->SetYTitle("Entries");
4604   TH1F *hptD0TGHCfromDstar=new TH1F("hptD0TGHCfromDstar","D^{0} transverse momentum distribution",34,ptbinsD0arr);
4605   hptD0TGHCfromDstar->SetXTitle("p_{t}  [GeV/c]");
4606   hptD0TGHCfromDstar->SetYTitle("Entries");
4607   TH1F *hptD0VsMaxPtTGHCfromDstar=new TH1F("hptD0VsMaxPtTGHCfromDstar","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
4608   TH2F *hptD0PTallsqrtTGHCfromDstar=new TH2F("hptD0PTallsqrtTGHCfromDstar","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
4609   TH2F *hptD0PTallTGHCfromDstar=new TH2F("hptD0PTallTGHCfromDstar","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
4610   TH2F *hptD0vsptBTGHCfromDstar=new TH2F("hptD0vsptBTGHCfromDstar","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4611   TH2F *hpD0vspBTGHCfromDstar=new TH2F("hpD0vspBTGHCfromDstar","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4612   TH2F *hptD0vsptcquarkTGHCfromDstar=new TH2F("hptD0vsptcquarkTGHCfromDstar","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4613   TH2F *hpD0vspcquarkTGHCfromDstar=new TH2F("hpD0vspcquarkTGHCfromDstar","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4614   flistTghCutsFromDstar->Add(hdcaTGHCfromDstar);
4615   flistTghCutsFromDstar->Add(hcosthetastarTGHCfromDstar);
4616   flistTghCutsFromDstar->Add(hptD0TGHCfromDstar);
4617   flistTghCutsFromDstar->Add(hptD0VsMaxPtTGHCfromDstar);
4618   flistTghCutsFromDstar->Add(hptD0PTallsqrtTGHCfromDstar);
4619   flistTghCutsFromDstar->Add(hptD0PTallTGHCfromDstar);
4620   flistTghCutsFromDstar->Add(hptD0vsptBTGHCfromDstar);
4621   flistTghCutsFromDstar->Add(hpD0vspBTGHCfromDstar);
4622   flistTghCutsFromDstar->Add(hptD0vsptcquarkTGHCfromDstar);
4623   flistTghCutsFromDstar->Add(hpD0vspcquarkTGHCfromDstar);
4624  
4625   TH1F *hd0zD0ptTGHCfromDstar;
4626   TH1F *hInvMassD0TGHCfromDstar,*hInvMassD0barTGHCfromDstar;
4627   TH1F *hetaTGHCfromDstar;
4628   TH2F *hInvMassPtTGHCfromDstar=new TH2F("hInvMassPtTGHCfromDstar","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
4629  THnSparseF *hSparseTGHCfromDstar=new THnSparseF("hSparseTGHCfromDstar","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
4630   hSparseTGHCfromDstar->SetBinEdges(0,massbins);
4631   hSparseTGHCfromDstar->SetBinEdges(1,massbins);
4632   hSparseTGHCfromDstar->SetBinEdges(2,ptbinsForNsparse);
4633   hSparseTGHCfromDstar->SetBinEdges(3,impparbins);
4634   hSparseTGHCfromDstar->SetBinEdges(4,massHypoBins); 
4635   flistTghCutsFromDstar->Add(hSparseTGHCfromDstar);
4636   TH1F *hCosPDPBTGHCfromDstar;
4637   TH1F *hCosPcPDTGHCfromDstar;
4638   flistTghCutsFromDstar->Add(hInvMassPtTGHCfromDstar);
4639 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4640   TH2F *hd0D0VSd0xd0TGHCfromDstarpt;
4641   TH2F *hangletracksVSd0xd0TGHCfromDstarpt;
4642   TH2F *hangletracksVSd0D0TGHCfromDstarpt;
4643   TH1F *hd0xd0TGHCfromDstarpt;
4644
4645   TH2F *hTOFpidTGHCfromDstar=new TH2F("hTOFpidTGHCfromDstar","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
4646   flistTghCutsFromDstar->Add(hTOFpidTGHCfromDstar);
4647
4648   for(Int_t i=0;i<fnbins;i++){
4649     namehist="hd0zD0ptTGHCfromDstar_pt";
4650     namehist+=i;
4651     titlehist="d0(z) Tight Cuts FromDstarm ptbin=";
4652     titlehist+=i;
4653     hd0zD0ptTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
4654     hd0zD0ptTGHCfromDstar->SetXTitle("d_{0}(z)    [#mum]");
4655     hd0zD0ptTGHCfromDstar->SetYTitle("Entries");
4656     flistTghCutsFromDstar->Add(hd0zD0ptTGHCfromDstar);
4657
4658     namehist="hInvMassD0TGHCfromDstar_pt";
4659     namehist+=i;
4660     titlehist="Invariant Mass Tight Cuts FromDstar ptbin=";
4661     titlehist+=i;
4662     hInvMassD0TGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4663     hInvMassD0TGHCfromDstar->SetXTitle("Invariant Mass    [GeV]");
4664     hInvMassD0TGHCfromDstar->SetYTitle("Entries");
4665     flistTghCutsFromDstar->Add(hInvMassD0TGHCfromDstar);
4666
4667     namehist="hInvMassD0barTGHCfromDstar_pt";
4668     namehist+=i;
4669     titlehist="Invariant Mass D0bar Tight Cuts FromDstar ptbin=";
4670     titlehist+=i;
4671     hInvMassD0barTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4672     hInvMassD0barTGHCfromDstar->SetXTitle("Invariant Mass    [GeV]");
4673     hInvMassD0barTGHCfromDstar->SetYTitle("Entries");
4674     flistTghCutsFromDstar->Add(hInvMassD0barTGHCfromDstar);
4675
4676     namehist="hetaTGHCfromDstar_pt";
4677     namehist+=i;
4678     titlehist="eta Tight Cuts FromDstar ptbin=";
4679     titlehist+=i;
4680     hetaTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
4681     hetaTGHCfromDstar->SetXTitle("Pseudorapidity");
4682     hetaTGHCfromDstar->SetYTitle("Entries");
4683     flistTghCutsFromDstar->Add(hetaTGHCfromDstar);
4684
4685     namehist="hCosPDPBTGHCfromDstar_pt";
4686     namehist+=i;
4687     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
4688     titlehist+=i;
4689     hCosPDPBTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4690     hCosPDPBTGHCfromDstar->SetXTitle("Cosine between D0 momentum and B momentum");
4691     hCosPDPBTGHCfromDstar->SetYTitle("Entries");
4692     flistTghCutsFromDstar->Add(hCosPDPBTGHCfromDstar);
4693
4694     namehist="hCosPcPDTGHCfromDstar_pt";
4695     namehist+=i;
4696     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
4697     titlehist+=i;
4698     hCosPcPDTGHCfromDstar=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4699     hCosPcPDTGHCfromDstar->SetXTitle("Cosine between c quark momentum and D0 momentum");
4700     hCosPcPDTGHCfromDstar->SetYTitle("Entries");
4701     flistTghCutsFromDstar->Add(hCosPcPDTGHCfromDstar);
4702
4703  // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4704     namehist="hd0xd0TGHCfromDstar_pt";
4705     namehist+=i;
4706     titlehist="d0xd0 Tight Cuts FromDstar ptbin=";
4707     titlehist+=i;
4708     hd0xd0TGHCfromDstarpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
4709     hd0xd0TGHCfromDstarpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
4710     hd0xd0TGHCfromDstarpt->SetYTitle("Entries");
4711     flistTghCutsFromDstar->Add(hd0xd0TGHCfromDstarpt);
4712
4713
4714     namehist="hd0D0VSd0xd0TGHCfromDstar_pt";
4715     namehist+=i;
4716     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromDstar ptbin=";
4717     titlehist+=i;
4718     hd0D0VSd0xd0TGHCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
4719     hd0D0VSd0xd0TGHCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
4720     hd0D0VSd0xd0TGHCfromDstarpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
4721     flistTghCutsFromDstar->Add(hd0D0VSd0xd0TGHCfromDstarpt);
4722     
4723     
4724     namehist="hangletracksVSd0xd0TGHCfromDstar_pt";
4725     namehist+=i;
4726     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts FromDstar ptbin=";
4727     titlehist+=i;
4728     hangletracksVSd0xd0TGHCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
4729     hangletracksVSd0xd0TGHCfromDstarpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
4730     hangletracksVSd0xd0TGHCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
4731     flistTghCutsFromDstar->Add(hangletracksVSd0xd0TGHCfromDstarpt);
4732     
4733
4734     namehist="hangletracksVSd0D0TGHCfromDstar_pt";
4735     namehist+=i;
4736     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts FromDstar ptbin=";
4737     titlehist+=i;
4738     hangletracksVSd0D0TGHCfromDstarpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
4739     hangletracksVSd0D0TGHCfromDstarpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
4740     hangletracksVSd0D0TGHCfromDstarpt->SetYTitle(" angle between K and #p tracks  [rad]");
4741     flistTghCutsFromDstar->Add(hangletracksVSd0D0TGHCfromDstarpt);
4742
4743     
4744   }
4745   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
4746   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4747
4748
4749   //########## d0 D0 histos #############  
4750   TH1F *hd0D0TGHCfromDstPM = new TH1F("hd0D0TGHCfromDstarPM","D^{0} impact par. plot , Tight Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
4751   hd0D0TGHCfromDstPM->SetXTitle("Impact parameter [#mum]");
4752   hd0D0TGHCfromDstPM->SetYTitle("Entries");
4753
4754   TH1F *hd0D0VtxTrueTGHCfromDstPM = new TH1F("hd0D0VtxTrueTGHCfromDstarPM","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
4755   hd0D0VtxTrueTGHCfromDstPM->SetXTitle("Impact parameter [#mum]");
4756   hd0D0VtxTrueTGHCfromDstPM->SetYTitle("Entries");
4757
4758   TH1F *hMCd0D0TGHCfromDstPM = new TH1F("hMCd0D0TGHCfromDstarPM","D^{0} impact par. plot, Tight Cuts, FromDStar,Mass Peak  (All momenta)",1000,-1000.,1000.);
4759   hMCd0D0TGHCfromDstPM->SetXTitle("MC Impact parameter [#mum]");
4760   hMCd0D0TGHCfromDstPM->SetYTitle("Entries");
4761
4762   TH1F *hd0D0TGHCfromDstSB = new TH1F("hd0D0TGHCfromDstarSB","D^{0} impact par. plot , Tight Cuts ,FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
4763   hd0D0TGHCfromDstSB->SetXTitle("Impact parameter [#mum]");
4764   hd0D0TGHCfromDstSB->SetYTitle("Entries");
4765
4766   TH1F *hd0D0VtxTrueTGHCfromDstSB = new TH1F("hd0D0VtxTrueTGHCfromDstarSB","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, FromDStar,Mass Peak (All momenta)",1000,-1000.,1000.);
4767   hd0D0VtxTrueTGHCfromDstSB->SetXTitle("Impact parameter [#mum]");
4768   hd0D0VtxTrueTGHCfromDstSB->SetYTitle("Entries");
4769
4770   TH1F *hMCd0D0TGHCfromDstSB = new TH1F("hMCd0D0TGHCfromDstarSB","D^{0} impact par. plot, Tight Cuts, FromDStar,Mass Peak  (All momenta)",1000,-1000.,1000.);
4771   hMCd0D0TGHCfromDstSB->SetXTitle("MC Impact parameter [#mum]");
4772   hMCd0D0TGHCfromDstSB->SetYTitle("Entries");
4773
4774   flistTghCutsFromDstar->Add(hd0D0TGHCfromDstPM);
4775   flistTghCutsFromDstar->Add(hd0D0VtxTrueTGHCfromDstPM);
4776   flistTghCutsFromDstar->Add(hMCd0D0TGHCfromDstPM);
4777   flistTghCutsFromDstar->Add(hd0D0TGHCfromDstSB);
4778   flistTghCutsFromDstar->Add(hd0D0VtxTrueTGHCfromDstSB);
4779   flistTghCutsFromDstar->Add(hMCd0D0TGHCfromDstSB);
4780   
4781   TH1F *hd0D0ptTGHCfromDstPM;
4782   TH1F *hMCd0D0ptTGHCfromDstPM;
4783   TH1F *hd0D0VtxTrueptTGHCfromDstPM;
4784   TH1F *hd0D0ptTGHCfromDstSB;
4785   TH1F *hMCd0D0ptTGHCfromDstSB;
4786   TH1F *hd0D0VtxTrueptTGHCfromDstSB;
4787   namehist="hd0D0ptTGHCfromDstar_";
4788   titlehist="D^{0} impact par. plot, Tight Cuts, FromDStar, ";
4789   for(Int_t i=0;i<fnbins;i++){
4790     strnamept=namehist;
4791     strnamept.Append("PkMss_pt");
4792     strnamept+=i;
4793
4794     strtitlept=titlehist;
4795     strtitlept.Append(" Mass Peak, ");
4796     strtitlept+=fptbins[i];
4797     strtitlept.Append("<= pt <");
4798     strtitlept+=fptbins[i+1];
4799     strtitlept.Append(" [GeV/c]");
4800     
4801     hd0D0ptTGHCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4802     hd0D0ptTGHCfromDstPM->SetXTitle("Impact parameter [#mum] ");
4803     hd0D0ptTGHCfromDstPM->SetYTitle("Entries");
4804     flistTghCutsFromDstar->Add(hd0D0ptTGHCfromDstPM);
4805
4806     strnamept.ReplaceAll("hd0D0","hMCd0D0");
4807     hMCd0D0ptTGHCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4808     hMCd0D0ptTGHCfromDstPM->SetXTitle("MC Impact parameter [#mum] ");
4809     hMCd0D0ptTGHCfromDstPM->SetYTitle("Entries");
4810     flistTghCutsFromDstar->Add(hMCd0D0ptTGHCfromDstPM);
4811  
4812
4813     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
4814     hd0D0VtxTrueptTGHCfromDstPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4815     hd0D0VtxTrueptTGHCfromDstPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
4816     hd0D0VtxTrueptTGHCfromDstPM->SetYTitle("Entries");
4817     flistTghCutsFromDstar->Add(hd0D0VtxTrueptTGHCfromDstPM);
4818     
4819     strnamept=namehist;
4820     strnamept.Append("SBMss_pt");
4821     strnamept+=i;
4822
4823     strtitlept=titlehist;
4824     strtitlept.Append(" Side Bands, ");
4825     strtitlept+=fptbins[i];
4826     strtitlept.Append("<= pt <");
4827     strtitlept+=fptbins[i+1];
4828     strtitlept.Append(" [GeV/c]");
4829     
4830     hd0D0ptTGHCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4831     hd0D0ptTGHCfromDstSB->SetXTitle("Impact parameter [#mum] ");
4832     hd0D0ptTGHCfromDstSB->SetYTitle("Entries");
4833     flistTghCutsFromDstar->Add(hd0D0ptTGHCfromDstSB);
4834
4835     strnamept.ReplaceAll("hd0D0","hMCd0D0");
4836     hMCd0D0ptTGHCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4837     hMCd0D0ptTGHCfromDstSB->SetXTitle("MC Impact parameter [#mum] ");
4838     hMCd0D0ptTGHCfromDstSB->SetYTitle("Entries");
4839     flistTghCutsFromDstar->Add(hMCd0D0ptTGHCfromDstSB);
4840
4841     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
4842     hd0D0VtxTrueptTGHCfromDstSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
4843     hd0D0VtxTrueptTGHCfromDstSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
4844     hd0D0VtxTrueptTGHCfromDstSB->SetYTitle("Entries");
4845     flistTghCutsFromDstar->Add(hd0D0VtxTrueptTGHCfromDstSB);
4846   }
4847
4848
4849   //############ TIGHT CUTS OTHER HISTOGRAMS ###########
4850   //
4851   //########### global properties histos ###########
4852
4853   TH2F *hCPtaVSd0d0TGHCother=new TH2F("hCPtaVSd0d0TGHCother","hCPtaVSd0d0_TightCuts_other",1000,-100000.,100000.,100,-1.,1.);
4854   TH1F *hSecVtxZTGHCother=new TH1F("hSecVtxZTGHCother","hSecVtxZ_TightCuts_other",1000,-8.,8.);
4855   TH1F *hSecVtxXTGHCother=new TH1F("hSecVtxXTGHCother","hSecVtxX_TightCuts_other",1000,-3000.,3000.);
4856   TH1F *hSecVtxYTGHCother=new TH1F("hSecVtxYTGHCother","hSecVtxY_TightCuts_other",1000,-3000.,3000.);
4857   TH2F *hSecVtxXYTGHCother=new TH2F("hSecVtxXYTGHCother","hSecVtxXY_TightCuts_other",1000,-3000.,3000.,1000,-3000.,3000.);
4858   TH1F *hSecVtxPhiTGHCother=new TH1F("hSecVtxPhiTGHCother","hSecVtxPhi_TightCuts_other",180,-180.1,180.1);
4859   TH1F *hd0singlTrackTGHCother=new TH1F("hd0singlTrackTGHCother","hd0singlTrackTightCuts_Other",1000,-5000.,5000.);
4860   TH1F *hCPtaTGHCother=new TH1F("hCPtaTGHCother","hCPta_TightCuts_other",100,-1.,1.);
4861   TH1F *hd0xd0TGHCother=new TH1F("hd0xd0TGHCother","hd0xd0_TightCuts_other",1000,-100000.,100000.);
4862   TH1F *hMassTrueTGHCother=new TH1F("hMassTrueTGHCother","D^{0} MC inv. Mass Tight Cuts other(All momenta)",600,1.600,2.200);
4863   TH1F *hMassTGHCother=new TH1F("hMassTGHCother","D^{0} inv. Mass Tight Cuts other (All momenta)",600,1.600,2.200);
4864   hMassTGHCother->Sumw2();
4865   TH1F *hMassTrueTGHCotherPM=new TH1F("hMassTrueTGHCotherPM","D^{0} MC inv. Mass Tight Cuts other, Mass Peak. (All momenta)",600,1.600,2.200);
4866   TH1F *hMassTGHCotherPM=new TH1F("hMassTGHCotherPM","D^{0} inv. Mass Tight Cuts other (All momenta), MassPeak",600,1.600,2.200);
4867   hMassTGHCotherPM->Sumw2();
4868   TH1F *hMassTrueTGHCotherSB=new TH1F("hMassTrueTGHCotherSB","D^{0} MC inv. Mass in Side Bands Tight Cuts other(All momenta)",600,1.600,2.200);
4869   TH1F *hMassTGHCotherSB=new TH1F("hMassTGHCotherSB","D^{0} inv. Mass in Side Bands Tight Cuts other (All momenta)",600,1.600,2.200);
4870   hMassTGHCotherSB->Sumw2();
4871
4872   flistTghCutsOther->Add(hCPtaVSd0d0TGHCother);
4873   flistTghCutsOther->Add(hSecVtxZTGHCother);
4874   flistTghCutsOther->Add(hSecVtxYTGHCother);
4875   flistTghCutsOther->Add(hSecVtxXTGHCother);
4876   flistTghCutsOther->Add(hSecVtxXYTGHCother);
4877   flistTghCutsOther->Add(hSecVtxPhiTGHCother);
4878   flistTghCutsOther->Add(hd0singlTrackTGHCother);
4879   flistTghCutsOther->Add(hCPtaTGHCother);
4880   flistTghCutsOther->Add(hd0xd0TGHCother);
4881   flistTghCutsOther->Add(hMassTrueTGHCother);
4882   flistTghCutsOther->Add(hMassTGHCother);
4883   flistTghCutsOther->Add(hMassTrueTGHCotherPM);
4884   flistTghCutsOther->Add(hMassTGHCotherPM);
4885   flistTghCutsOther->Add(hMassTrueTGHCotherSB);
4886   flistTghCutsOther->Add(hMassTGHCotherSB);
4887
4888
4889
4890
4891  //%%% NEW HISTOS %%%%%%%%%%%%%%%%
4892   TH1F *hdcaTGHCother=new TH1F("hdcaTGHCother","hdca_TightCuts_Other",100,0.,1000.);
4893   hdcaTGHCother->SetXTitle("dca   [#mum]");
4894   hdcaTGHCother->SetYTitle("Entries");
4895   TH1F *hcosthetastarTGHCother=new TH1F("hcosthetastarTGHCother","hCosThetaStar_TightCuts_Other",50,-1.,1.);
4896   hcosthetastarTGHCother->SetXTitle("cos #theta^{*}");
4897   hcosthetastarTGHCother->SetYTitle("Entries");
4898   TH1F *hptD0TGHCother=new TH1F("hptD0TGHCother","D^{0} transverse momentum distribution",34,ptbinsD0arr);
4899   hptD0TGHCother->SetXTitle("p_{t}  [GeV/c]");
4900   hptD0TGHCother->SetYTitle("Entries");
4901   TH1F *hptD0VsMaxPtTGHCother=new TH1F("hptD0VsMaxPtTGHCother","Difference between D^{0} pt and highest (or second) pt",400,-50.,50.);
4902   TH2F *hptD0PTallsqrtTGHCother=new TH2F("hptD0PTallsqrtTGHCother","D^{0} pt Vs Sqrt(Sum pt square)",34,ptbinsD0arr,200,dumbinning);
4903   TH2F *hptD0PTallTGHCother=new TH2F("hptD0PTallTGHCother","D^{0} pt Vs Sum pt ",34,ptbinsD0arr,200,dumbinning);
4904   TH2F *hptD0vsptBTGHCother=new TH2F("hptD0vsptBTGHCother","D^{0} pt Vs B pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4905   TH2F *hpD0vspBTGHCother=new TH2F("hpD0vspBTGHCother","D^{0} tot momentum Vs B tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4906   TH2F *hptD0vsptcquarkTGHCother=new TH2F("hptD0vsptcquarkTGHCother","D^{0} pt Vs cquark pt distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4907   TH2F *hpD0vspcquarkTGHCother=new TH2F("hpD0vspcquarkTGHCother","D^{0} tot momentum Vs cquark tot momentum distribution",34,ptbinsD0arr,34,ptbinsD0arr);
4908   flistTghCutsOther->Add(hdcaTGHCother);
4909   flistTghCutsOther->Add(hcosthetastarTGHCother);
4910   flistTghCutsOther->Add(hptD0TGHCother);
4911   flistTghCutsOther->Add(hptD0VsMaxPtTGHCother);
4912   flistTghCutsOther->Add(hptD0PTallsqrtTGHCother);
4913   flistTghCutsOther->Add(hptD0PTallTGHCother);
4914   flistTghCutsOther->Add(hptD0vsptBTGHCother);
4915   flistTghCutsOther->Add(hpD0vspBTGHCother);
4916   flistTghCutsOther->Add(hptD0vsptcquarkTGHCother);
4917   flistTghCutsOther->Add(hpD0vspcquarkTGHCother);
4918
4919   TH1F *hd0zD0ptTGHCother;
4920   TH1F *hInvMassD0TGHCother,*hInvMassD0barTGHCother;
4921   TH2F *hInvMassPtTGHCother=new TH2F("hInvMassPtTGHCother","Candidate p_{t} Vs invariant mass",330,1.700,2.030,200,0.,20.);
4922   THnSparseF *hSparseTGHCother=new THnSparseF("hSparseTGHCother","Candidate Masses, pt, Imp Par;massD0;massD0bar;pt;impactpar;selcase",5,nbinsSparse);
4923   hSparseTGHCother->SetBinEdges(0,massbins);
4924   hSparseTGHCother->SetBinEdges(1,massbins);
4925   hSparseTGHCother->SetBinEdges(2,ptbinsForNsparse);
4926   hSparseTGHCother->SetBinEdges(3,impparbins);
4927   hSparseTGHCother->SetBinEdges(4,massHypoBins); 
4928   flistTghCutsOther->Add(hSparseTGHCother);
4929   TH1F *hetaTGHCother;
4930   TH1F *hCosPDPBTGHCother;
4931   TH1F *hCosPcPDTGHCother;
4932   flistTghCutsOther->Add(hInvMassPtTGHCother);
4933 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4934   TH2F *hd0D0VSd0xd0TGHCotherpt;
4935   TH2F *hangletracksVSd0xd0TGHCotherpt;
4936   TH2F *hangletracksVSd0D0TGHCotherpt;
4937   TH1F *hd0xd0TGHCotherpt;
4938
4939   TH2F *hTOFpidTGHCother=new TH2F("hTOFpidTGHCother","TOF time VS momentum",10,0.,4.,50,-50000.,50000.);
4940   flistTghCutsOther->Add(hTOFpidTGHCother);
4941
4942   for(Int_t i=0;i<fnbins;i++){
4943     namehist="hd0zD0ptTGHCother_pt";
4944     namehist+=i;
4945     titlehist="d0(z) Tight Cuts Otherm ptbin=";
4946     titlehist+=i;
4947     hd0zD0ptTGHCother=new TH1F(namehist.Data(),titlehist.Data(),1000,-3000,3000.);
4948     hd0zD0ptTGHCother->SetXTitle("d_{0}(z)    [#mum]");
4949     hd0zD0ptTGHCother->SetYTitle("Entries");
4950     flistTghCutsOther->Add(hd0zD0ptTGHCother);
4951
4952     namehist="hInvMassD0TGHCother_pt";
4953     namehist+=i;
4954     titlehist="Invariant Mass Tight Cuts Other ptbin=";
4955     titlehist+=i;
4956     hInvMassD0TGHCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4957     hInvMassD0TGHCother->SetXTitle("Invariant Mass    [GeV]");
4958     hInvMassD0TGHCother->SetYTitle("Entries");
4959     flistTghCutsOther->Add(hInvMassD0TGHCother);
4960
4961     namehist="hInvMassD0barTGHCother_pt";
4962     namehist+=i;
4963     titlehist="Invariant Mass D0bar Tight Cuts Other ptbin=";
4964     titlehist+=i;
4965     hInvMassD0barTGHCother=new TH1F(namehist.Data(),titlehist.Data(),600,1.600,2.200);
4966     hInvMassD0barTGHCother->SetXTitle("Invariant Mass    [GeV]");
4967     hInvMassD0barTGHCother->SetYTitle("Entries");
4968     flistTghCutsOther->Add(hInvMassD0barTGHCother);
4969
4970     namehist="hetaTGHCother_pt";
4971     namehist+=i;
4972     titlehist="eta Tight Cuts Other ptbin=";
4973     titlehist+=i;
4974     hetaTGHCother=new TH1F(namehist.Data(),titlehist.Data(),100,-3.,3.);
4975     hetaTGHCother->SetXTitle("Pseudorapidity");
4976     hetaTGHCother->SetYTitle("Entries");
4977     flistTghCutsOther->Add(hetaTGHCother);
4978
4979     namehist="hCosPDPBTGHCother_pt";
4980     namehist+=i;
4981     titlehist="Cosine between D0 momentum and B momentum, ptbin=";
4982     titlehist+=i;
4983     hCosPDPBTGHCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4984     hCosPDPBTGHCother->SetXTitle("Cosine between D0 momentum and B momentum");
4985     hCosPDPBTGHCother->SetYTitle("Entries");
4986     flistTghCutsOther->Add(hCosPDPBTGHCother);
4987
4988     namehist="hCosPcPDTGHCother_pt";
4989     namehist+=i;
4990     titlehist="Cosine between cquark momentum and D0 momentum, ptbin=";
4991     titlehist+=i;
4992     hCosPcPDTGHCother=new TH1F(namehist.Data(),titlehist.Data(),50,-1.,1.);
4993     hCosPcPDTGHCother->SetXTitle("Cosine between c quark momentum and D0 momentum");
4994     hCosPcPDTGHCother->SetYTitle("Entries");
4995     flistTghCutsOther->Add(hCosPcPDTGHCother);
4996
4997 // %%%%%%%%%%% HERE THE ADDITIONAL HISTS %%%%%%%%%%%%%%%%%
4998     namehist="hd0xd0TGHCother_pt";
4999     namehist+=i;
5000     titlehist="d0xd0 Tight Cuts Other ptbin=";
5001     titlehist+=i;
5002     hd0xd0TGHCotherpt=new TH1F(namehist.Data(),titlehist.Data(),1000,-50000.,10000.);
5003     hd0xd0TGHCotherpt->SetXTitle("d_{0}^{K}xd_{0}^{#pi}   [#mum^2]");
5004     hd0xd0TGHCotherpt->SetYTitle("Entries");
5005     flistTghCutsOther->Add(hd0xd0TGHCotherpt);
5006
5007
5008     namehist="hd0D0VSd0xd0TGHCother_pt";
5009     namehist+=i;
5010     titlehist="d_{0}^{D^{0}} Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Other ptbin=";
5011     titlehist+=i;
5012     hd0D0VSd0xd0TGHCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,100,-300,300);
5013     hd0D0VSd0xd0TGHCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
5014     hd0D0VSd0xd0TGHCotherpt->SetYTitle(" d_{0}^{D^{0}}    [#mum]");
5015     flistTghCutsOther->Add(hd0D0VSd0xd0TGHCotherpt);
5016     
5017     
5018     namehist="hangletracksVSd0xd0TGHCother_pt";
5019     namehist+=i;
5020     titlehist="Angle between K and #pi tracks Vs d_{0}^{K}xd_{0}^{#pi} Tight Cuts Other ptbin=";
5021     titlehist+=i;
5022     hangletracksVSd0xd0TGHCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-50000.,30000.,40,-0.1,3.24);
5023     hangletracksVSd0xd0TGHCotherpt->SetXTitle(" d_{0}^{K}xd_{0}^{#pi} [#mum]");
5024     hangletracksVSd0xd0TGHCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
5025     flistTghCutsOther->Add(hangletracksVSd0xd0TGHCotherpt);
5026     
5027
5028     namehist="hangletracksVSd0D0TGHCother_pt";
5029     namehist+=i;
5030     titlehist="Angle between K and #pi tracks Vs d_{0}^{D^{0}} Tight Cuts Other ptbin=";
5031     titlehist+=i;
5032     hangletracksVSd0D0TGHCotherpt=new TH2F(namehist.Data(),titlehist.Data(),200,-400.,400.,40,-0.12,3.24);
5033     hangletracksVSd0D0TGHCotherpt->SetXTitle(" d_{0}^{D^{0}} [#mum]");
5034     hangletracksVSd0D0TGHCotherpt->SetYTitle(" angle between K and #p tracks  [rad]");
5035     flistTghCutsOther->Add(hangletracksVSd0D0TGHCotherpt);
5036     
5037   }
5038   // %%%%%%%% END OF NEW HISTOS %%%%%%%%%%%%%
5039   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5040
5041
5042
5043
5044
5045   //############# d0 D0 histos ###############à
5046   TH1F *hd0D0TGHCotherPM = new TH1F("hd0D0TGHCotherPM","D^{0} impact par. plot , Tight Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
5047   hd0D0TGHCotherPM->SetXTitle("Impact parameter [#mum]");
5048   hd0D0TGHCotherPM->SetYTitle("Entries");
5049
5050   TH1F *hd0D0VtxTrueTGHCotherPM = new TH1F("hd0D0VtxTrueTGHCotherPM","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, Other,Mass Peak (All momenta)",1000,-1000.,1000.);
5051   hd0D0VtxTrueTGHCotherPM->SetXTitle("Impact parameter [#mum]");
5052   hd0D0VtxTrueTGHCotherPM->SetYTitle("Entries");
5053
5054   TH1F *hMCd0D0TGHCotherPM = new TH1F("hMCd0D0TGHCotherPM","D^{0} impact par. plot, Tight Cuts, Other,Mass Peak  (All momenta)",1000,-1000.,1000.);
5055   hMCd0D0TGHCotherPM->SetXTitle("MC Impact parameter [#mum]");
5056   hMCd0D0TGHCotherPM->SetYTitle("Entries");
5057
5058   TH1F *hd0D0TGHCotherSB = new TH1F("hd0D0TGHCotherSB","D^{0} impact par. plot , Tight Cuts ,Other,Mass Peak (All momenta)",1000,-1000.,1000.);
5059   hd0D0TGHCotherSB->SetXTitle("Impact parameter [#mum]");
5060   hd0D0TGHCotherSB->SetYTitle("Entries");
5061
5062   TH1F *hd0D0VtxTrueTGHCotherSB = new TH1F("hd0D0VtxTrueTGHCotherSB","D^{0} impact par. w.r.t. True Vtx, Tight Cuts, Other,Mass Peak (All momenta)",1000,-1000.,1000.);
5063   hd0D0VtxTrueTGHCotherSB->SetXTitle("Impact parameter [#mum]");
5064   hd0D0VtxTrueTGHCotherSB->SetYTitle("Entries");
5065
5066   TH1F *hMCd0D0TGHCotherSB = new TH1F("hMCd0D0TGHCotherSB","D^{0} impact par. plot, Tight Cuts, Other,Mass Peak  (All momenta)",1000,-1000.,1000.);
5067   hMCd0D0TGHCotherSB->SetXTitle("MC Impact parameter [#mum]");
5068   hMCd0D0TGHCotherSB->SetYTitle("Entries");
5069
5070   flistTghCutsOther->Add(hd0D0TGHCotherPM);
5071   flistTghCutsOther->Add(hd0D0VtxTrueTGHCotherPM);
5072   flistTghCutsOther->Add(hMCd0D0TGHCotherPM);
5073   flistTghCutsOther->Add(hd0D0TGHCotherSB);
5074   flistTghCutsOther->Add(hd0D0VtxTrueTGHCotherSB);
5075   flistTghCutsOther->Add(hMCd0D0TGHCotherSB);
5076   
5077   TH1F *hd0D0ptTGHCotherPM;
5078   TH1F *hMCd0D0ptTGHCotherPM;
5079   TH1F *hd0D0VtxTrueptTGHCotherPM;
5080   TH1F *hd0D0ptTGHCotherSB;
5081   TH1F *hMCd0D0ptTGHCotherSB;
5082   TH1F *hd0D0VtxTrueptTGHCotherSB;
5083   namehist="hd0D0ptTGHCother_";
5084   titlehist="D^{0} impact par. plot, Tight Cuts, Other, ";
5085   for(Int_t i=0;i<fnbins;i++){
5086     strnamept=namehist;
5087     strnamept.Append("PkMss_pt");
5088     strnamept+=i;
5089
5090     strtitlept=titlehist;
5091     strtitlept.Append(" Mass Peak, ");
5092     strtitlept+=fptbins[i];
5093     strtitlept.Append("<= pt <");
5094     strtitlept+=fptbins[i+1];
5095     strtitlept.Append(" [GeV/c]");
5096     
5097     hd0D0ptTGHCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
5098     hd0D0ptTGHCotherPM->SetXTitle("Impact parameter [#mum] ");
5099     hd0D0ptTGHCotherPM->SetYTitle("Entries");
5100     flistTghCutsOther->Add(hd0D0ptTGHCotherPM);
5101
5102     strnamept.ReplaceAll("hd0D0","hMCd0D0");
5103     hMCd0D0ptTGHCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
5104     hMCd0D0ptTGHCotherPM->SetXTitle("MC Impact parameter [#mum] ");
5105     hMCd0D0ptTGHCotherPM->SetYTitle("Entries");
5106     flistTghCutsOther->Add(hMCd0D0ptTGHCotherPM);
5107  
5108
5109     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
5110     hd0D0VtxTrueptTGHCotherPM = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
5111     hd0D0VtxTrueptTGHCotherPM->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
5112     hd0D0VtxTrueptTGHCotherPM->SetYTitle("Entries");
5113     flistTghCutsOther->Add(hd0D0VtxTrueptTGHCotherPM);
5114     
5115     strnamept=namehist;
5116     strnamept.Append("SBMss_pt");
5117     strnamept+=i;
5118
5119     strtitlept=titlehist;
5120     strtitlept.Append(" Side Bands, ");
5121     strtitlept+=fptbins[i];
5122     strtitlept.Append("<= pt <");
5123     strtitlept+=fptbins[i+1];
5124     strtitlept.Append(" [GeV/c]");
5125     
5126     hd0D0ptTGHCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
5127     hd0D0ptTGHCotherSB->SetXTitle("Impact parameter [#mum] ");
5128     hd0D0ptTGHCotherSB->SetYTitle("Entries");
5129     flistTghCutsOther->Add(hd0D0ptTGHCotherSB);
5130
5131     strnamept.ReplaceAll("hd0D0","hMCd0D0");
5132     hMCd0D0ptTGHCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
5133     hMCd0D0ptTGHCotherSB->SetXTitle("MC Impact parameter [#mum] ");
5134     hMCd0D0ptTGHCotherSB->SetYTitle("Entries");
5135     flistTghCutsOther->Add(hMCd0D0ptTGHCotherSB);
5136
5137     strnamept.ReplaceAll("hMCd0D0","hd0D0VtxTrue");
5138     hd0D0VtxTrueptTGHCotherSB = new TH1F(strnamept.Data(),strtitlept.Data(),1000,-1000.,1000.);
5139     hd0D0VtxTrueptTGHCotherSB->SetXTitle("Impact parameter w.r.t. True Vtx [#mum] ");
5140     hd0D0VtxTrueptTGHCotherSB->SetYTitle("Entries");
5141     flistTghCutsOther->Add(hd0D0VtxTrueptTGHCotherSB);
5142   }
5143   Printf("AFTER DATA HISTOS CREATION \n");
5144 }
5145
5146 //________________________________________________________________________
5147 void AliAnalysisTaskSECharmFraction::UserExec(Option_t */*option*/)
5148 {
5149   // Execute analysis for current event:
5150   // heavy flavor candidates association to MC truth
5151   
5152   AliAODEvent *aod = dynamic_cast<AliAODEvent*> (InputEvent());
5153   if (!aod) {
5154     Printf("ERROR: aod not available");
5155     return;
5156   }
5157   TClonesArray *arrayD0toKpi;
5158   if(!aod && AODEvent() && IsStandardAOD()) {
5159     // In case there is an AOD handler writing a standard AOD, use the AOD 
5160     // event in memory rather than the input (ESD) event.    
5161     aod = dynamic_cast<AliAODEvent*> (AODEvent());
5162     // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
5163     // have to taken from the AOD event hold by the AliAODExtension
5164     AliAODHandler* aodHandler = (AliAODHandler*) 
5165       ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
5166
5167     if(aodHandler->GetExtensions()) {
5168       AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
5169       AliAODEvent* aodFromExt = ext->GetAOD();
5170       if(fLikeSign){
5171         // load 2Prong Like Sign                                                   
5172         arrayD0toKpi =(TClonesArray*)aodFromExt->GetList()->FindObject("LikeSign2Prong");
5173         if(!arrayD0toKpi) {
5174           Printf("AliAnalysisTaskSECharmFraction::UserExec: LikeSign branch not found!\n");
5175           return;
5176         }
5177       }
5178       else {
5179         // load D0->Kpi candidates                                                   
5180         arrayD0toKpi = (TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
5181         if(!arrayD0toKpi) {
5182           Printf("AliAnalysisTaskSECharmFraction::UserExec: D0toKpi branch not found!\n");
5183           return;
5184         }
5185       }  
5186     }
5187   } else {
5188     if(fLikeSign){
5189       // load 2Prong Like Sign                                                   
5190       arrayD0toKpi =(TClonesArray*)aod->GetList()->FindObject("LikeSign2Prong");
5191       if(!arrayD0toKpi) {
5192         Printf("AliAnalysisTaskSECharmFraction::UserExec: LikeSign branch not found!\n");
5193         return;
5194       }
5195     }
5196     else {
5197       // load D0->Kpi candidates                                                   
5198       arrayD0toKpi = (TClonesArray*)aod->GetList()->FindObject("D0toKpi");
5199       if(!arrayD0toKpi) {
5200         Printf("AliAnalysisTaskSECharmFraction::UserExec: D0toKpi branch not found!\n");
5201         return;
5202       }
5203     }     
5204   }
5205
5206
5207   if(!arrayD0toKpi) {
5208     printf("AliAnalysisTaskSECharmFraction::UserExec: input branch not found!\n");
5209     return;
5210   }
5211
5212   //histogram filled with 1 for every AOD
5213   fNentries->Fill(0);
5214   
5215   // trigger class for PbPb C0SMH-B-NOPF-ALLNOTRD, C0SMH-B-NOPF-ALL
5216   //  TString trigclass=aod->GetFiredTriggerClasses();
5217   // if(trigclass.Contains("C0SMH-B-NOPF-ALLNOTRD") || trigclass.Contains("C0SMH-B-NOPF-ALL")) fNentries->Fill(14);
5218   
5219   Bool_t isEventSelTGHT=kTRUE,isEventSelLOOSE=kTRUE;
5220   if(!fCutsTight->IsEventSelected(aod)){
5221     isEventSelTGHT=kFALSE;
5222     if(fCutsTight->GetWhyRejection()==1){ 
5223       // rejected for pileup
5224       fNentries->Fill(13);
5225     
5226     PostData(1,fNentries);
5227     return;
5228     }
5229   }
5230   if(!fCutsLoose->IsEventSelected(aod)){
5231     isEventSelLOOSE=kFALSE;
5232     if(fCutsLoose->GetWhyRejection()==1){
5233       // rejected for pileup    
5234       fNentries->Fill(13);
5235       PostData(1,fNentries);
5236
5237     return;
5238     }
5239   }
5240   
5241   if(!(isEventSelTGHT||isEventSelLOOSE)){
5242       PostData(1,fNentries);
5243       return;
5244   }
5245   // fix for temporary bug in ESDfilter
5246   // the AODs with null vertex pointer didn't pass the PhysSel
5247   if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001) return;
5248   // AOD primary vertex
5249   AliAODVertex *vtx1 = (AliAODVertex*)aod->GetPrimaryVertex();
5250   TString primTitle = vtx1->GetTitle();
5251   if(primTitle.Contains("VertexerTracks") && vtx1->GetNContributors()>0) {   
5252     fNentries->Fill(3);
5253   }
5254   else {
5255     PostData(1,fNentries);
5256     return;
5257     
5258   }
5259
5260   
5261   TClonesArray *arrayMC=0x0;
5262   AliAODMCHeader *aodmcHeader=0x0;
5263   Double_t vtxTrue[3];
5264
5265   if(fReadMC){
5266     // load MC particles
5267     arrayMC = 
5268       (TClonesArray*)aod->GetList()->FindObject(AliAODMCParticle::StdBranchName());
5269     if(!arrayMC) {
5270       Printf("AliAnalysisTaskSECharmFraction::UserExec: MC particles branch not found!\n");
5271       return;
5272     }
5273     // load MC header
5274     aodmcHeader = 
5275       (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
5276     if(!aodmcHeader) {
5277       Printf("AliAnalysisTaskSECharmFraction::UserExec: MC header branch not found!\n");
5278       return;
5279     }
5280     // MC primary vertex
5281     aodmcHeader->GetVertex(vtxTrue);
5282     // FILL HISTOS FOR D0 mesons, c quarks and D0 from B properties
5283     FillHistoMCproperties(arrayMC);
5284   }
5285  
5286
5287
5288   //Printf("There are %d tracks in this event", aod->GetNumberOfTracks());
5289   //  Int_t nTotHF=0,nTotDstar=0,nTot3Prong=0;
5290   Int_t nTotD0toKpi=0;
5291   Int_t okd0tight,okd0bartight,okd0loose,okd0barloose,okd0tightnopid,okd0bartightnopid;
5292   Bool_t isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,isSideBand;
5293   Bool_t isinacceptance;
5294   Int_t signallevel=-1;
5295   Int_t ptbin,nVtx; 
5296   //  const  Int_t nptbins=10;
5297   Double_t invMassD0,invMassD0bar,ptD0,massmumtrue;
5298   
5299  
5300   AliAODRecoDecayHF *aodDMC=0x0;// to be used to create a fake true sec vertex
5301   // make trkIDtoEntry register (temporary)
5302   Int_t trkIDtoEntry[100000];
5303   fptAll=0.;
5304   fptAllSq=0.;
5305   fptMax[0]=0.;
5306   fptMax[1]=0.;
5307   fptMax[2]=0.;
5308   for(Int_t it=0;it<aod->GetNumberOfTracks();it++) {
5309     AliAODTrack *track = aod->GetTrack(it);
5310     fptAll+=track->Pt();
5311     fptAllSq+=track->Pt()*track->Pt();
5312     if(track->Pt()>fptMax[0]){
5313       fptMax[2]=fptMax[1];
5314       fptMax[1]=fptMax[0];
5315       fptMax[0]=track->Pt();
5316     }
5317     else if(track->Pt()>fptMax[1]){
5318       fptMax[2]=fptMax[1];
5319       fptMax[1]=track->Pt();
5320     }
5321     else if(track->Pt()>fptMax[2])fptMax[2]=track->Pt();
5322     if(track->GetID()<0) {
5323       //printf("Track ID <0, id= %d\n",track->GetID());
5324       PostData(1,fNentries);
5325       return;
5326     }
5327     trkIDtoEntry[track->GetID()]=it;
5328   }
5329   
5330
5331   // loop over D0->Kpi candidates
5332   Int_t nD0toKpi = arrayD0toKpi->GetEntriesFast();
5333   nTotD0toKpi += nD0toKpi;
5334   //    cout<<"Number of D0->Kpi: "<<nD0toKpi<<endl;
5335   
5336   for (Int_t iD0toKpi = 0; iD0toKpi < nD0toKpi; iD0toKpi++) {
5337     if(aodDMC!=0x0)delete aodDMC;
5338       
5339     isPeakD0=kFALSE;
5340     isPeakD0bar=kFALSE;
5341     isSideBandD0=kFALSE;
5342     isSideBandD0bar=kFALSE;
5343     isSideBand=kFALSE;
5344     isinacceptance=kFALSE;
5345     okd0tight=0;
5346     okd0bartight=0;
5347     okd0tightnopid=0;
5348     okd0bartightnopid=0;
5349     okd0loose=0;
5350     okd0barloose=0;
5351   
5352     signallevel=-1;
5353     
5354
5355     AliAODRecoDecayHF2Prong *d = (AliAODRecoDecayHF2Prong*)arrayD0toKpi->UncheckedAt(iD0toKpi);
5356     Bool_t unsetvtx=kFALSE;
5357     if(!d->GetOwnPrimaryVtx()) {
5358       d->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
5359       unsetvtx=kTRUE;
5360     }
5361       
5362     
5363     //############# SIGNALLEVEL DESCRIPTION #####################
5364     // TO BE CONSIDERED WITH GREAT CARE, only =0 and =1 (and MC selection when possible) are reliable
5365     //                                    For the other signallevel numbers the order in which cut are applied is relevant 
5366     // signallevel =0,1: is selected as signal,is signal (MC)
5367     //               from 2 to 20: MC information
5368     //              from 21 to 29: "detector" selection (acceptance, pt, refits) 
5369     //                                                  21: acceptance, eta (N.B. before 24 May was signallevel=9)     
5370     //                                                  22: isinfiducialacceptance
5371     //                                                  23: single track p
5372     //                                                  25: ITS cluster selection
5373     //                                                  26: TPC refit
5374     //                                                  27: ITS refit
5375     //                                                  28: no (TOF||TPC) pid information (no kTOFpid,kTOFout,kTIME,kTPCpid,...)
5376     //
5377     //              from 30 to 39: PID selection
5378     //                                                  31: no Kaon compatible tracks found between daughters
5379     //                                                  32: no Kaon identified tracks found (strong sel. at low momenta)
5380     //                                                  33: both mass hypotheses are rejected 
5381     //              from 40 to 45: standard cut selection
5382     //              from 45 to 49: special cut signal kinematic selection
5383     //                                                  46: pstar cut
5384     //              from 50 to 60: special cut selection
5385     //                                                  51: Nvtx contributors
5386     //                                                  52: angle between tracks
5387     //                                                  53: vtx not reconstructed when excludind daughters 
5388     //                                                  54: track not propagated to dca when the vtx is recalculated
5389     //                                                  55: single track normalized impact par.
5390     //                                                  56: normalized d0xd0 
5391     //                                                  57: d0xd0 cut with vtx on the fly
5392     //                                                  58,59: cut normalized decay lenght and decay lenght
5393     //####### DATA SELECTION ####################################
5394     //
5395     // ######## CHECK FOR ACCEPTANCE ##########
5396     ptD0=d->Pt();
5397     ptbin=fCutsTight->PtBin(ptD0);
5398     //    Double_t relangle=d->ProngsRelAngle(0,1);
5399     // UPV: HERE TO CHANGE WITH:
5400      //  isinacceptance = (TMath::Abs(d->EtaProng(0))<fAcceptanceCuts[0]&&TMath::Abs(d->EtaProng(1))<fAcceptanceCuts[0]); //eta acceptance 
5401        
5402     //######## INVARIANT MASS SELECTION ###############
5403     CheckInvMassD0(d,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar);
5404     if((isSideBandD0||isSideBandD0bar)){
5405          if(!(isPeakD0||isPeakD0bar))isSideBand=kTRUE; //(isSideBand no more used in the following, can remove it)
5406          else {// AVOID TO CONSIDER IN THE SIDEBAND  THOSE  CANDIDATES FOR WHICH 1 MASS HYPOTHESIS IS IN THE PEAK REGION
5407            isSideBand=kFALSE; 
5408            isSideBandD0=kFALSE;
5409            isSideBandD0bar=kFALSE;         
5410          }
5411     }
5412
5413
5414     // INVESTIGATE SIGNAL TYPE : ACCESS TO MC INFORMATION
5415     if(fReadMC){
5416       aodDMC=GetD0toKPiSignalType(d,arrayMC,signallevel,massmumtrue,vtxTrue);
5417     }
5418     else signallevel=0;
5419     //   ACCOUNT FOR ETA & ITS CLUSTER SELECTION
5420     if(fFastAnalysis<1){  // ALREADY DONE BY AliRDHFCutsD0ToKPi selection
5421       isinacceptance=fCutsTight->AreDaughtersSelected(d); 
5422       if(!isinacceptance)signallevel=21;
5423     }
5424     if(!fCutsTight->IsInFiducialAcceptance(ptD0,d->Y(421))){
5425       isinacceptance=kFALSE;
5426       signallevel=22; 
5427     }
5428    
5429     //###################################################################################
5430     //
5431     // ################ SPECIAL ADDITIONAL CUTS FOR SIGNAL SEARCH #######################
5432     //  UPV: ITS CLUSTER SELECTION ALREADY DONE , COUNT THEM THE SAME
5433     //  
5434     Int_t nlayers=0,nSPD=0,nSSD=0;
5435     Bool_t spd1=kFALSE;
5436     if(fFastAnalysis<1){
5437       for(Int_t idg=0;idg<d->GetNDaughters();idg++){
5438         
5439         AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
5440         if(TESTBIT(dgTrack->GetITSClusterMap(),5)){
5441           nlayers++;
5442           nSSD++;
5443         }
5444       if(TESTBIT(dgTrack->GetITSClusterMap(),4)){
5445         nlayers++;
5446         nSSD++;
5447       }
5448       if(TESTBIT(dgTrack->GetITSClusterMap(),3))nlayers++;
5449       if(TESTBIT(dgTrack->GetITSClusterMap(),2))nlayers++;
5450       if(TESTBIT(dgTrack->GetITSClusterMap(),1)){
5451         nlayers++;
5452         nSPD++;
5453       }
5454       if(TESTBIT(dgTrack->GetITSClusterMap(),0)){
5455         nlayers++;
5456         nSPD++;
5457         spd1=kTRUE;
5458       }
5459       }
5460     }
5461     /*
5462       // ######## NOW SELECTION ##########
5463       if(dgTrack->Pt()<0.5){
5464         // ########## k-Both selection ##############
5465         if(nlayers<5)signallevel=25;
5466         if(nSPD<2)signallevel=25;
5467       }
5468       else if(dgTrack->Pt()<1.){
5469         // ########## 4 its clust (1 SSD,1 SPD) && k-Any selection ##############
5470         if(nlayers<4)signallevel=25;
5471         if(nSSD<1)signallevel=25;
5472         if(nSPD<1)signallevel=25;
5473       }
5474       else{ 
5475         // ########## 3 its clust (1 SPD, 1 SSD) && k-Any selection ##########
5476         if(nlayers<3)signallevel=25;
5477         if(nSSD<1)signallevel=25;
5478         if(nSPD<1)signallevel=25;           
5479       }
5480     }
5481   */
5482
5483
5484    
5485
5486     //###########   END OF SPECIAL CUTS        ######################
5487     //
5488     //###############################################################
5489
5490     // NOW APPLY CUTS
5491     // Check tighter cuts w/o PID:
5492     // 
5493     //    Int_t ncont=vtx1->GetNContributors();   
5494     if(vtx1->GetNContributors()<1)signallevel=51;
5495     Bool_t defaultNC=SpecialSelD0(d,nVtx);
5496     if(isEventSelTGHT){
5497       Bool_t iscutusingpid=fCutsTight->GetIsUsePID();
5498       fCutsTight->SetUsePID(kFALSE);
5499       Int_t isSelectedTightNoPid=fCutsTight->IsSelected(d,AliRDHFCuts::kAll,aod);
5500       switch(isSelectedTightNoPid){
5501       case 0:
5502         okd0tightnopid=kFALSE;
5503         okd0bartightnopid=kFALSE;
5504         break;
5505       case 1:
5506         okd0tightnopid=kTRUE;
5507         okd0bartightnopid=kFALSE;
5508         break;
5509       case 2:
5510         okd0tightnopid=kFALSE;
5511         okd0bartightnopid=kTRUE;
5512         break;
5513       case 3:
5514         okd0tightnopid=kTRUE;
5515         okd0bartightnopid=kTRUE;
5516         break;
5517       default:
5518         okd0tightnopid=kTRUE;
5519         okd0bartightnopid=kTRUE;
5520         break;
5521       }
5522       
5523       if(!defaultNC){      
5524         okd0tightnopid=kFALSE;
5525         okd0bartightnopid=kFALSE;
5526       }
5527       //    signallevel=fCutsTight->GetSelectionStep();
5528       fSignalType->Fill(signallevel);
5529       
5530     
5531       
5532       
5533       // ######### SPECIAL SELECTION PID ##############
5534       fCutsTight->SetUsePID(iscutusingpid);
5535       Int_t isSelectedPid=fCutsTight->IsSelected(d,AliRDHFCuts::kPID,aod);
5536       Int_t isSelectedTight=fCutsTight->CombineSelectionLevels(3,isSelectedTightNoPid,isSelectedPid);
5537       switch(isSelectedTight){
5538       case 0:
5539         okd0tight=kFALSE;
5540         okd0bartight=kFALSE;
5541         break;
5542       case 1:
5543         okd0tight=kTRUE;
5544         okd0bartight=kFALSE;
5545         break;
5546       case 2:
5547         okd0tight=kFALSE;
5548         okd0bartight=kTRUE;
5549         break;
5550       case 3:
5551         okd0tight=kTRUE;
5552         okd0bartight=kTRUE;
5553         break;
5554       default:
5555         okd0tight=kTRUE;
5556         okd0bartight=kTRUE;
5557         break;
5558       }
5559     }
5560     else{
5561       fSignalType->Fill(signallevel);
5562     }
5563     
5564     if(((isPeakD0&&okd0tight)||(isPeakD0bar&&okd0bartight))&&isinacceptance)fSignalTypeTghCuts->Fill(signallevel);
5565     
5566     if(isEventSelLOOSE){
5567       // CHECK LOOSER CUTS 
5568       //ptbin=SetStandardCuts(ptD0,flargeInvMassCut);
5569       
5570       //    d->SelectD0(fCutsLoose->GetD0toKpiCuts(),okd0loose,okd0barloose);
5571       Int_t isSelectedLoose=fCutsLoose->IsSelected(d,AliRDHFCuts::kAll,aod);
5572       switch(isSelectedLoose){
5573       case 0:
5574         okd0loose=kFALSE;
5575         okd0barloose=kFALSE;
5576         break;
5577       case 1:
5578         okd0loose=kTRUE;
5579         okd0barloose=kFALSE;
5580         break;
5581       case 2:
5582         okd0loose=kFALSE;
5583         okd0barloose=kTRUE;
5584       break;
5585       case 3:
5586         okd0loose=kTRUE;
5587         okd0barloose=kTRUE;
5588         break;
5589       default:
5590         okd0loose=kTRUE;
5591         okd0barloose=kTRUE;
5592         break;
5593       }
5594       if(!defaultNC){
5595         okd0loose=kFALSE;
5596         okd0barloose=kFALSE;
5597       }
5598     }
5599     
5600   
5601
5602     if(((isPeakD0&&okd0loose)||(isPeakD0bar&&okd0barloose))&&isinacceptance)fSignalTypeLsCuts->Fill(signallevel);
5603    
5604     
5605   
5606     //###################    FILL HISTOS      ########################
5607     //################################################################
5608     //
5609     //######## improvement: SPEED HERE CAN BE IMPROVED: CALCULATE ONCE AND FOR ALL 
5610     //            CANDIDATE VARIABLES   
5611
5612
5613
5614     //NO CUTS Case: force okD0 and okD0bar = kTRUE
5615     //     special cuts are applied also in the "NO Cuts" case
5616     //
5617     //
5618     // SPECIAL modification:
5619     // IMPORTANT!!!!!!  ONLY FOR TEMPORARY CONVENIENCE
5620     // IF fusePID is kTRUE, NO CUTS BECOMES NO PID case with tight cuts (fill signal histos when 30<=signallevel<40 )!!!!!!!!!!  
5621     if((!fusePID)&&isEventSelTGHT){
5622       okd0tightnopid=defaultNC;
5623       okd0bartightnopid=defaultNC;
5624     }        
5625     // ############ MISALIGN HERE: TEMPORARY SOLUTION ##########
5626     //d->Misalign("full14");
5627     if(signallevel==1||signallevel==0)FillHistos(d,flistNoCutsSignal,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);    // else if(fusePID&&signallevel>=30&&signallevel<40)FillHistos(d,flistNoCutsSignal,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);// OLD LINE, COULD BE REMOVED 
5628     else if(signallevel==2)FillHistos(d,flistNoCutsFromDstar,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5629     else if(signallevel==3||signallevel==4)FillHistos(d,flistNoCutsFromB,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5630     else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10||signallevel==9)FillHistos(d,flistNoCutsBack,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5631     else if(signallevel==5||signallevel==6)FillHistos(d,flistNoCutsOther,ptbin,okd0tightnopid,okd0bartightnopid,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5632     
5633
5634     
5635     //LOOSE CUTS Case
5636     if(signallevel==1||signallevel==0)FillHistos(d,flistLsCutsSignal,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5637     else if(signallevel==2)FillHistos(d,flistLsCutsFromDstar,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5638     else if(signallevel==3||signallevel==4)FillHistos(d,flistLsCutsFromB,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5639     else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10)FillHistos(d,flistLsCutsBack,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5640     else if(signallevel==5||signallevel==6)FillHistos(d,flistLsCutsOther,ptbin,okd0loose,okd0barloose,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5641
5642     //TIGHT CUTS Case
5643     if(signallevel==1||signallevel==0)FillHistos(d,flistTghCutsSignal,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5644     else if(signallevel==2)FillHistos(d,flistTghCutsFromDstar,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5645     else if(signallevel==3||signallevel==4)FillHistos(d,flistTghCutsFromB,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5646     else if(signallevel==-1||signallevel==7||signallevel==8||signallevel==10)FillHistos(d,flistTghCutsBack,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5647     else if(signallevel==5||signallevel==6)FillHistos(d,flistTghCutsOther,ptbin,okd0tight,okd0bartight,invMassD0,invMassD0bar,isPeakD0,isPeakD0bar,isSideBandD0,isSideBandD0bar,massmumtrue,aodDMC,vtxTrue);
5648     
5649     
5650
5651
5652     // ######## PRINTING INFO FOR D0-like candidate
5653
5654     if(nSPD==2&&ptD0>2.){
5655       if((okd0tight&&TMath::Abs(invMassD0-1.864)<0.01)||(okd0bartight&&TMath::Abs(invMassD0bar-1.864)<0.01)){
5656         //printf("INFO FOR DRAWING: \n pt: %f \n Rapidity: %f \n Period Number: %d \n Run Number: %d \n BunchCrossNumb: %d \n OrbitNumber: %d \n",ptD0,d->Y(421),aod->GetPeriodNumber(),aod->GetRunNumber(),aod->GetBunchCrossNumber(),aod->GetOrbitNumber());
5657         //printf("PrimVtx NContributors: %d \n Prongs Rel Angle: %f \n \n",ncont,relangle);
5658       }
5659     }
5660     if(aodDMC!=0x0){
5661       delete aodDMC;
5662       aodDMC=0x0;
5663     }
5664     
5665     if(unsetvtx) d->UnsetOwnPrimaryVtx();
5666     
5667   }
5668   
5669   // ####################### POST OUTPUT TLIST DATA #########################
5670   // ####### histo for #AOD entries already posted
5671   PostData(1,fNentries);
5672   PostData(2,fSignalType);
5673   PostData(3,fSignalTypeLsCuts);
5674   PostData(4,fSignalTypeTghCuts);
5675   PostData(5,flistMCproperties);
5676   PostData(6,flistNoCutsSignal);
5677   PostData(7,flistNoCutsBack);
5678   PostData(8,flistNoCutsFromB);
5679   PostData(9,flistNoCutsFromDstar);
5680   PostData(10,flistNoCutsOther);
5681   PostData(11,flistLsCutsSignal);
5682   PostData(12,flistLsCutsBack);
5683   PostData(13,flistLsCutsFromB);
5684   PostData(14,flistLsCutsFromDstar);
5685   PostData(15,flistLsCutsOther);
5686   PostData(16,flistTghCutsSignal);
5687   PostData(17,flistTghCutsBack);
5688   PostData(18,flistTghCutsFromB);
5689   PostData(19,flistTghCutsFromDstar);
5690   PostData(20,flistTghCutsOther);
5691
5692   return;
5693 }
5694
5695
5696
5697 //_________________________________________
5698 Int_t  AliAnalysisTaskSECharmFraction::SetStandardCuts(Float_t *&ptbinlimits){
5699   //
5700   // creating cuts for D0 -> Kpi
5701   //
5702
5703   Printf("Using Default Cuts as set in AliAnalysisTaskSECharmFraction \n");
5704   //  const Double_t ptmin = 0.1;
5705   const Double_t ptmax = 9999.;
5706   const Int_t nptbins =13;
5707   const Int_t nvars=9;
5708   Int_t varycuts=-1;
5709   
5710   if(fCutsTight){
5711     delete fCutsTight;fCutsTight=NULL;
5712   }
5713   if(fCutsLoose){
5714     delete fCutsLoose;fCutsLoose=NULL;
5715   }
5716
5717
5718   fCutsTight = new AliRDHFCutsD0toKpi();
5719   fCutsTight->SetName("D0toKpiCutsStandard");
5720   fCutsTight->SetTitle("Standard Cuts for D0 analysis");
5721   
5722   fCutsLoose = new AliRDHFCutsD0toKpi();
5723   fCutsLoose->SetName("D0toKpiCutsLoose");
5724   fCutsLoose->SetTitle("Loose Cuts for D0 analysis");
5725   
5726   // EVENT CUTS
5727   fCutsTight->SetMinVtxContr(1);
5728   fCutsLoose->SetMinVtxContr(1);
5729   
5730   // TRACKS ON SINGLE TRACKS
5731   AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
5732   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
5733   esdTrackCuts->SetRequireTPCRefit(kTRUE);
5734   esdTrackCuts->SetRequireITSRefit(kTRUE);
5735   //  esdTrackCuts->SetMinNClustersITS(4);
5736   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
5737   esdTrackCuts->SetMinDCAToVertexXY(0.);
5738   esdTrackCuts->SetEtaRange(-0.8,0.8);
5739   esdTrackCuts->SetPtRange(0.3,1.e10);
5740   
5741
5742   fCutsTight->AddTrackCuts(esdTrackCuts);
5743   fCutsLoose->AddTrackCuts(esdTrackCuts);
5744   
5745   
5746
5747   Float_t ptbins[nptbins+1];
5748   ptbins[0]=0.;
5749   ptbins[1]=0.5;        
5750   ptbins[2]=1.;
5751   ptbins[3]=2.;
5752   ptbins[4]=3.;
5753   ptbins[5]=4.;
5754   ptbins[6]=5.;
5755   ptbins[7]=6.;
5756   ptbins[8]=8.;
5757   ptbins[9]=12.;
5758   ptbins[10]=16.;
5759   ptbins[11]=20.;
5760   ptbins[12]=24.;
5761   ptbins[13]=ptmax;
5762
5763   fCutsTight->SetGlobalIndex(nvars,nptbins);
5764   fCutsLoose->SetGlobalIndex(nvars,nptbins);
5765   fCutsTight->SetPtBins(nptbins+1,ptbins);
5766   fCutsLoose->SetPtBins(nptbins+1,ptbins);
5767   
5768   /*    Float_t cutsArrayD0toKpiStand_1[9]={0.200,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.7};   // pt<1 
5769                 Float_t cutsArrayD0toKpiStand_2[9]={0.200,200.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-30000.*1E-8,0.8}; // 1<=pt<2 
5770                 Float_t cutsArrayD0toKpiStand_3[9]={0.200,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-26000.*1E-8,0.94};   // 2<=pt<3 
5771                 Float_t cutsArrayD0toKpiStand_4[9]={0.200,200.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.88};   // 3<=pt<5 
5772                 Float_t cutsArrayD0toKpiStand_5[9]={0.200,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.9};   // 5<=pt<8
5773                 Float_t cutsArrayD0toKpiStand_6[9]={0.200,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.9};   // 8<pt<12
5774                 Float_t cutsArrayD0toKpiStand_7[9]={0.200,150.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-10000.*1E-8,0.9}; // pt>12
5775         */
5776
5777         const Int_t nvary=3;
5778         Float_t varyd0xd0[nptbins][nvary]={{-35000.*1E-8,-40000.*1E-8,-50000.*1E-8},/* pt<0.5*/
5779                                            {-35000.*1E-8,-40000.*1E-8,-50000.*1E-8},/* 0.5<pt<1*/
5780                                            {-25000.*1E-8,-32000.*1E-8,-38000.*1E-8},/* 1<pt<2 */
5781                                            {-22000.*1E-8,-26000.*1E-8,-30000.*1E-8},/* 2<pt<3 */
5782                                            {-12000.*1E-8,-15000.*1E-8,-20000.*1E-8},/* 3<pt<4 */
5783                                            {-12000.*1E-8,-15000.*1E-8,-20000.*1E-8},/* 4<pt<5 */
5784                                            {-5000.*1E-8,-10000.*1E-8,-15000.*1E-8},/* 5<pt<6 */
5785                                            {-5000.*1E-8,-10000.*1E-8,-15000.*1E-8},/* 6<pt<8 */
5786                                            {-0.*1E-8,-10000.*1E-8,-12000.*1E-8},/* 8<pt<12 */
5787                                            {5000.*1E-8,-5000.*1E-8,-10000.*1E-8},/* 12<pt<16 */
5788                                            {5000.*1E-8,-5000.*1E-8,-10000.*1E-8},/* 16<pt<20 */
5789                                            {5000.*1E-8,-5000.*1E-8,-10000.*1E-8},/* 20<pt<24 */
5790                                            {5000.*1E-8,-5000.*1E-8,-10000.*1E-8}};/* pt>24 */
5791        
5792
5793         Float_t varyCosPoint[nptbins][nvary]={{0.75,0.80,0.85},/* 0<pt<0.5 */
5794                                               {0.75,0.80,0.85},/* 0.5<pt<1*/
5795                                               {0.75,0.80,0.85},/* 1<pt<2 */
5796                                               {0.92,0.94,0.95},/* 2<pt<3 */
5797                                               {0.85,0.88,0.91},/* 3<pt<4 */
5798                                               {0.85,0.88,0.91},/* 4<pt<5 */
5799                                               {0.88,0.90,0.92},/* 5<pt<6 */
5800                                               {0.88,0.90,0.92},/* 6<pt<8 */
5801                                               {0.85,0.90,0.92},/* 8<pt<12 */
5802                                               {0.85,0.90,0.92},/* 12<pt<16 */
5803                                               {0.8,0.85,0.9},/* 16<pt<20 */
5804                                               {0.8,0.85,0.9},/* 20<pt<24 */
5805                                               {0.75,0.82,0.9}};/* pt>24 */
5806         
5807
5808         
5809         if(varycuts==-1){//DEFAULT CUTS
5810           varycuts=11;
5811           varyd0xd0[9][1]=-10000.*1E-8;
5812           varyd0xd0[10][1]=-10000.*1E-8;
5813           varyd0xd0[11][1]=-10000.*1E-8;          
5814           varyd0xd0[12][1]=-10000.*1E-8;
5815         }
5816         Int_t vcd0xd0=varycuts/10;
5817         Int_t vccospoint=varycuts%10;
5818         // ######################## STAND VARY CUTS  ###########################################        
5819         Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,varyd0xd0[0][vcd0xd0],varyCosPoint[0][vccospoint]},/* 0<pt<0.5*/
5820                                                         {0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,varyd0xd0[1][vcd0xd0],varyCosPoint[1][vccospoint]},/* 0.5<pt<1*/
5821                                                         {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,varyd0xd0[2][vcd0xd0],varyCosPoint[2][vccospoint]},/* 1<pt<2 */
5822                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[3][vcd0xd0],varyCosPoint[3][vccospoint]},/* 2<pt<3 */
5823                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[4][vcd0xd0],varyCosPoint[4][vccospoint]},/* 3<pt<4 */
5824                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[5][vcd0xd0],varyCosPoint[5][vccospoint]},/* 4<pt<5*/     
5825                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[6][vcd0xd0],varyCosPoint[6][vccospoint]},/* 5<pt<6 */
5826                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[7][vcd0xd0],varyCosPoint[7][vccospoint]},/* 6<pt<8 */
5827                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[8][vcd0xd0],varyCosPoint[8][vccospoint]},/* 8<pt<12 */
5828                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[9][vcd0xd0],varyCosPoint[9][vccospoint]},/*12< pt <16*/
5829                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[10][vcd0xd0],varyCosPoint[10][vccospoint]}, /*16< pt <20*/
5830                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[11][vcd0xd0],varyCosPoint[11][vccospoint]}, /*20< pt <24*/
5831                                                         {0.400,250.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,varyd0xd0[12][vcd0xd0],varyCosPoint[12][vccospoint]}
5832         };/* pt > 24*/
5833         
5834         Float_t cutsMatrixD0toKpiLoose[nptbins][nvars]={{0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.73},/* pt<0.5*/
5835                                                         {0.400,300.*1E-4,0.8,0.3,0.3,1000.*1E-4,1000.*1E-4,-35000.*1E-8,0.73},/* 0.5<pt<1*/
5836                                                         {0.400,300.*1E-4,0.8,0.4,0.4,1000.*1E-4,1000.*1E-4,-25000.*1E-8,0.75},/* 1<pt<2 */
5837                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-15000.*1E-8,0.8},/* 2<pt<3 */
5838                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 3<pt<4 */
5839                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 4<pt<5 */
5840                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 5<pt<6 */
5841                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-8000.*1E-8,0.85},/* 6<pt<8 */
5842                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-5000.*1E-8,0.85},/* 8<pt<12 */
5843                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,-0.*1E-8,0.85},/* 12<pt<16 */
5844                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.85},/* 16<pt<20 */
5845                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.85},/* 20<pt<24 */
5846                                                         {0.400,300.*1E-4,0.8,0.7,0.7,1000.*1E-4,1000.*1E-4,0.*1E-8,0.85}};/* pt>24 */
5847         
5848         
5849         //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
5850         Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
5851         for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
5852         Float_t **cutsMatrixTransposeLoose=new Float_t*[nvars];
5853         for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeLoose[iv]=new Float_t[nptbins];
5854
5855         for (Int_t ibin=0;ibin<nptbins;ibin++){
5856           for (Int_t ivar = 0; ivar<nvars; ivar++){
5857             cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
5858             cutsMatrixTransposeLoose[ivar][ibin]=cutsMatrixD0toKpiLoose[ibin][ivar];
5859             //printf("cutsMatrixD0toKpi[%d][%d] = %f\n",ibin, ivar,cutsMatrixD0toKpiStand[ibin][ivar]);
5860           }
5861         }
5862
5863
5864
5865         fCutsTight->SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
5866         fCutsLoose->SetCuts(nvars,nptbins,cutsMatrixTransposeLoose);
5867
5868
5869         for (Int_t ivar = 0; ivar<nvars; ivar++){
5870           delete [] cutsMatrixTransposeStand[ivar];
5871           delete [] cutsMatrixTransposeLoose[ivar];
5872         }
5873         delete [] cutsMatrixTransposeStand;
5874         cutsMatrixTransposeStand=NULL;
5875         delete [] cutsMatrixTransposeLoose;
5876         cutsMatrixTransposeLoose=NULL;
5877
5878
5879
5880         fCutsTight->SetUseSpecialCuts(kTRUE);
5881         fCutsLoose->SetUseSpecialCuts(kTRUE);
5882         fCutsTight->SetRemoveDaughtersFromPrim(kTRUE);
5883         fCutsLoose->SetRemoveDaughtersFromPrim(kTRUE);
5884         // PID SETTINGS
5885         AliAODPidHF* pidObj=new AliAODPidHF();
5886         //pidObj->SetName("pid4D0");
5887         Int_t mode=1;
5888         const Int_t nlims=2;
5889         Double_t plims[nlims]={0.6,0.8}; //TPC limits in momentum [GeV/c]
5890         Bool_t compat=kTRUE; //effective only for this mode
5891         Bool_t asym=kTRUE;
5892         Double_t sigmas[5]={2.,1.,0.,3.,0.}; //to be checked and to be modified with new implementation of setters by Rossella
5893         pidObj->SetAsym(asym);// if you want to use the asymmetric bands in TPC
5894         pidObj->SetMatch(mode);
5895         pidObj->SetPLimit(plims,nlims);
5896         pidObj->SetSigma(sigmas);
5897         pidObj->SetCompat(compat);
5898         pidObj->SetTPC(kTRUE);
5899         pidObj->SetTOF(kTRUE);
5900
5901         fCutsTight->SetPidHF(pidObj);
5902         fCutsLoose->SetPidHF(pidObj);
5903         delete pidObj; pidObj=NULL;
5904         fCutsTight->SetUsePID(kTRUE);
5905         fCutsLoose->SetUsePID(kTRUE);
5906
5907         fCutsTight->SetUseDefaultPID(kFALSE);
5908         fCutsLoose->SetUseDefaultPID(kFALSE);
5909
5910         // PILE UP REJECTION
5911         fCutsTight->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
5912         fCutsLoose->SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
5913
5914         ptbinlimits=ptbins;
5915         fCutsTight->PrintAll();
5916
5917
5918         return nptbins;
5919  
5920 }
5921
5922
5923 //_________________________________________
5924 Int_t AliAnalysisTaskSECharmFraction::SetStandardCuts(Double_t pt,Double_t invMassCut){
5925   // UPV: this should set the cut object
5926
5927   //#############
5928   // TEMPORARY: to be change in :
5929   //             for(j<nptbins)
5930   //                       if pt < standardptbin[j+1]
5931   //                            SetCuts, bin=j
5932   //                            break 
5933   //                            
5934   // the way the cuts are set is for further development
5935   //   (to be interfaced with AliAnalsysTaskSETuneCuts)
5936   //
5937   // Cuts: 
5938   // 0 = inv. mass half width [GeV]
5939   // 1 = dca [cm]
5940   // 2 = cosThetaStar
5941   // 3 = pTK [GeV/c]
5942   // 4 = pTPi [GeV/c]
5943   // 5 = d0K [cm]   upper limit!
5944   // 6 = d0Pi [cm]  upper limit!
5945   // 7 = d0d0 [cm^2]
5946   // 8 = cosThetaPoint  
5947   Int_t ptbin=-1;
5948
5949  
5950
5951   /*//#######################################################################
5952   //###########################################################################
5953   //                    STANDARD SETS OF CUTS ("tight"~PPR like;  commented loose are more stringent than "tight")
5954   // #########################################################################
5955   Int_t ptbin=-1;
5956   if(pt>0. && pt<=1.) {
5957   ptbin=0;
5958     fCutsTight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0002,0.5);
5959     // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
5960     fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.3,0.3,1.,1.,-0.0002,0.7);
5961   }   
5962   if(pt>1. && pt<=2.) {
5963     ptbin=1;  
5964     fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,-0.0002,0.6);
5965     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
5966     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.7);
5967     //printf("I'm in the bin %d\n",ptbin);
5968   }
5969   if(pt>2. && pt<=3.) {
5970     ptbin=2;  
5971     fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,-0.0002,0.6);
5972     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
5973     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.7);
5974     //printf("I'm in the bin %d\n",ptbin);
5975   } 
5976   if(pt>3. && pt<=5.){
5977     ptbin=3;  
5978     fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.0001,0.8);
5979     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
5980     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.4,0.4,1.,1.,-0.0001,0.75);
5981     //printf("I'm in the bin %d\n",ptbin);
5982   }
5983   if(pt>5.){
5984     ptbin=4;
5985     fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00005,0.8);
5986     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
5987     fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.00005,0.75);
5988   }//if(pt>5)
5989   return ptbin;
5990   //############################################################################
5991   */
5992
5993
5994
5995   /* //#######################################################################
5996      //################# VARY CUTS for d0xd0 STUDY  ##########################
5997
5998 if(pt>0. && pt<=1.) {
5999      ptbin=0;
6000      fCutsTight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.0002,0.5);
6001      // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
6002      fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.3,0.3,1.,1.,-0.0002,0.7);
6003      }  
6004      if(pt>1. && pt<=2.) {
6005      ptbin=1;  
6006      fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,0.2,0.6);
6007      //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
6008      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.1);
6009      //printf("I'm in the bin %d\n",ptbin);
6010      }
6011      if(pt>2. && pt<=3.) {
6012      ptbin=2;  
6013      fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.05,0.05,0.2,0.6);
6014      //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
6015      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.3,0.3,1.,1.,-0.0001,0.1);
6016      //printf("I'm in the bin %d\n",ptbin);
6017      }  
6018      if(pt>3. && pt<=5.){
6019      ptbin=3;  
6020      fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,0.2,0.8);
6021      //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
6022      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.3,0.4,0.4,1.,1.,-0.0001,0.1);
6023      //printf("I'm in the bin %d\n",ptbin);
6024      }
6025      if(pt>5.){
6026      ptbin=4;
6027      fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,0.2,0.8);
6028      //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
6029      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.00005,0.1);
6030      }//if(pt>5)
6031      return ptbin;
6032      //     #################################################################
6033   */    
6034
6035   //##########################################################################
6036   //################## CUTS with d0xd0 cut released  #########################
6037   //###                    and TGHC cuts d0K and d0Pi to 0.1 instead of 0.05
6038   //### USED FOR PHDthesis
6039   //##########################################################################
6040  
6041   /* if(pt>0. && pt<=1.) {
6042      ptbin=0;
6043      fCutsTight->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.1,0.1,-0.000,0.5);
6044      // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
6045      fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.3,0.3,1.,1.,-0.000,0.7);
6046      }   
6047      if(pt>1. && pt<=2.) {
6048      ptbin=1;  
6049      fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.1,0.1,-0.000,0.6);
6050      //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
6051      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.4,0.4,1.,1.,-0.0000,0.7);
6052      //printf("I'm in the bin %d\n",ptbin);
6053      }
6054      if(pt>2. && pt<=3.) {
6055      ptbin=2;  
6056      fCutsTight->SetD0toKpiCuts(invMassCut,0.03,0.8,0.6,0.6,0.1,0.1,-0.000,0.6);
6057      //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
6058      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.4,0.4,1.,1.,-0.000,0.7);
6059      //printf("I'm in the bin %d\n",ptbin);
6060      } 
6061      if(pt>3. && pt<=5.){
6062      ptbin=3;  
6063      fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.000,0.8);
6064      //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
6065      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.000,0.75);
6066      //printf("I'm in the bin %d\n",ptbin);
6067      }
6068      if(pt>5.){
6069      ptbin=4;
6070      fCutsTight->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.0000,0.8);
6071      //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
6072      fCutsLoose->SetD0toKpiCuts(invMassCut,0.03,0.8,0.5,0.5,1.,1.,-0.0000,0.75);
6073      }//if(pt>5)
6074      return ptbin;
6075   */
6076
6077
6078
6079
6080   //########## LOOKING FOR SIGNAL #####################
6081   /*  
6082   if(pt>0. && pt<=1.) {
6083     ptbin=0;
6084     fCutsTight->SetD0toKpiCuts(5*invMassCut,0.03,0.8,0.3,0.3,0.1,0.1,-0.00035,0.7);
6085     // fCutsLoose->SetD0toKpiCuts(invMassCut,0.04,0.8,0.5,0.5,0.05,0.05,-0.00025,0.7);
6086     fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.04,0.8,0.3,0.3,0.1,0.1,-0.00025,0.7);
6087   }   
6088   if(pt>1. && pt<=2.) {
6089     ptbin=1;  
6090     fCutsTight->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.4,0.4,0.1,0.1,-0.00035,0.8);
6091     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
6092     fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.03,0.8,0.3,0.3,0.1,0.1,-0.0025,0.75);
6093     //printf("I'm in the bin %d\n",ptbin);
6094   }
6095   if(pt>2. && pt<=3.) {
6096     ptbin=2;  
6097     fCutsTight->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.00026,0.94);
6098     //fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,1,1,-0.00025,0.8);
6099     fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.0002,0.92);
6100     //printf("I'm in the bin %d\n",ptbin);
6101   } 
6102   if(pt>3. && pt<=5.){
6103     ptbin=3;  
6104     fCutsTight->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.00015,0.88);
6105     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.8);
6106     fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.00015,0.9);
6107     //printf("I'm in the bin %d\n",ptbin);
6108   }
6109   if(pt>5.&& pt<=8.){
6110     ptbin=4;
6111     fCutsTight->SetD0toKpiCuts(5*invMassCut,0.015,0.8,0.7,0.7,0.1,0.1,-0.0001,0.9);
6112     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
6113     fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.02,0.8,0.7,0.7,0.1,0.1,-0.0000,0.88);
6114   }//if(pt>5)
6115   if(pt>8.&&pt<=12.){
6116     ptbin=5;
6117     fCutsTight->SetD0toKpiCuts(5*invMassCut,0.015,0.8,0.7,0.7,0.1,0.1,-0.0001,0.9);
6118     //    fCutsLoose->SetD0toKpiCuts(invMassCut,0.02,0.8,0.7,0.7,0.05,0.05,-0.00015,0.9);
6119     fCutsLoose->SetD0toKpiCuts(5*invMassCut,0.015,0.8,0.7,0.7,0.1,0.1,-0.0005,0.88);
6120   }//if(pt>5)
6121   
6122   return ptbin;
6123   */
6124   printf("AliAnalysisTaskSECharmFraction::Obsolete method! Parameters pt=%f,invmasscut=%f not used \n",pt,invMassCut);
6125   return ptbin;  
6126
6127 }
6128
6129 //__________________________________________________________
6130 void AliAnalysisTaskSECharmFraction::CheckInvMassD0(AliAODRecoDecayHF2Prong *d,Double_t &invMassD0,Double_t &invMassD0bar,Bool_t &isPeakD0,Bool_t &isPeakD0bar,Bool_t &isSideBandD0,Bool_t &isSideBandD0bar){
6131   //Check wheter the candidate inv. mass is compatible with signal or sideband inv. mass selection
6132       
6133   d->InvMassD0(invMassD0,invMassD0bar);
6134   //CHECK if ISPEAK 
6135   if(TMath::Abs(invMassD0-fmD0PDG)<fsignalInvMassCut)isPeakD0=kTRUE;
6136   if(TMath::Abs(invMassD0bar-fmD0PDG)<fsignalInvMassCut)isPeakD0bar=kTRUE;
6137   //CHECK if ISSIDEBAND: no constraint is present between signal region definition and side band definition
6138   // ######## TO BE CHANGED the distinction between sidebandD0 and sidebandD0bar is meaningless 
6139   //               and it is present only for side band region study (see which inv mass has the D0(D0bar) 
6140   //               in case the D0bar(D0) is in the sideband) #######
6141   if(TMath::Abs(invMassD0-fmD0PDG)>fsidebandInvMassCut&&TMath::Abs(invMassD0-fmD0PDG)<fsidebandInvMassCut+fsidebandInvMassWindow){
6142     isSideBandD0=kTRUE;
6143   }
6144   if(TMath::Abs(invMassD0bar-fmD0PDG)>fsidebandInvMassCut&&TMath::Abs(invMassD0bar-fmD0PDG)<fsidebandInvMassCut+fsidebandInvMassWindow){
6145     isSideBandD0bar=kTRUE;
6146   }
6147   
6148 }
6149         
6150
6151
6152 //_______________________
6153 AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::GetD0toKPiSignalType(const AliAODRecoDecayHF2Prong *d,TClonesArray *arrayMC,Int_t &signaltype,Double_t &massMumTrue,Double_t *primaryVtx){
6154   //THIS METHOD CHECK THE TYPE OF SIGNAL/BACKGROUND THE CANDIDATE IS. 
6155   //  IF (!AND ONLY IF) THE TWO DAUGHTERS COME FROM A COMMONE MOTHER A FAKE TRUE SECONDARY VERTEX IS CONSTRUCTED (aodDMC)  
6156   //
6157   // THE FOLLOWING SCHEME IS ADOPTED: signaltype is set to
6158   //  1:signal (D0 prompt); 2: signal D0 from Dstar; 3: D0 fromB 4: D0 from Dstar fromB
6159   // then background categories: -1: one or both daughters is a fake track
6160   //                             5: both daughters come from a D meson != D0
6161   //                             6: both daughters come from a D0->4prongs  
6162   //                             7: both daughetrs are primaries
6163   //                             8: generic background (can include one of the previous if desired)
6164   //                             9: daughters out of acceptance
6165   //                            10: pathologic cases (not clear)
6166   //                            11: end of the method without output
6167   //                            12: different result than MatchToMC method
6168   
6169   AliAODMCParticle *mum1=0x0;
6170   AliAODMCParticle *b1=0x0,*b2=0x0;
6171   AliAODMCParticle *grandmoth1=0x0;
6172   massMumTrue=-1;
6173   
6174   Int_t pdgmum,dglabels[2],matchtoMC;
6175   Int_t pdgdaughters[2]={211,321};
6176   // get daughter AOD tracks
6177   AliAODTrack *trk0 = (AliAODTrack*)d->GetDaughter(0);
6178   AliAODTrack *trk1 = (AliAODTrack*)d->GetDaughter(1);
6179   AliAODRecoDecayHF *aodDMC=0x0;
6180   if(trk0==0x0||trk1==0x0){
6181     AliDebug(2,"Delete tracks I AM \n");
6182   
6183     signaltype=-1;
6184     return aodDMC;
6185    
6186   }
6187   dglabels[0]=trk0->GetLabel();
6188   dglabels[1]=trk1->GetLabel();
6189   if(dglabels[0]<0||dglabels[1]<0){
6190     AliDebug(2,"HERE I AM \n");
6191
6192     //fake tracks
6193     
6194     signaltype=-1;
6195     return aodDMC;
6196
6197   }
6198   //      printf("Before entering the MC checks \n");
6199   
6200   b1=(AliAODMCParticle*)arrayMC->At(trk0->GetLabel());
6201   b2=(AliAODMCParticle*)arrayMC->At(trk1->GetLabel());
6202   if(!b1||!b2){
6203     //Tracks with no mother  ??? FAKE DECAY VERTEX
6204     signaltype=10;
6205     return aodDMC;
6206   }
6207   if(b1->GetMother()<0||b2->GetMother()<0){
6208     //Tracks with no mother  ??? FAKE DECAY VERTEX
6209     signaltype=10;
6210     return aodDMC;
6211   }
6212   
6213   mum1=(AliAODMCParticle*)arrayMC->At(b1->GetMother());
6214   //  mum2=(AliAODMCParticle*)arrayMC->At(b2->GetMother());//FOR FURTHER USE
6215   
6216   if(b1->GetMother()!=b2->GetMother()){
6217     //Check the label of the mother is the same
6218     // NOT SAME MOTHER
6219    
6220
6221     signaltype=8;
6222     return aodDMC;
6223   }
6224   massMumTrue=mum1->GetCalcMass();
6225   
6226   matchtoMC=d->MatchToMC(421,arrayMC,2,pdgdaughters);
6227   aodDMC=ConstructFakeTrueSecVtx(b1,b2,mum1,primaryVtx);
6228  
6229   if(aodDMC==0x0){
6230     signaltype=10;
6231     return aodDMC;
6232   }
6233
6234   // if((mum1->GetPdgCode()!=mum2->GetPdgCode()))continue; //Check the mother is the same particle
6235   // printf("Particle codes: tr1: %d, tr2: %d, mum1: %d, mum 2: %d \n",b1->GetPdgCode(),b2->GetPdgCode(),mum1->GetPdgCode(),mum2->GetPdgCode());
6236   if(!((TMath::Abs(b1->GetPdgCode())==321&&TMath::Abs(b1->GetPdgCode())!=211)||(TMath::Abs(b1->GetPdgCode())==211&&TMath::Abs(b1->GetPdgCode()!=321)))){
6237     // Not a Kaon and a Pion
6238    
6239     signaltype=8;
6240     return aodDMC;
6241   }
6242   
6243   pdgmum=mum1->GetPdgCode();
6244   if(TMath::Abs(pdgmum)!=421){
6245     if(TMath::Abs(pdgmum)==411||TMath::Abs(pdgmum)==431||TMath::Abs(pdgmum)==443){
6246       // IT IS A SECONDARY VERTEX FROM CHARM BUT NOT A D0
6247       
6248       signaltype=5;
6249       return aodDMC;
6250     }
6251     else {
6252        signaltype=8;
6253        return aodDMC;
6254     }
6255   }
6256
6257   if(mum1->GetDaughter(1)-mum1->GetDaughter(0)+1!=2){
6258     // from D0 but NOT A 2 PRONG DECAY
6259     signaltype=6;
6260     return aodDMC;
6261    
6262   }
6263   
6264   if(mum1->GetMother()<0){
6265     // A particle coming from nothing
6266     signaltype=10;
6267     return aodDMC;
6268     
6269   }
6270   Bool_t isfromDstar=kFALSE;
6271   //  matchtoMC=d->MatchToMC(421,arrayMC,2,pdgdaughters);
6272   grandmoth1=(AliAODMCParticle*)arrayMC->At(mum1->GetMother());
6273   if(TMath::Abs(grandmoth1->GetPdgCode())==413||TMath::Abs(grandmoth1->GetPdgCode())==423)isfromDstar=kTRUE;// D0 COMING FROM A D0*
6274   
6275   /*
6276   //CHECK FOR CABIBBO SUPPRESSED DECAY
6277   Int_t isCabibSup=0,pdgKaon;
6278  
6279   pdgKaon=b1->GetPdgCode();
6280   if(TMath::Abs(pdgKaon)!=321)pdgKaon=b2->GetPdgCode();
6281   if(pdgmum>0&&pdgKaon>0)isCabibSup=1;
6282   if(pdgmum<0&&pdgKaon<0)isCabibSup=1;
6283   if(isCabibSup){
6284     signaltype=0;
6285     return aodDMC;
6286   }
6287   */
6288   //      if(fcheckMCD0){//THIS CHECK IS NEEDED TO AVOID POSSIBLE FAILURE IN THE SECOND WHILE, FOR DEBUGGING
6289   while(TMath::Abs(grandmoth1->GetPdgCode())!=4&&TMath::Abs(grandmoth1->GetPdgCode())!=5){
6290     if(grandmoth1->GetMother()<0){
6291       //### THE FOLLOWING IN CASE OF DEBUGGING ##########à
6292       /*printf("mother=-1, pdgcode: %d \n",grandmoth1->GetPdgCode());
6293         Int_t son=grandmoth1->GetDaughter(0);
6294         sonpart=(AliAODMCParticle*)arrayMC->At(son);
6295         while(TMath::Abs(sonpart->GetPdgCode())!=421){
6296         printf("mother=-1, pdgcode: %d \n",sonpart->GetPdgCode());
6297         son++;
6298         sonpart=(AliAODMCParticle*)arrayMC->At(son);
6299         }*/
6300    
6301       signaltype=10;
6302       return aodDMC;
6303     }
6304     grandmoth1=(AliAODMCParticle*)arrayMC->At(grandmoth1->GetMother());
6305   }
6306   
6307   if(TMath::Abs(grandmoth1->GetPdgCode())==4){
6308     if(matchtoMC!=-1){
6309       
6310       if(isfromDstar)signaltype=2;
6311       else signaltype=1;
6312       return aodDMC;
6313     }
6314     else {
6315       signaltype=12;
6316       return aodDMC;
6317       
6318     }
6319   }
6320   else if(TMath::Abs(grandmoth1->GetPdgCode())==5){
6321     if(matchtoMC!=-1){
6322       if(isfromDstar)signaltype=4;
6323       else signaltype=3;
6324       return aodDMC;
6325       
6326     }
6327     else {
6328      
6329       signaltype=12;
6330       return aodDMC;
6331     }
6332   }
6333   signaltype=11;// JUST FOR SAFETY: SHOULD NEVER REACH THIS POINT
6334   return aodDMC;
6335   //  return 11;
6336 }
6337
6338 //___________________________________
6339 AliAODRecoDecayHF* AliAnalysisTaskSECharmFraction::ConstructFakeTrueSecVtx(const AliAODMCParticle *b1, const AliAODMCParticle *b2, const AliAODMCParticle *mum,Double_t *primaryVtxTrue){
6340   // CONSTRUCT A FAKE TRUE SECONDARY VERTEX (aodDMC)  
6341   //!!!NOTE THAT ONLY ONE MOTHER IS CONSIDERED: THE METHOD REQUIRES THE DAUGHTERS COME FROM THE SAME MOTHER !!
6342   if(b1==0x0||b2==0x0)return 0x0;
6343   if(mum==0x0)return 0x0;
6344   Double_t pD[3],xD[3],pXtrTrue[2],pYtrTrue[2],pZtrTrue[2],xtr1[3],xtr2[3];
6345   Int_t charge[2]={0,0};
6346   if(b1->Charge()==-1)charge[0]=1;
6347   else {
6348     if(b2->Charge()==-1){
6349       //printf("Same charges for prongs \n");
6350       if(!fLikeSign)return 0x0;
6351     }
6352     charge[1]=1;
6353   }
6354   
6355   pXtrTrue[charge[0]]=b1->Px();
6356   pYtrTrue[charge[0]]=b1->Py();
6357   pZtrTrue[charge[0]]=b1->Pz();
6358   if(!b1->XvYvZv(xtr1)){
6359     return 0x0;
6360   }
6361   
6362   pXtrTrue[charge[1]]=b2->Px();
6363   pYtrTrue[charge[1]]=b2->Py();
6364   pZtrTrue[charge[1]]=b2->Pz();
6365   
6366   if(!mum->PxPyPz(pD)){
6367     //printf("!D from B:Get momentum failed \n");
6368     return 0x0;
6369   }
6370   if(!mum->XvYvZv(xD)){
6371     //printf("!D from B:Get position failed \n");
6372     return 0x0;
6373   }
6374   /* ############ THIS HAPPENS FROM TIME TO TIME: NUMERIC PROBLEM KNOWN #################
6375      if(pXtrTrue[0]+pXtrTrue[1]!=pD[0]){
6376      }*/
6377   
6378   
6379   if(!b2->XvYvZv(xtr2)){
6380     return 0x0;
6381   }
6382   Double_t d0dummy[2]={0.,0.};//TEMPORARY : dummy d0 for AliAODRecoDeay constructor
6383   AliAODRecoDecayHF* aodDMC=new AliAODRecoDecayHF(primaryVtxTrue,xD,2,0,pXtrTrue,pYtrTrue,pZtrTrue,d0dummy);
6384   
6385   /*   ######## THE FOLLOWINF FOR DEBUGGING ############
6386        Printf("testing the Fake vertex: SecVtxX: %f, Px: %f, Py: %f, Pz:%f \n ",aodDMC->GetSecVtxX(),aodDMC->Px(),aodDMC->Py(),aodDMC->Pz());
6387        Printf("pD: x=%f, y=%f,z=%f\n",pD[0],pD[1],pD[2]);
6388        Printf("Daughters :px1:%f, px2:%f \n",pXtrTrue[0],pXtrTrue[1]);
6389        Printf("Daughters :py1:%f, py2:%f \n",pYtrTrue[0],pYtrTrue[1]);
6390        Printf("Daughters :pz1:%f, pz2:%f \n",pZtrTrue[0],pZtrTrue[1]);
6391        Printf("Mother pdg: %d",mum->GetPdgCode());
6392        Printf("Impact Par Prod: %f\n",aodDMC->ImpParXY());
6393   */
6394
6395   return aodDMC;
6396 }
6397
6398 //________________________________________________________
6399 Bool_t AliAnalysisTaskSECharmFraction::FillHistos(AliAODRecoDecayHF2Prong *d,TList *&list,Int_t ptbin,Int_t okD0,Int_t okD0bar,Double_t invMassD0,Double_t invMassD0bar,Bool_t isPeakD0,Bool_t isPeakD0bar,Bool_t isSideBandD0,Bool_t isSideBandD0bar,Double_t massmumtrue,AliAODRecoDecayHF *aodDMC,Double_t *vtxTrue){//FILL THE HISTOGRAMS: TAKE THE HISTOS FROM THE list NAME
6400
6401   
6402   if((!okD0)&&(!okD0bar))return kTRUE;
6403   if(ptbin==-1)return kTRUE;
6404   //  flistNoCutsSignal->Add(hptD0NCsign);
6405   // flistNoCutsSignal->Add(hptD0VsMaxPtNCsign);
6406   // flistNoCutsSignal->Add(hptD0PTallsqrtNCsign);
6407   //  flistNoCutsSignal->Add(hptD0PTallNCsign);
6408   
6409   // %%%%%% TO BE DONE 
6410   //    flistNoCutsSignal->Add(hptD0vsptBNCsign);
6411   // flistNoCutsSignal->Add(hpD0vspBNCsign);
6412   //flistNoCutsSignal->Add(hptD0vsptcquarkNCsign);
6413   //flistNoCutsSignal->Add(hpD0vspcquarkNCsign);
6414   // %%%%%%%%%%%%%%%%%%%%%%%%%%%%
6415   // %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
6416   
6417   // DONE
6418   //hd0zD0ptLSCsign_pt
6419   //hInvMassD0LSCsign_pt
6420   //hetaLSCsign_pt
6421   //
6422   // %%% TO BE DONE %% 
6423   //hCosPDPBLSCsign_pt
6424   //hCosPcPDLSCsign_pt
6425   
6426   Double_t pt=d->Pt();
6427   Double_t impparxy=d->ImpParXY()*10000.;
6428
6429
6430
6431   // ######### Get Standard label for hist in tlist ###############
6432   TString namehist=list->GetName(),str;
6433   namehist.ReplaceAll("list","");
6434
6435   //  ######### Global properties histos #################
6436   // ####### take care: only for candidates which pass the cuts !! not for side band ########
6437   if(fFastAnalysis<2){ 
6438     if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar)){
6439       str="hCPtaVSd0d0";
6440       str.Append(namehist.Data());
6441       ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),d->CosPointingAngle());
6442       
6443       str="hSecVtxZ";
6444       str.Append(namehist.Data());
6445       ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxZ());
6446       
6447       str="hSecVtxX";
6448       str.Append(namehist.Data());
6449       ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxX()*10000.);
6450       
6451       str="hSecVtxY";
6452       str.Append(namehist.Data());
6453       ((TH1F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxY()*10000.);
6454       
6455       str="hSecVtxXY";
6456       str.Append(namehist.Data());
6457       ((TH2F*)list->FindObject(str.Data()))->Fill(d->GetSecVtxX()*10000.,d->GetSecVtxY()*10000.);
6458       
6459       str="hSecVtxPhi";
6460       str.Append(namehist.Data());
6461       ((TH1F*)list->FindObject(str.Data()))->Fill(TMath::ATan2(d->GetSecVtxY()*10000.,d->GetSecVtxX()*10000.)*TMath::RadToDeg());
6462       
6463       
6464       str="hd0singlTrack";
6465       str.Append(namehist.Data());
6466       ((TH1F*)list->FindObject(str.Data()))->Fill(d->Getd0Prong(0)*10000.);
6467       ((TH1F*)list->FindObject(str.Data()))->Fill(d->Getd0Prong(1)*10000.);
6468       
6469       str="hCPta";
6470       str.Append(namehist.Data());
6471       ((TH1F*)list->FindObject(str.Data()))->Fill(d->CosPointingAngle());
6472       
6473       str="hd0xd0";
6474       str.Append(namehist.Data());
6475       ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0());
6476       
6477       //%%%%%%%% NEW HISTO %%%%%%%%%%
6478       str="hdca";
6479       str.Append(namehist.Data());
6480       ((TH1F*)list->FindObject(str.Data()))->Fill(1e4*d->GetDCA());
6481       
6482       str="hcosthetastar";
6483       str.Append(namehist.Data());
6484       if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(d->CosThetaStarD0());
6485       if(okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(d->CosThetaStarD0bar());
6486       
6487       str="hptD0";
6488       str.Append(namehist.Data());
6489       ((TH1F*)list->FindObject(str.Data()))->Fill(pt);
6490       
6491       str="hptD0VsMaxPt";
6492       str.Append(namehist.Data());
6493       Int_t pr=0;
6494       if(d->PtProng(1)>d->PtProng(0))pr=1;
6495       if(d->PtProng(pr)<fptMax[0]) ((TH1F*)list->FindObject(str.Data()))->Fill(pt-fptMax[0]);
6496       else if(d->PtProng(TMath::Abs(pr-1))<fptMax[1])((TH1F*)list->FindObject(str.Data()))->Fill(pt-fptMax[1]);
6497       else ((TH1F*)list->FindObject(str.Data()))->Fill(pt-fptMax[2]);
6498       
6499       
6500       str="hptD0PTallsqrt";
6501       str.Append(namehist.Data());
6502       Double_t sumsqrpt=fptAllSq-d->PtProng(1)*d->PtProng(1)-d->PtProng(0)*d->PtProng(0);
6503       if(sumsqrpt>0.)((TH1F*)list->FindObject(str.Data()))->Fill(pt,TMath::Sqrt(sumsqrpt));
6504       
6505       str="hptD0PTall";
6506       str.Append(namehist.Data());
6507       ((TH1F*)list->FindObject(str.Data()))->Fill(pt,fptAll-d->PtProng(1)-d->PtProng(0));
6508       
6509       
6510       str="hd0zD0pt";
6511       str.Append(namehist.Data());
6512       str.Append("_pt");
6513       str+=ptbin;
6514       if(d->GetPrimaryVtx()!=0x0)((TH1F*)list->FindObject(str.Data()))->Fill(1e4*(d->Zv()-d->GetPrimaryVtx()->GetZ()));
6515       
6516       str="heta";
6517       str.Append(namehist.Data());
6518       str.Append("_pt");
6519       str+=ptbin;
6520       //((TH1F*)list->FindObject(str.Data()))->Fill(d->Eta());
6521       
6522       // OTHER NEW ADDITIONAL HISTOS
6523       
6524       str="hd0xd0";
6525       str.Append(namehist.Data());
6526       str.Append("_pt");
6527       str+=ptbin;
6528       //printf("Hist name: %s \n",str.Data());
6529       ((TH1F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0());
6530       
6531       
6532       str="hd0D0VSd0xd0";
6533       str.Append(namehist.Data());
6534       str.Append("_pt");
6535       str+=ptbin;
6536       //printf("Hist name: %s \n",str.Data());
6537       ((TH2F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),impparxy);
6538       
6539       
6540       str="hangletracksVSd0xd0";
6541       str.Append(namehist.Data());
6542       str.Append("_pt");
6543       str+=ptbin;
6544       //printf("Hist name: %s \n",str.Data());
6545       ((TH2F*)list->FindObject(str.Data()))->Fill(1e8*d->Prodd0d0(),d->ProngsRelAngle(0,1));
6546       
6547       str="hangletracksVSd0D0";
6548       str.Append(namehist.Data());
6549       str.Append("_pt");
6550       str+=ptbin;
6551       //  printf("Hist name: %s \n",str.Data());
6552       ((TH2F*)list->FindObject(str.Data()))->Fill(impparxy,d->ProngsRelAngle(0,1));
6553     // ####################################################
6554     }
6555   }  
6556   
6557   //  ######### Invariant mass histos #################
6558   str="hMass";
6559   str.Append(namehist.Data());
6560   ((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
6561   ((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6562    
6563       
6564   if(isPeakD0||isPeakD0bar){
6565     str="hMass";
6566     str.Append(namehist.Data());
6567     str.Append("PM");
6568     if(isPeakD0&&okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
6569     if(isPeakD0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6570   }
6571   
6572   // The Following is a NEW HISTO  
6573   str="hInvMassD0";
6574   str.Append(namehist.Data());
6575   str.Append("_pt");
6576   str+=ptbin;
6577   if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
6578   if((!fsplitMassD0D0bar)&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6579   str="hInvMassD0bar";
6580   str.Append(namehist.Data());
6581   str.Append("_pt");
6582   str+=ptbin;
6583   if(fsplitMassD0D0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6584   
6585
6586   // FILLING OF THE SPARSE HISTO
6587   if(fFastAnalysis<2){ // ONLY IF NOT VERY FAST ANALYSIS
6588     str="hSparse";
6589     str.Append(namehist.Data());
6590     Double_t point[5]={invMassD0,invMassD0bar,pt,impparxy,0.};
6591     if(okD0&&okD0bar)point[4]=3.5;
6592     else if(okD0)point[4]=1.5;
6593     else if(okD0bar)point[4]=2.5;
6594     ((THnSparseF*)list->FindObject(str.Data()))->Fill(point);
6595     
6596     str="hInvMassPt";
6597     str.Append(namehist.Data());
6598     if(okD0)((TH2F*)list->FindObject(str.Data()))->Fill(invMassD0,pt);
6599     if(okD0bar)((TH2F*)list->FindObject(str.Data()))->Fill(invMassD0bar,pt);
6600
6601   }
6602   /* if(isPeakD0||isPeakD0bar){
6603     str="hMass";
6604     str.Append(namehist.Data());
6605     str.Append("PM");
6606     if(isPeakD0&&okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
6607     if(isPeakD0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6608     // The Following is a NEW HISTO
6609     str="hInvMassD0";
6610     str.Append(namehist.Data());
6611     str.Append("_pt");
6612     str+=ptbin;
6613     if(isPeakD0&&okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
6614     if(isPeakD0bar&&okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6615     }*/
6616   if(isSideBandD0||isSideBandD0bar){
6617     str="hMass";
6618     str.Append(namehist.Data());
6619     str.Append("SB");
6620     if(okD0)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0);
6621     if(okD0bar)((TH1F*)list->FindObject(str.Data()))->Fill(invMassD0bar);
6622   }
6623   if(fReadMC){
6624     if(massmumtrue>0.){
6625       str="hMassTrue";
6626       str.Append(namehist.Data());
6627       ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
6628       
6629       if(isPeakD0||isPeakD0bar){
6630         str="hMassTrue";
6631         str.Append(namehist.Data());
6632         str.Append("PM");
6633         ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
6634       }
6635       if(isSideBandD0||isSideBandD0bar){
6636         str="hMassTrue";
6637         str.Append(namehist.Data());
6638         str.Append("SB");
6639         ((TH1F*)list->FindObject(str.Data()))->Fill(massmumtrue);
6640       }
6641     }
6642   }
6643  // ################ D0 Impact Parameter Histos #####################
6644   if(isPeakD0||isPeakD0bar){    
6645    
6646     str="hd0D0";
6647     str.Append(namehist.Data());
6648     str.Append("PM");
6649     if(!fReadMC){
6650       // WE COUNT TWICE A CANDIDATE UNDER THE INV MASS PEAK BOTH AS a D0 and a D0bar (if selected) for DATA ONLY
6651       // THIS BECAUSE WE SUBTRACT a "BACKGROUND" AMOUNT ESTIMATED USING THE INV MASS FIT INFORMATION
6652       // WHICH SHOULD ACCOUNT FOR REFLECTIONS
6653       if(isPeakD0&&okD0){
6654         ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6655       }
6656       if(isPeakD0bar&&okD0bar){
6657         ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6658       }
6659     }
6660     else {
6661       if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar))((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6662     }
6663     
6664     str="hd0D0pt";
6665     str.Append(namehist.Data());
6666     str.Append("_PkMss_pt");
6667     str+=ptbin;     
6668     if(!fReadMC){
6669       // WE COUNT TWICE A CANDIDATE UNDER THE INV MASS PEAK BOTH AS a D0 and a D0bar (if selected) for DATA ONLY
6670       // THIS BECAUSE WE SUBTRACT a "BACKGROUND" AMOUNT ESTIMATED USING THE INV MASS FIT INFORMATION
6671       // WHICH SHOULD ACCOUNT FOR REFLECTIONS
6672       if(isPeakD0&&okD0){
6673         ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6674       }
6675       if(isPeakD0bar&&okD0bar){
6676         ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6677       }
6678     }
6679     else {
6680       if((isPeakD0&&okD0)||(isPeakD0bar&&okD0bar))((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6681     }
6682     
6683     
6684     if(fReadMC&&vtxTrue){
6685       // ONLY AN HISTO FOR QA: WE DO NOT CONSIDER THE IMPACT PARAMETER FOR EACH MASS HYPOTHESIS
6686       str="hd0D0VtxTrue";
6687       str.Append(namehist.Data());
6688       str.Append("PM");
6689       ((TH1F*)list->FindObject(str.Data()))->Fill(d->AliAODRecoDecay::ImpParXY(vtxTrue)*10000.);
6690       
6691       str="hd0D0VtxTruept";
6692       str.Append(namehist.Data());
6693       str.Append("_PkMss_pt");
6694       str+=ptbin;
6695       ((TH1F*)list->FindObject(str.Data()))->Fill(d->AliAODRecoDecay::ImpParXY(vtxTrue)*10000.);
6696     }
6697     
6698     if(fReadMC&&aodDMC!=0x0){
6699       // WE NEED JUST THE SHAPE: AVOID TAKING THE IMPACT PAR FOR EACH MASS HYPO PASSING THE CUTS
6700       // aodDMC->Print("");
6701       aodDMC->ImpParXY();
6702       // aodDMC->Print("");
6703       str="hMCd0D0";
6704       str.Append(namehist.Data());
6705       str.Append("PM");
6706       ((TH1F*)list->FindObject(str.Data()))->Fill(aodDMC->ImpParXY()*10000.);
6707       
6708       str="hMCd0D0pt";
6709       str.Append(namehist.Data());
6710       str.Append("_PkMss_pt");
6711       str+=ptbin;
6712       ((TH1F*)list->FindObject(str.Data()))->Fill(aodDMC->ImpParXY()*10000.);
6713     }       
6714   } 
6715   else if(isSideBandD0||isSideBandD0bar){
6716     // WE ASSUME THE IMPACT PARAMETER DISTRIBUION FOR BACKGROUND(SIDEBANDS) CANDIDATES
6717     // IS NOT CORRELATED TO THE INVARIANT MASSES. THEREFORE WE JUST TAKE ONE TIME
6718     // THE IMPACT PARAMETER AND NOT ONE FOR EACH MASS HYPOTHESIS PASSING THE CUTS
6719
6720     str="hd0D0";
6721     str.Append(namehist.Data());
6722     str.Append("SB");
6723     ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6724     
6725     str="hd0D0pt";
6726     str.Append(namehist.Data());
6727     str.Append("_SBMss_pt");
6728     str+=ptbin;
6729     ((TH1F*)list->FindObject(str.Data()))->Fill(impparxy);
6730     
6731     
6732     if(fReadMC&&vtxTrue){
6733       str="hd0D0VtxTrue";
6734       str.Append(namehist.Data());
6735       str.Append("SB");
6736       ((TH1F*)list->FindObject(str.Data()))->Fill(d->AliAODRecoDecay::ImpParXY(vtxTrue)*10000.);
6737       
6738       str="hd0D0VtxTruept";
6739       str.Append(namehist.Data());
6740       str.Append("_SBMss_pt");
6741       str+=ptbin;
6742       ((TH1F*)list->FindObject(str.Data()))->Fill(d->AliAODRecoDecay::ImpParXY(vtxTrue)*10000.);
6743       
6744     }
6745     
6746     if(fReadMC&&aodDMC!=0x0){
6747       str="hMCd0D0";
6748       str.Append(namehist.Data());
6749       str.Append("SB");
6750       ((TH1F*)list->FindObject(str.Data()))->Fill(aodDMC->ImpParXY()*10000.);
6751       
6752       str="hMCd0D0pt";
6753       str.Append(namehist.Data());
6754       str.Append("_SBMss_pt");
6755       str+=ptbin;
6756       ((TH1F*)list->FindObject(str.Data()))->Fill(aodDMC->ImpParXY()*10000.);
6757     }
6758     
6759   }
6760      
6761    return kTRUE;
6762 }
6763
6764
6765  void  AliAnalysisTaskSECharmFraction::FillHistoMCproperties(TClonesArray *arrayMC){ 
6766     //#############################################################
6767     //            HERE LOOK AT global properties of D0 mesons, c quarks and B
6768     // 
6769     //#############################################################
6770    Double_t pxyzMum[3],pxyzDaught[3],cosOpenAngle=-1.1,ptmum,ptdaught;
6771    Int_t ncdaught=0,cquarksMC=0,nD0all=0,nD0FromB=0,nBdaught=0,nD0bquark=0,nD0bMeson=0,nD0bBaryon=0;
6772    for (Int_t iPart=0; iPart<arrayMC->GetEntriesFast(); iPart++) { 
6773      AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iPart));
6774      if (!mcPart) {
6775        AliWarning("Particle not found in tree, skipping"); 
6776        continue;
6777      } 
6778      if (TMath::Abs(mcPart->GetPdgCode()) == 4){
6779        cquarksMC++;  
6780        mcPart->PxPyPz(pxyzMum);
6781        ptmum=mcPart->Pt();
6782        
6783        ((TH1F*)flistMCproperties->FindObject("hMCcquarkAllPt"))->Fill(ptmum);
6784        ((TH1F*)flistMCproperties->FindObject("hMCcquarkAllEta"))->Fill(mcPart->Eta());
6785        ((TH1F*)flistMCproperties->FindObject("hMCcquarkAllEnergy"))->Fill(mcPart->E());
6786        //NOW LOOK FOR A D0 among cquark daughters
6787        ncdaught=mcPart->GetDaughter(1)-mcPart->GetDaughter(0)+1;
6788        ((TH1F*)flistMCproperties->FindObject("hMCcquarkNdaught"))->Fill(ncdaught);
6789        if(ncdaught>1){
6790          for(Int_t iDaught=mcPart->GetDaughter(0);iDaught<mcPart->GetDaughter(1);iDaught++){
6791            AliAODMCParticle* mcPartD0 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iDaught));
6792            if(mcPartD0==0x0)continue;
6793            if(TMath::Abs(mcPartD0->GetPdgCode()) == 421){
6794              // a D0 coming from a c quark
6795              mcPartD0->PxPyPz(pxyzDaught);
6796              ptdaught=mcPartD0->Pt();
6797              ((TH1F*)flistMCproperties->FindObject("hMCD0fromcPt"))->Fill(ptdaught);
6798              ((TH1F*)flistMCproperties->FindObject("hMCD0fromcEta"))->Fill(mcPartD0->Eta());
6799              ((TH1F*)flistMCproperties->FindObject("hMCD0fromcEnergy"))->Fill(mcPartD0->E());
6800              // ##############################################################################################
6801              //                            Compare D0 momentum and c quarks: 
6802              //              NB: here ALL D0 are considered, also those not decaying in KPi !!!
6803              // ##############################################################################################
6804              ((TH2F*)flistMCproperties->FindObject("hMCD0VscquarkPt"))->Fill(mcPart->Pt(),mcPartD0->Pt());
6805              ((TH2F*)flistMCproperties->FindObject("hMCD0VscquarkEnergy"))->Fill(mcPart->E(),mcPartD0->E());
6806              ((TH1F*)flistMCproperties->FindObject("hMCD0deltacquarkEnergy"))->Fill(mcPartD0->E()/mcPart->E());
6807              ((TH1F*)flistMCproperties->FindObject("hMCD0EnergyVsAvcquarkDaughtEn"))->Fill((mcPartD0->E()-(mcPart->E()/ncdaught))/mcPart->E());
6808              //calculate open angle
6809              if((pxyzMum[0]!=0.||pxyzMum[1]!=0.||pxyzMum[2]!=0.)&&(pxyzDaught[0]!=0.||pxyzDaught[1]!=0.||pxyzDaught[2]!=0.))cosOpenAngle=(pxyzDaught[0]*pxyzMum[0]+pxyzDaught[1]*pxyzMum[1]+pxyzDaught[2]*pxyzMum[2])/(TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2])*TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2]));
6810              ((TH1F*)flistMCproperties->FindObject("hMCD0cquarkAngle"))->Fill(cosOpenAngle);
6811              ((TH2F*)flistMCproperties->FindObject("hMCD0cquarkAngleEnergy"))->Fill(mcPart->E(),cosOpenAngle);
6812            }
6813          }
6814        }
6815      }
6816      
6817      // NOW LOOK FOR D0 not coming from cquarks
6818       if (TMath::Abs(mcPart->GetPdgCode()) == 421){
6819         nD0all++;  
6820         if(mcPart->GetMother()<0)continue;
6821         AliAODMCParticle* mcD0Parent = dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcPart->GetMother()));
6822         if(!mcD0Parent)continue;
6823         Bool_t notfound=kFALSE,bMeson=kFALSE,bBaryon=kFALSE;
6824         //CheckOrigin
6825         while(TMath::Abs(mcD0Parent->GetPdgCode())!=4&&TMath::Abs(mcD0Parent->GetPdgCode())!=5){
6826           if(500<TMath::Abs(mcD0Parent->GetPdgCode())%10000&&TMath::Abs(mcD0Parent->GetPdgCode())<600){
6827             bMeson=kTRUE;
6828             break;
6829           }
6830           else if (5000<TMath::Abs(mcD0Parent->GetPdgCode())&&TMath::Abs(mcD0Parent->GetPdgCode())<6000){
6831             bBaryon=kTRUE;
6832             break;
6833           }
6834           if(mcD0Parent->GetMother()<0){
6835             notfound=kTRUE;
6836             break;
6837           }
6838           mcD0Parent=dynamic_cast<AliAODMCParticle*>(arrayMC->At(mcD0Parent->GetMother()));
6839           if(!mcD0Parent){
6840             notfound=kTRUE;
6841             break;
6842           }
6843         }
6844         if(notfound)continue;
6845         if(TMath::Abs(mcD0Parent->GetPdgCode())==4)continue;//D0 from c quarks already counted
6846         ((TH1F*)flistMCproperties->FindObject("hMCfromBpdgB"))->Fill(TMath::Abs(mcD0Parent->GetPdgCode()));
6847         if(bBaryon)nD0bBaryon++;
6848         else if(bMeson)nD0bMeson++;
6849         else nD0bquark++;
6850         nD0FromB++;
6851         mcD0Parent->PxPyPz(pxyzMum);
6852         ptmum=mcD0Parent->Pt();
6853         ((TH1F*)flistMCproperties->FindObject("hMCBhadrPt"))->Fill(ptmum);
6854         ((TH1F*)flistMCproperties->FindObject("hMCBhadrEta"))->Fill(mcD0Parent->Eta());
6855         ((TH1F*)flistMCproperties->FindObject("hMCBhadrEnergy"))->Fill(mcD0Parent->E());
6856         
6857         nBdaught=mcD0Parent->GetDaughter(1)-mcD0Parent->GetDaughter(0)+1;
6858         ((TH1F*)flistMCproperties->FindObject("hMCBhadrNdaught"))->Fill(nBdaught);
6859
6860         
6861         // Now take properties of this D0 coming from a B
6862         mcPart->PxPyPz(pxyzDaught);
6863         ptdaught=mcPart->Pt();
6864         ((TH1F*)flistMCproperties->FindObject("hMCD0fromBPt"))->Fill(ptdaught);
6865         ((TH1F*)flistMCproperties->FindObject("hMCD0fromBEta"))->Fill(mcPart->Eta());
6866         ((TH1F*)flistMCproperties->FindObject("hMCD0fromBEnergy"))->Fill(mcPart->E());
6867         // ##############################################################################################
6868         //                            Compare D0 momentum and b hadron: 
6869         //              NB: here ALL D0 are considered, also those not decaying in KPi !!!
6870         // ##############################################################################################
6871         ((TH2F*)flistMCproperties->FindObject("hMCD0VsBhadrPt"))->Fill(mcD0Parent->Pt(),mcPart->Pt());
6872         ((TH2F*)flistMCproperties->FindObject("hMCD0VsBhadrEnergy"))->Fill(mcD0Parent->E(),mcPart->E());
6873         ((TH1F*)flistMCproperties->FindObject("hMCD0deltaBhadrEnergy"))->Fill(mcPart->E()/mcD0Parent->E());
6874         ((TH1F*)flistMCproperties->FindObject("hMCD0EnergyVsAvBDaughtEn"))->Fill((mcPart->E()-(mcD0Parent->E()/nBdaught))/mcD0Parent->E());
6875         //calculate open angle
6876         if((pxyzMum[0]!=0.||pxyzMum[1]!=0.||pxyzMum[2]!=0.)&&(pxyzDaught[0]!=0.||pxyzDaught[1]!=0.||pxyzDaught[2]!=0.))cosOpenAngle=(pxyzDaught[0]*pxyzMum[0]+pxyzDaught[1]*pxyzMum[1]+pxyzDaught[2]*pxyzMum[2])/(TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2])*TMath::Sqrt(pxyzDaught[0]*pxyzDaught[0]+pxyzDaught[1]*pxyzDaught[1]+pxyzDaught[2]*pxyzDaught[2]));
6877         ((TH1F*)flistMCproperties->FindObject("hMCD0BhadrAngle"))->Fill(cosOpenAngle);
6878         ((TH2F*)flistMCproperties->FindObject("hMCD0BhadrAngleEnergy"))->Fill(mcPart->E(),cosOpenAngle);
6879       }
6880    }
6881    ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(1,cquarksMC);
6882    ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(2,nD0all);
6883    ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(3,nD0FromB);
6884    ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(4,nD0bMeson);
6885    ((TH1F*)flistMCproperties->FindObject("hMCPartFound"))->Fill(5,nD0bBaryon);
6886    
6887  }
6888
6889
6890 void AliAnalysisTaskSECharmFraction::SetPtBins(Int_t nbins,const Float_t *ptbins){
6891   if((fptbins)!=0x0)delete fptbins;
6892   fnbins=nbins;fptbins=new Float_t[fnbins];
6893   memcpy(fptbins,ptbins,fnbins*sizeof(Float_t));
6894   return;
6895 }
6896
6897 void AliAnalysisTaskSECharmFraction::SetStandardMassSelection(){
6898   //SET THE DEFAULT VALUES FOR INVARIANT MASS SELECTION
6899
6900   /*HERE DEFAULT
6901     SetSignalInvMassCut();
6902     SetLargeInvMassCut();
6903     SetSideBandInvMassCut();
6904     SetSideBandInvMassWindow();
6905   */
6906
6907   // HERE FOR SEARCH FOR SIGNAL
6908   SetSignalInvMassCut();
6909   SetLargeInvMassCut();
6910   SetSideBandInvMassCut();
6911   SetSideBandInvMassWindow();
6912   return;
6913 }
6914
6915 Bool_t AliAnalysisTaskSECharmFraction::SpecialSelD0(AliAODRecoDecayHF2Prong *d,Int_t &nusedforVtx){
6916   
6917   AliAODTrack *trk0 = (AliAODTrack*)d->GetDaughter(0);
6918   AliAODTrack *trk1 = (AliAODTrack*)d->GetDaughter(1);
6919   nusedforVtx=0;
6920   if(trk0->GetUsedForPrimVtxFit())nusedforVtx++;
6921   if(trk1->GetUsedForPrimVtxFit())nusedforVtx++;
6922   if(nusedforVtx>fNtrMaxforVtx)return kFALSE;
6923   
6924   if(TMath::Abs(d->Getd0Prong(1)) < -99999.  || 
6925      TMath::Abs(d->Getd0Prong(0)) < -99999.) return kFALSE;
6926   
6927   return kTRUE;
6928 }
6929
6930
6931
6932 AliAODVertex* AliAnalysisTaskSECharmFraction::GetPrimaryVtxSkipped(AliAODEvent *aodev,AliAODRecoDecayHF2Prong *d){
6933   //Calculate the primary vertex w/o the daughter tracks of the candidate
6934   
6935   AliESDVertex *vertexESD=0x0;
6936   AliAODVertex *vertexAOD=0x0;
6937   AliVertexerTracks *vertexer = new AliVertexerTracks(aodev->GetMagneticField());
6938   
6939   Int_t skipped[2];
6940   Int_t nTrksToSkip=2;
6941   AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(0);
6942   skipped[0]=dgTrack->GetID();
6943   dgTrack = (AliAODTrack*)d->GetDaughter(1);
6944   skipped[1]=dgTrack->GetID();
6945
6946  
6947   //
6948   vertexer->SetSkipTracks(nTrksToSkip,skipped);
6949   vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(aodev); 
6950   vertexer->SetMinClusters(4);  
6951   if(!vertexESD) return vertexAOD;
6952   if(vertexESD->GetNContributors()<=0) { 
6953     AliDebug(2,"vertexing failed"); 
6954     delete vertexESD; vertexESD=NULL;
6955     return vertexAOD;
6956   }
6957   
6958   delete vertexer; vertexer=NULL;
6959   
6960   
6961   // convert to AliAODVertex
6962   Double_t pos[3],cov[6],chi2perNDF;
6963   vertexESD->GetXYZ(pos); // position
6964   vertexESD->GetCovMatrix(cov); //covariance matrix
6965   chi2perNDF = vertexESD->GetChi2toNDF();
6966   delete vertexESD; vertexESD=NULL;
6967   
6968   vertexAOD = new AliAODVertex(pos,cov,chi2perNDF);
6969   return vertexAOD;
6970   
6971 }
6972
6973
6974 void AliAnalysisTaskSECharmFraction::Terminate(const Option_t*){
6975   //TERMINATE METHOD: NOTHING TO DO
6976
6977
6978 }