Skip to content
Snippets Groups Projects
Tigress.hh 5.99 KiB
Newer Older
matta's avatar
matta committed
#ifndef Tigress_h
#define Tigress_h 1
/*****************************************************************************
 * Copyright (C) 2009-2013   this file is part of the NPTool Project         *
 *                                                                           *
 * For the licensing terms see $NPTOOL/Licence/NPTool_Licence                *
 * For the list of contributors see $NPTOOL/Licence/Contributors             *
 *****************************************************************************/

/*****************************************************************************
 * Original Author: Adrien MATTA  contact address: a.matta@surrey.ac.uk      *
 *                                                                           *
 * Creation Date  : November 2012                                            *
 * Last update    :                                                          *
 *---------------------------------------------------------------------------*
 * Decription:                                                               *
 *  This class describe the Tigress Silicon detector                           *
 *                                                                           *
 *---------------------------------------------------------------------------*
 * Comment:                                                                  *
 *                                                                           *
 *****************************************************************************/
// C++ header
#include <string>
#include <vector>

// G4 header defining G4 types
#include "globals.hh"

// G4 headers
#include "G4ThreeVector.hh"
#include "G4RotationMatrix.hh"
#include "G4LogicalVolume.hh"
#include "G4VisAttributes.hh"
#include "G4VSolid.hh"

// NPSimulation header
#include "VDetector.hh"

// NPLib
#include "TTigressData.h"
using namespace std;

//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
namespace TIGRESS
{
  // Energy and time Resolution
  const G4double ResoTime    = 0      ;
  const G4double ResoEnergy  = 0.035*MeV ;// = zzkeV of Resolution   //   Unit is MeV/2.35
  const G4double EnergyThreshold = 0.4*MeV;

}

using namespace TIGRESS ;
class Tigress : public VDetector
{
  ////////////////////////////////////////////////////
  /////// Default Constructor and Destructor /////////
  ////////////////////////////////////////////////////
public:
  Tigress() ;
   ~Tigress() ;
  
  ////////////////////////////////////////////////////
  //////// Specific Function of this Class ///////////
  ////////////////////////////////////////////////////
public:
  // Add clover at the standard position of the array
  // Take as argument the standard clover Id.
  void AddCloverStandard(vector<int> CloverId);
  
  // Add clover at a free position in space with coordinate
  // in spherical coordinate
  // Beta are the three angles of rotation in the Clover frame 
  void AddCloverFreePosition(int CloverId,
                             double R,
                             double Theta,
                             double Phi,
                             double BetaX,
                             double BetaY,
                             double BetaZ);
  
  // Return a clover in the configuration given by option (not use a the moment)
  void ConstructClover(string option);
  
  // Return a G4VSolid modeling the Crystal
  G4VSolid* ConstructCrystal();
  
  // Return a G4VSolid modeling the Capsule
  G4VSolid* ConstructCapsule();
  
  // Return a G4VSolid modeling the BGO
  G4VSolid* ConstructBGO();
  
  ////////////////////////////////////////////////////
  /////////  Inherite from VDetector class ///////////
  ////////////////////////////////////////////////////
public:
  // Read stream at Configfile to pick-up parameters of detector (Position,...)
  // Called in DetecorConstruction::ReadDetextorConfiguration Method
  void ReadConfiguration(string Path) ;
  
  // Construct detector and inialise sensitive part.
  // Called After DetecorConstruction::AddDetector Method
  void ConstructDetector(G4LogicalVolume* world) ;
  
  // Add Detector branch to the EventTree.
  // Called After DetecorConstruction::AddDetector Method
  void InitializeRootOutput() ;
  
  // Read sensitive part and fill the Root tree.
  // Called at in the EventAction::EndOfEventAvtion
  void ReadSensitive(const G4Event* event) ;
  
  
  ////////////////////////////////////////////////////
  ///////////Event class to store Data////////////////
  ////////////////////////////////////////////////////
private:
  TTigressData*    m_Event ;
  
  ////////////////////////////////////////////////////
  ///////////////// Scorer Related ///////////////////
  ////////////////////////////////////////////////////
  
private:
  // Geometry related
  G4LogicalVolume* m_LogicClover;
  
  
  //   Initialize all Scorer
  void InitializeScorers() ;
  
  //   Scorer Associate to the Silicon
  G4MultiFunctionalDetector*   m_GermaniumScorer ;
  G4MultiFunctionalDetector*   m_BGOScorer ;
private:
  //    Initialize material used in detector definition
  void InitializeMaterial();
  
  //   List of material
  G4Material* m_MaterialSilicon ;
  G4Material* m_MaterialAl      ;
  G4Material* m_MaterialVacuum  ;
  G4Material* m_MaterialPCB     ;
  
  ////////////////////////////////////////////////////
  ///////////////Private intern Data//////////////////
  ////////////////////////////////////////////////////
private:
  // Clover Position
  vector<int>    m_CloverId;
  vector<double> m_R;
  vector<double> m_Theta;
  vector<double> m_Phi;
  vector<double> m_BetaX;
  vector<double> m_BetaY;
  vector<double> m_BetaZ;
    
  // Frame: true if the frame is to be done
  bool m_LeftFrame;
  bool m_RightFrame;
  
    // Set to true if you want to see Telescope Frame in your visualisation
  bool m_non_sensitive_part_visiualisation ;
  
private:/// Visualisation Attribute:
  G4VisAttributes* BlueVisAtt;
  G4VisAttributes* GreenVisAtt;
  G4VisAttributes* RedVisAtt;
  G4VisAttributes* WhiteVisAtt;
  G4VisAttributes* TrGreyVisAtt;
};
#endif