Reading muon trigger scalers with the DA of the muon trigger and transfer
[u/mrichter/AliRoot.git] / FASTSIM / AliMUONFastTracking.cxx
index 1273c0e..c38b83e 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.10  2006/01/27 09:51:37  morsch
-Some small corrections to avoid infinite loops at high momenta.
-(A. de Falco)
-
-Revision 1.9  2004/02/03 16:45:20  morsch
-Unique name for functions (TF1).
-
-Revision 1.8  2004/01/27 18:02:38  hristov
-Removing some warning (Sun)
-
-Revision 1.7  2003/11/13 14:21:57  morsch
-Coding Rule violation corrections.
-
-Revision 1.6  2003/08/12 15:16:25  morsch
-Saver initialisation of fFitp  array. (Lenaic COUEDEL)
-
-Revision 1.5  2003/08/05 16:14:20  morsch
-Some problems with too big fluctuations corrected. (A. de Falco)
-
-Revision 1.2  2003/01/08 10:29:33  morsch
-Path to data file changed.
-
-Revision 1.1  2003/01/06 10:13:33  morsch
-First commit.
-
-*/
+/* $Id$ */
 
 //-------------------------------------------------------------------------
 //        Class AliMUONFastTracking 
@@ -53,24 +26,30 @@ First commit.
 //  AliFastMuonTrackingRes. 
 //-------------------------------------------------------------------------
 
-#include "AliMUONFastTracking.h"
-#include "AliMUONFastTrackingEntry.h"
-#include <TSpline.h>
-#include <TFile.h>
-#include <TH3.h>
-#include <TF1.h>
-#include <TRandom.h>
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
+
 #include <Riostream.h>
+#include <TF1.h>
+#include <TFile.h>
+#include <TH3.h>
+#include <TMath.h>
+#include <TRandom.h>
+#include <TSpline.h>
 
+#include "AliMUONFastTracking.h"
+#include "AliMUONFastTrackingEntry.h"
+
+using std::cout;
+using std::endl;
 ClassImp(AliMUONFastTracking)
 
 
 AliMUONFastTracking* AliMUONFastTracking::fgMUONFastTracking=NULL;
 
 static Double_t FitP(Double_t *x, Double_t *par){
+// Fit function
     Double_t dx = x[0] - par[0];
     Double_t dx2 = x[0] - par[4];
     Double_t sigma = par[1] * ( 1 + par[2] * dx);
@@ -85,7 +64,24 @@ static Double_t FitP(Double_t *x, Double_t *par){
     return TMath::Abs(value);
 } 
 
-AliMUONFastTracking::AliMUONFastTracking(const AliMUONFastTracking & ft):TObject()
+AliMUONFastTracking::AliMUONFastTracking(const AliMUONFastTracking & ft):
+    TObject(),
+    fNbinp(10),
+    fPmin(0.),
+    fPmax(200.),
+    fDeltaP((fPmax-fPmin)/fNbinp),
+    fNbintheta(10),
+    fThetamin(2.),
+    fThetamax(9.),
+    fDeltaTheta((fThetamax-fThetamin)/fNbintheta),
+    fNbinphi(10),
+    fPhimin(-180.),
+    fPhimax(180.),
+    fDeltaPhi((fPhimax-fPhimin)/fNbinphi),
+    fPrintLevel(1),
+    fBkg(0.),
+    fSpline(0),
+    fClusterFinder(kOld)                                                                        
 {
 // Copy constructor
     ft.Copy(*this);
@@ -103,7 +99,23 @@ AliMUONFastTracking* AliMUONFastTracking::Instance()
     }
 }
 
-AliMUONFastTracking::AliMUONFastTracking() 
+AliMUONFastTracking::AliMUONFastTracking():
+    fNbinp(10),
+    fPmin(0.),
+    fPmax(200.),
+    fDeltaP((fPmax-fPmin)/fNbinp),
+    fNbintheta(10),
+    fThetamin(2.),
+    fThetamax(9.),
+    fDeltaTheta((fThetamax-fThetamin)/fNbintheta),
+    fNbinphi(10),
+    fPhimin(-180.),
+    fPhimax(180.),
+    fDeltaPhi((fPhimax-fPhimin)/fNbinphi),
+    fPrintLevel(1),
+    fBkg(0.),
+    fSpline(0),
+    fClusterFinder(kOld)
 {
 //
 // constructor
@@ -115,33 +127,6 @@ AliMUONFastTracking::AliMUONFastTracking()
       }
     }
   }
