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