/************************************************************************** * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Id$ */ /////////////////////////////////////////////////////////////////////////////// // // // Wsu Cosmic Ray SetUp // // This class contains the description of the Wsu Cosmic Ray SetUp // // external volume // // // //Begin_Html /*

The responsible person for this module is Alexei Pavlino, WSU.

*/
//End_Html
//                                                                           //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include "AliEMCALWsuCosmicRaySetUp.h"
//#include "AliMagF.h"
#include "AliStack.h"
#include "AliRun.h"
#include "AliMC.h"

#include "AliEMCALHistoUtilities.h"

using namespace std;

typedef AliEMCALHistoUtilities hist;

TDatabasePDG *pdg = 0; 

Int_t gid=0;

ClassImp(AliEMCALWsuCosmicRaySetUp)

//  TList *fLHists=0, *ll=0; 

//_____________________________________________________________________________
  AliEMCALWsuCosmicRaySetUp::AliEMCALWsuCosmicRaySetUp(): AliModule()
						      //,fMasterVolume()
						    ,fLHists(0),fMasterVolume()
{
  //
  // Default constructor
  //
}
 
//_____________________________________________________________________________
AliEMCALWsuCosmicRaySetUp::AliEMCALWsuCosmicRaySetUp(const char *name, const char *title)
       : AliModule(name,title)
						    //,fMasterVolume()
						    ,fLHists(0),fMasterVolume()
{
  //
  // Standard constructor of the  Wsu Cosmic Ray SetUp external volume
  //
  //PH  SetMarkerColor(7);
  //PH  SetMarkerStyle(2);
  //PH  SetMarkerSize(0.4);
}
 
//_____________________________________________________________________________
void AliEMCALWsuCosmicRaySetUp::CreateGeometry()
{
  //
  // Create the geometry of the Alice external body
  //
  //Begin_Html
  /*
    
  */
  //End_Html
  pdg = TDatabasePDG::Instance();

  // Master Volume
  fMasterVolume[0] = fMasterVolume[1] = 35.0;
  fMasterVolume[2] = 450.;

  Int_t *idtmed = fIdtmed->GetArray()+1;
  int idAir = idtmed[0];
  gMC->Gsvolu(GetName(),"BOX",idAir, fMasterVolume,3); // Master volume
  //
  // Sc counters
  //
  Float_t sc[3]; // tube
  sc[0] = 0.0;
  sc[1] = 10.0;
  sc[2] = 1.0; // thicness of Sc is 2 cm
  Float_t zsc[3] = {10.,330.6, 810.1}; 
  int idSC = idtmed[1];
  gMC->Gsvolu("SCOU","TUBE",idSC, sc,3); // Master volume
  printf(" idtmed[0] %i idtmed[1] %i \n", idtmed[0] , idtmed[1]); 
  Int_t idRot=0; // no rotation
  for(Int_t i=0; i<3; i++) {
    Float_t zpos = zsc[i] - fMasterVolume[2];
    gMC->Gspos("SCOU", i+1, "WSUC", 0.0, 0.0, zpos, idRot, "ONLY"); 
  }
  //
  // Dead end : Dec 2,2010
  //
  Float_t zbox[3]={30., 30.0, 0.1};
  gMC->Gsvolu("SEND","BOX",idAir, zbox,3); // Master volume
  gMC->Gspos("SEND", 1, "WSUC", 0.0, 0.0, 448.0, idRot, "ONLY"); 
  // Hists
  fLHists = new TList;
  fLHists->SetName("hists");
  //
  //AliMC *ALIMC  = dynamic_cast(gMC);
  //AliGenBox* gB = dynamic_cast(ALIMC->Generator());
  //Double_t p = gB->
  Double_t pmom=1.5; 
  fLHists->Add(BookKineHists(pmom,"primeKineHists"));
  fLHists->Add(BookKineHists(pmom,"endKineHists"));
  fLHists->Add(BookKineHists(pmom,"secondaryKineHists"));
  //ll = BookKineHists(1.,"kineHists");
  //gROOT->GetListOfBrowsables()->Add(ll);
}
 