-
-    fClusterFinder = kOld; 
-    fPrintLevel = 1;  
-    // read binning; temporarily put by hand
-    Float_t pmin = 0, pmax = 200;
-    Int_t   nbinp = 10;
-    Float_t thetamin = 2, thetamax = 9;
-    Int_t   nbintheta=10;
-    Float_t phimin = -180, phimax =180;
-    Int_t   nbinphi=10;
-    //--------------------------------------
-
-    fNbinp = nbinp;
-    fPmin  = pmin;
-    fPmax  = pmax;
-    
-    fNbintheta = nbintheta;
-    fThetamin  = thetamin;
-    fThetamax  = thetamax;
-    
-    fNbinphi = nbinphi;
-    fPhimin  = phimin;
-    fPhimax  = phimax;
-    
-    fDeltaP     = (fPmax-fPmin)/fNbinp;
-    fDeltaTheta = (fThetamax-fThetamin)/fNbintheta;
-    fDeltaPhi   = (fPhimax-fPhimin)/fNbinphi;
 }
 
 void AliMUONFastTracking::Init(Float_t bkg)
@@ -161,8 +146,8 @@ void AliMUONFastTracking::Init(Float_t bkg)
   }
   
   char filename [100]; 
-  if (fClusterFinder==kOld) sprintf (filename,"$(ALICE_ROOT)/FASTSIM/data/MUONtrackLUT.root"); 
-  else sprintf (filename,"$(ALICE_ROOT)/FASTSIM/data/MUONtrackLUT-AZ.root"); 
+  if (fClusterFinder==kOld) snprintf (filename, 100, "$(ALICE_ROOT)/FASTSIM/data/MUONtrackLUT.root"); 
+  else snprintf (filename, 100, "$(ALICE_ROOT)/FASTSIM/data/MUONtrackLUT-AZ.root"); 
 
   TFile *file = new TFile(filename); 
   ReadLUT(file);
@@ -185,13 +170,13 @@ void AliMUONFastTracking::ReadLUT(TFile* file)
 
   const Float_t kBkg[4] = {0, 0.5, 1, 2};
   for (Int_t ibkg=0; ibkg<4; ibkg++) {
-    sprintf (tag,"BKG%g",kBkg[ibkg]); 
+    snprintf (tag, 40, "BKG%g",kBkg[ibkg]); 
     file->cd(tag);
     for (Int_t isplp = 0; isplp<kSplitP; isplp++) { 
       for (Int_t ispltheta = 0; ispltheta<kSplitTheta; ispltheta++) { 
-       sprintf (tag2,"heff[%d][%d]",isplp,ispltheta); 
+       snprintf (tag2, 40, "heff[%d][%d]",isplp,ispltheta); 
        heff[isplp][ispltheta] = (TH3F*)gDirectory->Get(tag2);
-       sprintf (tag2,"hacc[%d][%d]",isplp,ispltheta); 
+       snprintf (tag2, 40, "hacc[%d][%d]",isplp,ispltheta); 
        hacc[isplp][ispltheta] = (TH3F*)gDirectory->Get(tag2);
       }
     }    
@@ -636,17 +621,17 @@ void AliMUONFastTracking::SetSpline(){
        ysigmaphi[ip]   = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
       }
       if (fPrintLevel>3) cout << " creating new spline " << splname << endl;
-      sprintf (splname,"fSplineEff[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineEff[%d][%d]",ispline,ivar);
       fSplineEff[ispline][ivar] = new TSpline3(splname,xsp2,yeff,5 * nbins[ivar]);
-      sprintf (splname,"fSplineAcc[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineAcc[%d][%d]",ispline,ivar);
       fSplineAcc[ispline][ivar] = new TSpline3(splname,xsp2,yacc,5 * nbins[ivar]);
-      sprintf (splname,"fSplineSigmap[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmap[%d][%d]",ispline,ivar);
       fSplineSigmap[ispline][ivar] = new TSpline3(splname,xspl,ysigmap,nbins[ivar]);
-      sprintf (splname,"fSplineSigma1p[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigma1p[%d][%d]",ispline,ivar);
       fSplineSigma1p[ispline][ivar] = new TSpline3(splname,xspl,ysigma1p,nbins[ivar]);
-      sprintf (splname,"fSplineSigmatheta[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmatheta[%d][%d]",ispline,ivar);
       fSplineSigmatheta[ispline][ivar] = new TSpline3(splname,xspl,ysigmatheta,nbins[ivar]);
-      sprintf (splname,"fSplineSigmaphi[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmaphi[%d][%d]",ispline,ivar);
       fSplineSigmaphi[ispline][ivar] = new TSpline3(splname,xspl,ysigmaphi,nbins[ivar]);
       ispline++;
     }
