source: JEM-EUSO/esaf_lal/tags/v1_r0/esaf/packages/reconstruction/framework/src/ModuleFactory.cc @ 117

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

ESAF version compilable on mac OS

File size: 4.5 KB
Line 
1// ESAF : Euso Simulation and Analysis Framework
2// $Id: ModuleFactory.cc 3011 2012-01-27 15:31:18Z biktem $
3// Marco Pallavicini created Oct, 16 2003
4
5
6#include "utils.hh"
7#include "ModuleFactory.hh"
8#include "TestRecoModule.hh"
9#include "TestInputModule.hh"
10#include "RootInputModule.hh"
11#include "LTTPreClusteringModule.hh"
12#include "HoughModule.hh"
13#include "BaseClusteringModule.hh"
14#include "ClusterAnalysisModule.hh"
15#include "GTUClusteringModule.hh"
16#include "TrackDirection2Module.hh"
17#include "TrackDetectorPlaneModule.hh"
18#include "TrackDirectionModule.hh"
19#include "HmaxForProtonModule.hh"
20#include "EnergyModule.hh"
21#include "JemEnergyModule.hh"
22#include "ProfileModule.hh"
23#include "PmtToShowerReco.hh"
24#include "RobustModule.hh"
25#include <fstream>
26#include <TMinuit.h>
27#include <TVector3.h>
28
29ClassImp(ModuleFactory)
30
31// constructor
32ModuleFactory::ModuleFactory(const string& sName) {
33       
34        fCurrent = 0;
35        fInputModule = 0;
36       
37        ifstream in( sName.c_str() );
38        if (!in) {
39                Msg(EsafMsg::Panic) << "Cannot find the list of modules in " << sName<< MsgDispatch;
40        }
41       
42        string dummy;
43       
44        // parse file
45        while ( getline(in,dummy) ) {
46                // erase comments
47                size_t pos = dummy.find('#');
48                if ( pos != string::npos ) 
49                        dummy.erase( pos );
50               
51                // swallow spaces
52                        dummy = ltrim( dummy );
53                       
54                        // skip blank lines
55                        if ( dummy.empty() ) continue;
56                       
57                        // each line must be a key=value pair
58                        // key can be : InputModule, Module, Sequence
59                        // InputModule: specifies the unique input module;
60                        // Module: normal module
61                        // Sequence: list of connected modules (not implemented yet)
62                       
63                        // get identifier
64                        string identifier = dummy.substr( 0, dummy.find('=') );
65                        identifier = rtrim( identifier );
66                        if ( identifier.find_first_of("\t ") != string::npos) {
67                                throw runtime_error("Syntax error in file "+sName+" line "+dummy);
68                        }
69                       
70                        // get module name
71                        string name = dummy.substr( dummy.find('=')+1, string::npos);
72                        name = trim( name );
73                       
74                        // build modules
75                        if ( identifier == "InputModule" ) {
76                                MakeInputModule(name);
77                        }
78                        else if ( identifier == "Module" ) {
79                                MakeModule( name );
80                        }
81                        else if ( identifier == "Sequence" ) {
82                                MakeSequence( name );
83                        }
84                        else {
85                                throw runtime_error("Syntax error in file"+sName+" line "+dummy);
86                        }
87                       
88        }
89}
90
91// destructor
92ModuleFactory::~ModuleFactory() {
93}
94
95// returns a module until the list is over
96RecoModule* ModuleFactory::GetModule() {
97        if ( fCurrent < fModules.size() )
98                return fModules[fCurrent++];
99        else
100                return (RecoModule*)0;
101}
102
103// physically build objects and store into a vector
104void ModuleFactory::MakeModule( const string& name) {
105        if ( name == "Test1" )
106                fModules.push_back( new TestRecoModule( name ) );
107        else if ( name == "Test2" )
108                fModules.push_back( new TestRecoModule( name ) );
109        else if ( name == "Test3" )
110                fModules.push_back( new TestRecoModule( name ) );
111        else if ( name == "RobustModule" )
112                fModules.push_back( new RobustModule() );
113        // real modules begin here!!
114        else if ( name == "LTTPreClustering" )
115                fModules.push_back( new LTTPreClusteringModule() );
116        else if ( name == "HoughTransform" )
117                fModules.push_back( new HoughModule() );
118        else if ( name == "BaseClustering" )
119                fModules.push_back( new BaseClusteringModule() );
120        else if ( name == "ClusterAnalysis" )
121                fModules.push_back( new ClusterAnalysisModule() );
122        else if ( name == "GTUClustering" )
123                fModules.push_back( new GTUClusteringModule() );
124        else if ( name == "TrackDirection2" )
125                fModules.push_back( new TrackDirection2Module() );
126        else if ( name == "TrackDetectorPlane" )
127                fModules.push_back( new TrackDetectorPlaneModule() );
128        else if ( name == "TrackDirection" )
129                fModules.push_back( new TrackDirectionModule() );
130        else if ( name == "HmaxForProton" )
131                fModules.push_back( new HmaxForProtonModule() );
132        else if ( name == "Energy" )
133                fModules.push_back( new EnergyModule() );
134        else if ( name == "JemEnergy" )
135                fModules.push_back( new JemEnergyModule() );
136        else if ( name == "Profile" )
137                fModules.push_back( new ProfileModule() );
138        else if ( name == "PmtToShowerReco" )
139                fModules.push_back( new PmtToShowerReco() );
140        else
141                throw runtime_error("Unknown Module:"+name);
142}
143
144// physically build objects and store into a vector
145void ModuleFactory::MakeInputModule( const string& name) {
146        if ( name == "Test" )
147                fInputModule = new TestInputModule( name );
148        else if ( name == "Root" )
149                fInputModule = new RootInputModule();
150        else
151                throw runtime_error("Unknown Input Module:"+name);
152}
153
154// sequences: to be done
155void ModuleFactory::MakeSequence( const string& name) {
156}
Note: See TracBrowser for help on using the repository browser.