//_____________________________________________________________________________
void AliEMCALWsuCosmicRaySetUp::CreateMaterials()
{
// Create materials and media
  Int_t   isxfld = 0;
  Float_t sxmgmx = 0., deemax = 0.1;  
  // AIR
  Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
  Float_t zAir[4]={6.,7.,8.,18.};
  Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
  Float_t dAir = 1.20479E-3;
  AliMixture(1,"Air     $",aAir,zAir,dAir,4,wAir);

  // --- The polysterene scintillator (CH) ---
  Float_t aP[2] = {12.011, 1.00794} ;
  Float_t zP[2] = {6.0, 1.0} ;
  Float_t wP[2] = {1.0, 1.0} ;
  Float_t dP = 1.032 ;
  AliMixture(2, "Polystyrene$", aP, zP, dP, -2, wP) ;

  //
  AliMedium(1,"Air     $",1,0,isxfld,sxmgmx,10,-1,-0.1,0.1 ,-10);
  AliMedium(2, "Scintillator$", 2, 1,
            isxfld, sxmgmx, 10.0, 0.001, deemax, 0.001, 0.001, 0, 0) ;
  // cuts
  DefineCuts(1);
  DefineCuts(2);
}
 
void AliEMCALWsuCosmicRaySetUp::DefineCuts(const Int_t idtmed)
{
  // Dec 2,2010 : it works
  Float_t cutgam=10.e-5; // 100 kev;
  Float_t cutele=10.e-5; // 100 kev;
  gMC->Gstpar(idtmed,"CUTGAM", cutgam);
  gMC->Gstpar(idtmed,"CUTELE", cutele); // 1MEV -> 0.1MEV; 15-aug-05
  gMC->Gstpar(idtmed,"BCUTE",  cutgam);  // BCUTE and BCUTM start from GUTGUM
  gMC->Gstpar(idtmed,"BCUTM",  cutgam);  // BCUTE and BCUTM start from GUTGUM
  // --- Generate explicitly delta rays in Lead ---
  gMC->Gstpar(idtmed, "LOSS", 3) ;
  gMC->Gstpar(idtmed, "DRAY", 1) ;
  gMC->Gstpar(idtmed, "DCUTE", cutele) ;
  gMC->Gstpar(idtmed, "DCUTM", cutele) ;
}
 
void AliEMCALWsuCosmicRaySetUp::StepManager(void)
{
  // Dec 1,2010
  static Int_t pri=1;
  static TString curVolName="";
  static TLorentzVector pos;  // Lorentz vector of the track current position.
  static TLorentzVector mom;  // Lorentz vector of the track current momentum.

  if(pri>=2) printf(" AliEMCALWsuCosmicRaySetUp::StepManager %s \n", gMC->CurrentVolName());
  Int_t tracknumber =  gAlice->GetMCApp()->GetCurrentTrackNumber();
  //  Int_t parent=0;
  TParticle* part=0;
  curVolName = gMC->CurrentVolName();
  if(curVolName.Contains("SEND")) {
    gMC->TrackMomentum(mom);
    gMC->TrackPosition(pos);
    if(pri>=2) printf(" %s tracknumber %i p %f \n", curVolName.Data(), tracknumber, mom.P());
    if(pri>=2) printf(" x %f y %f z %f \n", pos[0], pos[1], pos[2]);
    if(gMC->IsTrackEntering()) { // primary only TList *l = GetLhists(1);
      TList *l = 0;
      if(tracknumber==0){
        l = GetLhists(1);
        part=gAlice->GetMCApp()->Particle(0);
        gid = pdg->ConvertPdgToGeant3(part->GetPdgCode()); 
        hist::FillH1(l, 1, double(gid));
      } else {
        l = GetLhists(2);
        part=gAlice->GetMCApp()->Particle(tracknumber);
        gid = pdg->ConvertPdgToGeant3(part->GetPdgCode()); 
        hist::FillH1(l, 1, double(gid));
      }
      Int_t ic = 2;
      hist::FillH1(l, ic++, mom.P());
      hist::FillH1(l, ic++, mom.Eta());
      hist::FillH1(l, ic++, TVector2::Phi_0_2pi(mom.Phi())*TMath::RadToDeg() );
      hist::FillH1(l, ic++, mom.Theta()*TMath::RadToDeg());
    }
  }
}

