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