LCOV - code coverage report
Current view: top level - EVGEN - AliGenDoubleScan.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 56 1.8 %
Date: 2016-06-14 17:26:59 Functions: 1 11 9.1 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : /* $Id$ */
      17             : 
      18             : // As AliGenScan,  generation of particles on a 3-dim grid
      19             : // but here double hits with a predefined distance are generated.
      20             : // The second particle is generated at a constant distance but with random phi.
      21             : // Generator can be used to evaluate double hit resolutions.
      22             : // Author: andreas.morsch@cern.ch
      23             : 
      24             : #include "AliGenDoubleScan.h"
      25             : #include "AliRun.h"
      26             : 
      27           6 :  ClassImp(AliGenDoubleScan)
      28             :     
      29             :  AliGenDoubleScan::AliGenDoubleScan()
      30           0 :      :AliGenScan(-1),
      31           0 :       fDistance(0.)
      32           0 : {
      33             :     // Default constructor
      34           0 : }
      35             : 
      36             : AliGenDoubleScan::AliGenDoubleScan(Int_t npart)
      37           0 :     :AliGenScan(npart),
      38           0 :      fDistance(0.)
      39           0 : {
      40             : // Constructor
      41           0 :     fName = "Double Scan";
      42           0 :     fTitle= "Particle Generator for two correlated particles on a grid";
      43           0 : }
      44             : 
      45             : //____________________________________________________________
      46           0 : AliGenDoubleScan::~AliGenDoubleScan()
      47           0 : {
      48             : // Destructor
      49           0 : }
      50             : 
      51             : //____________________________________________________________
      52             : void AliGenDoubleScan::Generate()
      53             : {
      54             :     //
      55             :     // Generate one trigger
      56             :     //
      57             :   
      58           0 :     Float_t polar[3]= {0,0,0};
      59             :     //
      60           0 :     Float_t origin[3];
      61           0 :     Float_t p[3];
      62           0 :     Int_t nt;
      63             :     Float_t pmom, theta, phi;
      64             :     //
      65           0 :     Float_t random[6];
      66             :     Float_t dx,dy,dz;
      67             :     
      68             :     //
      69           0 :     if (fNx > 0) {
      70           0 :         dx=(fXCmax-fXCmin)/fNx;
      71           0 :     } else {
      72             :         dx=1e10;
      73             :     }
      74             : 
      75           0 :     if (fNy > 0) {
      76           0 :         dy=(fYCmax-fYCmin)/fNy;
      77           0 :     } else {
      78             :         dy=1e10;
      79             :     }
      80             :     
      81           0 :     if (fNz > 0) {
      82           0 :       dz=(fZmax-fZmin)/fNz;
      83           0 :     } else {
      84             :         dz=1e10;
      85             :     }
      86           0 :     for (Int_t ix=0; ix<fNx; ix++) {
      87           0 :       for (Int_t iy=0; iy<fNy; iy++) {
      88           0 :           for (Int_t iz=0; iz<fNz; iz++){
      89           0 :               Rndm(random,6);
      90           0 :               origin[0]=fXCmin+ix*dx+2*(random[0]-0.5)*fOsigma[0];
      91           0 :               origin[1]=fYCmin+iy*dy+2*(random[1]-0.5)*fOsigma[1];
      92           0 :               origin[2]=fZmin+iz*dz+2*(random[2]-0.5)*fOsigma[2];            
      93           0 :               pmom=fPMin+random[3]*(fPMax-fPMin);
      94           0 :               theta=fThetaMin+random[4]*(fThetaMax-fThetaMin);
      95           0 :               phi=fPhiMin+random[5]*(fPhiMax-fPhiMin);
      96           0 :               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
      97           0 :               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
      98           0 :               p[2] = pmom*TMath::Cos(theta);
      99           0 :               PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
     100             : //
     101             : // Generate 2nd particle at distance fDistance from  the first
     102             : //
     103           0 :               Rndm(random,6);
     104           0 :               Float_t phi2=2.*TMath::Pi()*random[0];
     105           0 :               Float_t dx2  =fDistance*TMath::Sin(phi2);
     106           0 :               Float_t dy2  =fDistance*TMath::Cos(phi2);       
     107           0 :               origin[0]=origin[0]+dx2;
     108           0 :               origin[1]=origin[1]+dy2;        
     109           0 :               pmom=fPMin+random[1]*(fPMax-fPMin);
     110           0 :               theta=fThetaMin+random[2]*(fThetaMax-fThetaMin);
     111           0 :               phi=fPhiMin+random[3]*(fPhiMax-fPhiMin);
     112           0 :               p[0] = pmom*TMath::Cos(phi)*TMath::Sin(theta);
     113           0 :               p[1] = pmom*TMath::Sin(phi)*TMath::Sin(theta);
     114           0 :               p[2] = pmom*TMath::Cos(theta);
     115           0 :               PushTrack(fTrackIt,-1,fIpart,p,origin,polar,0,kPPrimary,nt);
     116             :           }
     117             :       }
     118             :   }
     119           0 : }
     120             : 
     121             : 
     122             : 
     123             : 
     124             : 
     125             : 
     126             : 
     127             : 
     128             : 
     129             : 
     130             : 
     131             : 
     132             : 

Generated by: LCOV version 1.11