LCOV - code coverage report
Current view: top level - EVGEN - AliGenTHnSparse.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 67 1.5 %
Date: 2016-06-14 17:26:59 Functions: 1 14 7.1 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-2007, 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             : // Particle generator according to 4 correlated variables : here
      18             : // z, ptot, r, theta. The input is a THnSparse object included in
      19             : // the root file (path and name to be set via the SetTHnSparse method).
      20             : // This class is similar to AliGenFunction.
      21             : //-----------------------------------------------------------------------
      22             : // Author : X. Lopez - LPC Clermont (fr)
      23             : //-----------------------------------------------------------------------
      24             : /*
      25             :   Example for generation :
      26             :         AliGenTHnSparse *gener = new AliGenTHnSparse();
      27             :         gener->SetNumberParticles(10);
      28             :         gener->SetPart(13,kTRUE); // for generating id 13 and -13
      29             :         gener->SetThnSparse("file_name","thn_name");
      30             :         gener->Init();
      31             : */
      32             : 
      33             : #include <TRandom.h>
      34             : #include <TFile.h>
      35             : #include "THnSparse.h"
      36             : 
      37             : #include "AliGenTHnSparse.h"
      38             : 
      39             : // NEW
      40             : #include "AliRun.h"
      41             : #include "AliLog.h"
      42             : #include "AliGenEventHeader.h"
      43             : //
      44             : 
      45           6 : ClassImp(AliGenTHnSparse)
      46             : 
      47             : //_______________________________________________________________________
      48             : AliGenTHnSparse::AliGenTHnSparse():
      49           0 :   AliGenerator(),
      50           0 :   fHn(0),
      51           0 :   fFile(0),
      52           0 :   fIpart(0),
      53           0 :   fBoth(kFALSE)
      54           0 : {
      55             :     // Default constructor
      56           0 :     SetNumberParticles(1);
      57           0 : }
      58             : 
      59             : //_______________________________________________________________________
      60             : AliGenTHnSparse::AliGenTHnSparse(const AliGenTHnSparse& func):
      61           0 :   AliGenerator(),
      62           0 :   fHn(func.fHn),
      63           0 :   fFile(func.fFile),
      64           0 :   fIpart(func.fIpart),
      65           0 :   fBoth(func.fBoth)
      66           0 : {
      67             :     // Copy constructor
      68           0 :     SetNumberParticles(1);
      69           0 : }
      70             : 
      71             : //_______________________________________________________________________
      72             : AliGenTHnSparse & AliGenTHnSparse::operator=(const AliGenTHnSparse& func)
      73             : {
      74             :     // Assigment operator
      75           0 :     if(&func == this) return *this;
      76           0 :     fHn  = func.fHn;
      77           0 :     fFile  = func.fFile;
      78           0 :     fIpart  = func.fIpart;
      79           0 :     fBoth   = func.fBoth;
      80             :     
      81           0 :     return *this;
      82           0 : }
      83             : 
      84             : //_______________________________________________________________________
      85           0 : AliGenTHnSparse::~AliGenTHnSparse()
      86           0 : {
      87             :     // Destructor
      88           0 :     delete fFile;
      89           0 : }
      90             : 
      91             : //_______________________________________________________________________
      92             : void AliGenTHnSparse::Generate()
      93             : {
      94             :     // Generate Npart of id Ipart
      95             :     Int_t naccepted =0;
      96             :     
      97           0 :     Double_t rand[4]; //  z, ptot, r, theta
      98           0 :     Float_t pos[3], phi, ptot, theta, pt, z, r;
      99           0 :     Float_t mom[3];
     100           0 :     Int_t pdg = fIpart;
     101             :   
     102           0 :     for (Int_t ipart = 0; ipart < fNpart && naccepted<fNpart; ipart++) {
     103             : 
     104           0 :         fHn->GetRandom(rand);
     105           0 :         z=rand[0];
     106           0 :         ptot=rand[1];
     107           0 :         r=rand[2];
     108           0 :         theta=rand[3];
     109             : 
     110             : // Phi: same for position and momemtum
     111             :  
     112           0 :         phi=(-180+gRandom->Rndm()*360)*TMath::Pi()/180;
     113             : 
     114             : // position at production
     115             :         
     116           0 :         pos[0] = r*TMath::Cos(phi);
     117           0 :         pos[1] = r*TMath::Sin(phi);
     118           0 :         pos[2] = z;
     119             :         
     120             : // momentum at production
     121             : 
     122           0 :         pt     = ptot*TMath::Sin(theta);
     123           0 :         mom[0] = pt*TMath::Cos(phi); 
     124           0 :         mom[1] = pt*TMath::Sin(phi); 
     125           0 :         mom[2] = ptot*TMath::Cos(theta);
     126             : 
     127             : // propagation
     128             : 
     129           0 :         Float_t polarization[3] = {0,0,0};
     130           0 :         Int_t nt;
     131             : 
     132             : // Part and anti-part
     133             : 
     134           0 :         if(fBoth){
     135           0 :             Double_t sign = gRandom->Rndm();
     136           0 :             if(sign < 0.5) pdg = -fIpart;
     137             :             else pdg = fIpart;
     138           0 :         }
     139             : 
     140           0 :         PushTrack(fTrackIt,-1,pdg,mom, pos, polarization,0,kPPrimary,nt);
     141           0 :         naccepted++;
     142           0 :   }
     143             : 
     144           0 :     AliGenEventHeader* header = new AliGenEventHeader("THn");
     145           0 :     gAlice->SetGenEventHeader(header);
     146             :     return;
     147             : 
     148           0 : }
     149             : 
     150             : //_______________________________________________________________________
     151             : void AliGenTHnSparse::Init()
     152             : {
     153             :     
     154             :     // Initialisation, check consistency of selected file
     155           0 :     printf("************ AliGenTHnSparse ****************\n");
     156           0 :     printf("*********************************************\n");
     157           0 :     if (!fHn){
     158           0 :         AliFatal("THnSparse file not specified");
     159           0 :     }
     160             : 
     161           0 :     return;
     162             : }
     163             : 
     164             : //_______________________________________________________________________
     165             : void AliGenTHnSparse::SetThnSparse(char *file_name, char *thn_name)
     166             : {
     167             : 
     168             :     // Open the file and get object
     169           0 :   fFile = new TFile(file_name);
     170           0 :   fHn = (THnSparseF*)(fFile->Get(thn_name));
     171             : 
     172           0 : }

Generated by: LCOV version 1.11