@@ -665,17 +650,17 @@ void AliMUONFastTracking::SetSpline(){
        ysigmaphi[itheta]   = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
       }
       if (fPrintLevel>3) cout << " creating new spline " << splname << endl;
-      sprintf (splname,"fSplineEff[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineEff[%d][%d]",ispline,ivar);
       fSplineEff[ispline][ivar] = new TSpline3(splname,xspl,yeff, nbins[ivar]);
-      sprintf (splname,"fSplineAcc[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineAcc[%d][%d]",ispline,ivar);
       fSplineAcc[ispline][ivar] = new TSpline3(splname,xspl,yacc, nbins[ivar]);
-      sprintf (splname,"fSplineSigmap[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmap[%d][%d]",ispline,ivar);
       fSplineSigmap[ispline][ivar] = new TSpline3(splname,xspl,ysigmap,nbins[ivar]);
-      sprintf (splname,"fSplineSigma1p[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigma1p[%d][%d]",ispline,ivar);
       fSplineSigma1p[ispline][ivar] = new TSpline3(splname,xspl,ysigma1p,nbins[ivar]);
-      sprintf (splname,"fSplineSigmatheta[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmatheta[%d][%d]",ispline,ivar);
       fSplineSigmatheta[ispline][ivar] = new TSpline3(splname,xspl,ysigmatheta,nbins[ivar]);
-      sprintf (splname,"fSplineSigmaphi[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmaphi[%d][%d]",ispline,ivar);
       fSplineSigmaphi[ispline][ivar] = new TSpline3(splname,xspl,ysigmaphi,nbins[ivar]);
       ispline++;
     }
@@ -694,17 +679,17 @@ void AliMUONFastTracking::SetSpline(){
        ysigmaphi[iphi]   = fCurrentEntry[ip][itheta][iphi]->GetSigmaphi();
       }
       if (fPrintLevel>3) cout << " creating new spline " << splname << endl;
-      sprintf (splname,"fSplineEff[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineEff[%d][%d]",ispline,ivar);
       fSplineEff[ispline][ivar] = new TSpline3(splname,xspl,yeff, nbins[ivar]);
-      sprintf (splname,"fSplineAcc[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineAcc[%d][%d]",ispline,ivar);
       fSplineAcc[ispline][ivar] = new TSpline3(splname,xspl,yacc, nbins[ivar]);
-      sprintf (splname,"fSplineSigmap[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmap[%d][%d]",ispline,ivar);
       fSplineSigmap[ispline][ivar] = new TSpline3(splname,xspl,ysigmap,nbins[ivar]);
-      sprintf (splname,"fSplineSigma1p[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigma1p[%d][%d]",ispline,ivar);
       fSplineSigma1p[ispline][ivar] = new TSpline3(splname,xspl,ysigma1p,nbins[ivar]);
-      sprintf (splname,"fSplineSigmatheta[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmatheta[%d][%d]",ispline,ivar);
       fSplineSigmatheta[ispline][ivar] = new TSpline3(splname,xspl,ysigmatheta,nbins[ivar]);
-      sprintf (splname,"fSplineSigmaphi[%d][%d]",ispline,ivar);
+      snprintf (splname, 40, "fSplineSigmaphi[%d][%d]",ispline,ivar);
       fSplineSigmaphi[ispline][ivar] = new TSpline3(splname,xspl,ysigmaphi,nbins[ivar]);
       ispline++;
     }
@@ -791,7 +776,7 @@ TF1* AliMUONFastTracking::GetFitP(Int_t ip,Int_t itheta,Int_t iphi) {
   // gets the correct prec-pgen distribution for a given LUT cell 
   if (!fFitp[ip][itheta][iphi]) {
     char name[256];
-    sprintf(name, "fit_%d_%d_%d", ip, itheta, iphi);
+    snprintf(name, 256, "fit_%d_%d_%d", ip, itheta, iphi);
     fFitp[ip][itheta][iphi] = new TF1(name ,FitP,-20.,20.,6);
     fFitp[ip][itheta][iphi]->SetNpx(500);    
     fFitp[ip][itheta][iphi]->SetParameters(0.,0.,0.,0.,0.,0.);