BmnRoot 26.10.0-18-g4e3414f9
Software framework of the BM@N experiment
Loading...
Searching...
No Matches
CbmStsDigiPar.cxx
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- CbmStsDigiPar source file -----
3// ----- Created 28/06/05 by V. Friese -----
4// -------------------------------------------------------------------------
5
6#include "CbmStsDigiPar.h"
7
9#include "FairDetParIo.h"
10#include "FairParIo.h"
11#include "TMath.h"
12#include "TString.h"
13
14#include <iostream>
15
16// ----- Standard constructor ------------------------------------------
17CbmStsDigiPar::CbmStsDigiPar(const char* name, const char* title, const char* context)
18 : FairParSet(name, title, context)
19 , fStations(NULL)
20 , fStationMap()
21{
22 fStations = new TObjArray();
23 detName = "STS";
24}
25
26// ----- Destructor ----------------------------------------------------
31// -------------------------------------------------------------------------
32
33// ----- Public method init --------------------------------------------
34Bool_t CbmStsDigiPar::init(FairParIo* parIo)
35{
36 if (!parIo) {
37 cout << "-W- CbmStsDigiPar::init "
38 << "No input given; could not initialise parameters." << endl;
39 return kFALSE;
40 }
41 FairDetParIo* input = parIo->getDetParIo("CbmStsParIo");
42 if (input)
43 return (input->init(this));
44 return kFALSE;
45}
46// -------------------------------------------------------------------------
47
48// ----- Public method write -------------------------------------------
49Int_t CbmStsDigiPar::write(FairParIo* parIo)
50{
51 if (!parIo) {
52 cout << "-W- CbmStsDigiPar::write "
53 << "No output given; could not write parameters." << endl;
54 return kFALSE;
55 ;
56 }
57 FairDetParIo* output = parIo->getDetParIo("CbmStsParIo");
58 if (output)
59 return (output->write(this));
60 return kFALSE;
61}
62// -------------------------------------------------------------------------
63
64// ----- Public method clear -------------------------------------------
66{
67 status = kFALSE;
68 resetInputVersions();
69 fStations->Delete();
70 fStationMap.clear();
71}
72// -------------------------------------------------------------------------
73
74// ----- Public method readline ----------------------------------------
75void CbmStsDigiPar::readline(const char* buffer, Int_t* set, fstream* f)
76{
77
78 // First line: Station ID and type
79 Int_t stationNr = -1;
80 Float_t frotation = 0.;
81 Int_t nSectors = 0;
82 Int_t nSensors = 0;
83 sscanf(buffer, "%d%f%d", &stationNr, &frotation, &nSectors);
84 if (stationNr == -1)
85 return;
86 Double_t rotation = Double_t(frotation);
87
88 // Create new station
89 CbmStsStationDigiPar* station = new CbmStsStationDigiPar(stationNr, rotation);
90
91 // Read the sector lines
92 Int_t sectorNr = -1;
93 Int_t sensorNr = -1;
94 Int_t iType = 0;
95 Double_t x0 = 0.;
96 Double_t y0 = 0.;
97 Double_t z0 = 0.;
98 Double_t angle = 0.;
99 Double_t lx = 0.;
100 Double_t ly = 0.;
101 Double_t lz = 0.;
102 Double_t dx = 0.;
103 Double_t dy = 0.;
104 Double_t stereoF = 0.;
105 Double_t stereoB = 0.;
106 for (Int_t iSector = 0; iSector < nSectors; iSector++) {
107 *f >> sectorNr >> nSensors;
108
109 CbmStsSectorDigiPar* sector = new CbmStsSectorDigiPar(sectorNr);
110
111 for (Int_t iSensor = 0; iSensor < nSensors; iSensor++) {
112
113 *f >> sensorNr >> iType >> x0 >> y0 >> z0 >> angle >> lx >> ly >> lz >> dx >> dy >> stereoF >> stereoB;
114
115 angle = angle * TMath::Pi() / 180.;
116 stereoB = stereoB * TMath::Pi() / 180.;
117 stereoF = stereoF * TMath::Pi() / 180.;
118
119 CbmStsSensorDigiPar* sensor =
120 new CbmStsSensorDigiPar(sensorNr, iType, x0, y0, z0, angle, lx, ly, lz, dx, dy, stereoF, stereoB);
121 sector->AddSensor(sensor);
122 }
123 station->AddSector(sector);
124 } // Loop over sector lines
125 fStations->Add(station);
126}
127// -------------------------------------------------------------------------
128/*void CbmStsDigiPar::readline(const char* buffer, Int_t* set, fstream* f) {
129
130 // First line: Station ID and type
131 Int_t stationNr = -1;
132 Float_t frotation = 0.;
133 Int_t nSectors = 0;
134 sscanf(buffer, "%d%f%d", &stationNr, &frotation, &nSectors);
135 if ( stationNr == -1 ) return;
136 Double_t rotation = Double_t(frotation);
137
138 // Create new station
139 CbmStsStationDigiPar* station = new CbmStsStationDigiPar(stationNr,
140 rotation);
141
142 // Read the sector lines
143 Int_t sectorNr = -1;
144 Int_t iType = 0;
145 Double_t x0 = 0.;
146 Double_t y0 = 0.;
147 Double_t angle = 0.;
148 Double_t lx = 0.;
149 Double_t ly = 0.;
150 Double_t dx = 0.;
151 Double_t dy = 0.;
152 Double_t stereo = 0.;
153 for (Int_t iSector=0; iSector<nSectors; iSector++) {
154 *f >> sectorNr >> iType >> x0 >> y0 >> angle >> lx >> ly
155 >> dx >> dy >> stereo;
156 angle = angle * TMath::Pi() / 180.;
157 stereo = stereo * TMath::Pi() / 180.;
158 CbmStsSectorDigiPar* sector = new CbmStsSectorDigiPar(sectorNr, iType,
159 x0, y0, angle,
160 lx, ly, dx, dy,
161 stereo);
162 station->AddSector(sector);
163 } // Loop over sector lines
164 fStations->Add(station);
165
166}
167*/// -------------------------------------------------------------------------
168
169// ----- Public method putAsciiHeader ----------------------------------
171{
172 header = "Header is not yet defined";
173}
174// -------------------------------------------------------------------------
175
176// ----- Public method GetStation --------------------------------------
181// -------------------------------------------------------------------------
182
183// ------- Public method GetStationById --------------------------------
185{
186 Int_t index = fStationMap[stationNr];
188 if (!station) {
189 cout << "-W- CbmStsDigiPar::GetStationDigiPar: "
190 << "No parameters found for station " << stationNr << endl;
191 return NULL;
192 }
193 return station;
194}
195// -------------------------------------------------------------------------
bool Bool_t
int Int_t
float Float_t
constexpr Bool_t kFALSE
double Double_t
CbmStsStationDigiPar * GetStation(Int_t iStation)
Accessor to station parameters (by index).
TObjArray * fStations
virtual ~CbmStsDigiPar()
Destructor.
void putAsciiHeader(TString &)
Put an Ascii header for Ascii file output.
map< Int_t, Int_t > fStationMap
CbmStsStationDigiPar * GetStationByNr(Int_t stationId)
Accessor to station parameters (by station ID).
void readline(const char *buffer, Int_t *set, fstream *f)
Read one line (station) from ASCII input.
virtual Bool_t init(FairParIo *input)
Initialisation from input device.
CbmStsDigiPar(const char *name="StsDigiPar", const char *title="STS digitisation parameters", const char *context="Default")
Standard constructor.
virtual void clear()
Reset all parameters.
virtual Int_t write(FairParIo *output)
Output to file.
CbmStsSectorDigiPar.h.
void AddSensor(CbmStsSensorDigiPar *sen)
Add parameters of one sensor.
CbmStsSensorDigiPar.h.
CbmStsStationDigiPar.h.
void AddSector(CbmStsSectorDigiPar *sec)
Add parameters of one sector.
constexpr Double_t Pi()