void AliEMCALWsuCosmicRaySetUp::FinishEvent()
{
  // Dec 2,2010
  int ic=0;

  TList *l = GetLhists(0);
  //  TList *l = ll;
  AliStack* st =  AliRunLoader::Instance()->Stack();
  TParticle *p = st->Particle(0);
  gid = pdg->ConvertPdgToGeant3(p->GetPdgCode());

  ic=1;
  hist::FillH1(l, ic++, double(gid));
  hist::FillH1(l, ic++, p->P());
  hist::FillH1(l, ic++, p->Eta());
  hist::FillH1(l, ic++, TVector2::Phi_0_2pi(p->Phi())*TMath::RadToDeg() );
  hist::FillH1(l, ic++, p->Theta()*TMath::RadToDeg());
}

TList* AliEMCALWsuCosmicRaySetUp::BookKineHists(const Double_t p , const Char_t *opt)
{
  // Dec 2,2010
  gROOT->cd();
  TH1::AddDirectory(1);

  TH1 *h = 0, *hgid=0;
  Int_t nphi=180, nmax=1100;
  Double_t phimin=0.0, phimax=360.;
  Double_t pmax=110.;
  if(p>0.1) pmax = 1.1*p;
  h = new TH1F("00_hNPrim"," number of primary particles ", 10, 0.5, 10.5);
  hgid = new TH1F("01_hGidprim","Geant Id of primary particles", 16, 0.5, 16.5);
  new TH1F("02_hPmomPrim","p of primary particles", nmax, 0.0, pmax);
  new TH1F("03_hEtaPrim","#eta primary particles", 80, 0.0, 8.0);
  new TH1F("04_hPhiPrim","#phi primary particles", nphi,phimin,phimax);
  new TH1F("05_hThetaPrim","#theta primary particles", 90, 0.0, 90.);
  //
  TAxis *xax=hgid->GetXaxis();
  xax->SetBinLabel(1,"#gamma");
  xax->SetBinLabel(2,"e^{+}");
  xax->SetBinLabel(3,"e^{-}");
  xax->SetBinLabel(4,"#nu");
  xax->SetBinLabel(5,"#mu^{+}");
  xax->SetBinLabel(6,"#mu^{-}");
  xax->SetBinLabel(7,"#pi^{0}");
  xax->SetBinLabel(8,"#pi^{+}");
  xax->SetBinLabel(9,"#pi^{-}");
  xax->SetBinLabel(10,"K_{L}");
  xax->SetBinLabel(11,"K^{+}");
  xax->SetBinLabel(12,"K^{-}");
  xax->SetBinLabel(13,"n");
  xax->SetBinLabel(14,"p");
  xax->SetBinLabel(15,"#bar{p}");
  xax->SetBinLabel(16,"K_{s}");
  //  hgid->SetBinLabel(,"");

  TList *l = 0;
  l = hist::MoveHistsToList(opt, 1);
  if(strlen(opt)) hist::AddToNameAndTitleToList(l, opt, opt);

  TH1::AddDirectory(0);

  return l;
}

void AliEMCALWsuCosmicRaySetUp::Browse(TBrowser* b)
{
  if(fLHists) b->Add(fLHists);
  TObject::Browse(b);
}
/*
*/