source: JEM-EUSO/esaf_cc_at_lal/packages/simulation/detector/electronics/src/EusoDetector.cc @ 114

Last change on this file since 114 was 114, checked in by moretto, 11 years ago

actual version of ESAF at CCin2p3

File size: 4.2 KB
Line 
1// class EusoDetector
2// $Id: EusoDetector.cc 2908 2011-05-12 14:33:08Z biktem $
3// M. Pallavicini - created 08-02-2002
4//
5#include "EusoDetector.hh"
6#include "DetectorGeometry.hh"
7#include "VirtualDetectorTransportManager.hh"
8#include "EEvent.hh"
9#include "ElectronicsFactory.hh"
10#include "ERunParameters.hh"
11#include "ERunParsPixelMapFiller.hh"
12#include "ERunParsPmtsFiller.hh"
13#include "EusoElectronics.hh"
14#include "EusoMapping.hh"
15#include "OpticsFactory.hh"
16#include "ParentPhoton.hh"
17#include "Photomultiplier.hh"
18#include "Photon.hh"
19#include "PhotonsOnPupil.hh"
20#include "Pupil.hh"
21
22#include <TStopwatch.h>
23#include <TMath.h>
24#include <zlib.h>
25
26#include <TBenchmark.h>
27
28using namespace sou;
29
30ClassImp(EusoDetector)
31
32// global variable
33EusoDetector *gEusoDetector = NULL;
34
35//______________________________________________________________________________
36EusoDetector::EusoDetector() : fElectronics(0) {
37    //
38    // Constructor
39    //
40
41    // FIXME: call the factories to get the right associate child and parent
42    // classes in config
43    ElectronicsFactory::Get();
44    OpticsFactory::Get();
45    EusoMapping::Get();
46    Build();
47    gEusoDetector = this;
48}
49
50
51//______________________________________________________________________________
52EusoDetector::~EusoDetector() {
53    //
54    // Destructor
55    //
56
57    if ( gEusoDetector == this ) gEusoDetector = 0;
58    ElectronicsFactory::Get()->DeleteEusoElectronics();
59    delete fGeometry;
60    delete fDetectorTransporter;
61    delete OpticsFactory::Get();
62}
63
64//______________________________________________________________________________
65void EusoDetector::Build() {
66    //
67    // Build or re-build the detector
68    //
69
70    fGeometry = new DetectorGeometry;
71    fGeometry->SetFoV(Pi()/6.);
72
73    fElectronics = ElectronicsFactory::Get()->Build();
74    fDetectorTransporter = OpticsFactory::Get()->MakeTransportManager();
75
76    Double_t radius = fDetectorTransporter->GetOuterRadius();
77    Double_t scale = Conf()->GetNum("EusoDetector.fScaleFactor");
78
79
80    if ( Conf()->GetBool("EusoDetector.fFixMaxRadius") )
81
82    Conf()->GetNum("EusoDetector.fMaxRadius");
83
84    fGeometry->SetRadius(scale*radius);
85    fGeometry->SetOpticsRadius(scale*fDetectorTransporter->GetOptics()->Radius());
86    fDetectorTransporter->SetScaleFactor(scale);
87
88    // save runparameters
89    if ( EEvent::GetCurrent() && EEvent::GetCurrent()->GetRunPars() ) {
90        ERunParameters *runpars = EEvent::GetCurrent()->GetRunPars();
91
92        fElectronics->SetDetectorScaleFactor(scale);
93        fElectronics->BuildBackgroundChipDist();
94
95        if ( runpars ) {
96            // get from EusoMapping the config
97            ERunParsPixelMapFiller pxfiller;
98            runpars->Fill(pxfiller);
99
100            ERunParsPmtsFiller pmtfiller( fElectronics );
101            runpars->Fill(pmtfiller);
102        }
103    }
104
105    fDetectorTransporter->GetFocalPlane()->SetElectronics(fElectronics);
106}
107
108//______________________________________________________________________________
109void EusoDetector::Reset() {
110    //
111    // Reset electronics
112    //
113
114    if ( fElectronics )
115        fElectronics->Reset();
116}
117
118//______________________________________________________________________________
119Telemetry* EusoDetector::Get( PhotonsOnPupil* photons ) {
120    //
121    // Simulate one event and return a pointer to a Telemetry object
122    //
123
124    // reset previous event
125    Reset();
126
127    // wrapper to track the photons onto the real pupil
128    Pupil pupil( photons, GetGeometry());
129
130    // transport photons from pupil to pmts
131    fDetectorTransporter->Go( &pupil );
132
133    Double_t tBegin = fDetectorTransporter->GetTimeFirstPhoton();
134    Double_t tEnd = fDetectorTransporter->GetTimeLastPhoton();
135
136    MsgForm(EsafMsg::Info,"Photon Time interval (ns):\t\tSTART=%ld  END=%ld",
137            (long int)(tBegin), (long int)tEnd);
138
139    // simulate electronics and trigger
140    if ( !fElectronics->Simulate( tBegin, tEnd ) )
141        return (Telemetry*)0;
142
143    // return telemetry object
144    return fElectronics->Data();
145
146}
147
148//______________________________________________________________________________
149Bool_t EusoDetector::ClearMemory() {
150    //
151    // Physically release the memory allocated by the arrays of this object
152    //
153
154    fElectronics->ClearMemory();
155
156    return kTRUE;
157}
Note: See TracBrowser for help on using the repository browser.