CbmRoot
Loading...
Searching...
No Matches
CbmMvdSensor.cxx
Go to the documentation of this file.
1/* Copyright (C) 2011-2021 Institut fuer Kernphysik, Goethe-Universitaet Frankfurt, Frankfurt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Michael Deveaux, Philipp Sitzmann [committer] */
4
5// -------------------------------------------------------------------------
6// ----- CbmMvdSensor source file -----
7// ----- Created 31/01/11 by M. Deveaux -----
8// -------------------------------------------------------------------------
9
10#include "CbmMvdSensor.h"
11
12#include "CbmMvdSensorBuffer.h"
13#include "CbmMvdSensorPlugin.h"
14#include "CbmMvdSensorTask.h"
15
16#include <FairEventHeader.h>
17#include <FairMCEventHeader.h>
18#include <FairPrimaryGenerator.h>
19#include <FairRunAna.h>
20#include <FairRunSim.h>
21#include <Logger.h>
22
23#include <TClonesArray.h>
24#include <TGeoManager.h>
25#include <TGeoMatrix.h>
26#include <TGeoVolume.h>
27
28
30#include <ostream> // for operator<<, stringstream, basic_ostream
31
32// ----- Default constructor -------------------------------------------
34 : TNamed()
35 , fStationNr(0)
36 , fSensorNr(0)
37 , fVolumeId(-1)
38 , fDetectorID(-1)
39 , fDigiPlugin(-1)
40 , fHitPlugin(-1)
41 , fDigiLen(-1)
42 , fClusterPlugin(-1)
43 , fVolName("")
44 , fNodeName("")
45 , fcurrentEventTime(0.)
46 , epsilon()
47 , fShape(nullptr)
48 , fMCMatrix(nullptr)
49 , fRecoMatrix(nullptr)
50 , fAlignmentCorr(nullptr)
51 , fTempCoordinate()
52 , fSensorPosition()
53 , fSensorData(new CbmMvdSensorDataSheet())
54 , fSensorMap()
55 , fPluginArray(new TObjArray(1))
56 , fSensorStartTime(0.)
57 , initialized(kFALSE)
58{
59 LOG(warning) << "MVD-Sensor initialized without technical data. Assuming default sensor.";
60
61 LOG(warning) << "MVD-Sensor initialized without geometry data. Must be added manually before using this class.";
62
63 LOG(warning) << "MVD-Sensor initialized without valid start time. Must be added manually before using this class.";
64}
65// -------------------------------------------------------------------------
66
67
68// ----- Standard constructor ------------------------------------------
69CbmMvdSensor::CbmMvdSensor(const char* name, CbmMvdSensorDataSheet* dataSheet, TString volName, TString nodeName,
70 Int_t stationNr, Int_t volumeId, Double_t sensorStartTime)
71 : TNamed(name, "")
72 , fStationNr()
73 , fSensorNr(stationNr)
74 , fVolumeId(volumeId)
75 , fDetectorID(DetectorId(stationNr))
76 , fDigiPlugin(-1)
77 , fHitPlugin(-1)
78 , fDigiLen(-1)
79 , fClusterPlugin(-1)
80 , fVolName(volName)
81 , fNodeName(nodeName)
82 , fcurrentEventTime(0.)
83 , epsilon()
84 , fShape(nullptr)
85 , fMCMatrix(nullptr)
86 , fRecoMatrix(nullptr)
87 , fAlignmentCorr(nullptr)
88 , fTempCoordinate()
89 , fSensorPosition()
90 , fSensorData(dataSheet)
91 , fSensorMap()
92 , fPluginArray(new TObjArray(1))
93 , fSensorStartTime(sensorStartTime)
94 , initialized(kFALSE)
95{
96}
97// -------------------------------------------------------------------------
98
99
100// ----- Destructor ----------------------------------------------------
102// -------Setters -----------------------------------------------------
103
104void CbmMvdSensor::SetAlignment(TGeoHMatrix* alignmentMatrix)
105{
106
107 if (fAlignmentCorr) { delete fAlignmentCorr; };
108 fAlignmentCorr = (TGeoHMatrix*) alignmentMatrix->Clone(fNodeName + "_AlignmentData");
109}
110
111
112// -------Initialization tools -----------------------------------------------------
114{
115
116 LOG(debug1) << "-I- nodeName is " << nodeName;
117
118 if (fMCMatrix) { delete fMCMatrix; }; //delete local copy of the position information
119
120 TGeoVolume* volume;
121 gGeoManager->cd(nodeName);
122 volume = gGeoManager->GetCurrentVolume();
123 LOG(debug2) << "At volume: " << volume->GetName();
124 fShape = (TGeoBBox*) volume->GetShape();
125 fMCMatrix = (TGeoHMatrix*) (gGeoManager->GetCurrentMatrix())->Clone(nodeName + "_MC_Matrix");
126 fMCMatrix->SetName(nodeName + "_MC_Matrix");
127
128 Double_t first[3], last[3];
129 PixelToLocal(0, 0, first);
131 LOG(debug2) << "pixel 0,0 at: " << first[0] << ", " << first[1] << " Local";
132 LOG(debug2) << "pixel " << fSensorData->GetNPixelsX() << " " << fSensorData->GetNPixelsY() << " at: " << last[0]
133 << ", " << last[1] << " Local";
134
135 Double_t* tempCoordinate;
136
137 if (!fRecoMatrix) {
138 Double_t pre[3], past[3], global[3];
139 Double_t local[3] = {0, 0, 0};
140 //The initial guess on the reconstructed position is that the MC-position is correct
141 //Short cut to misalignment, add a small error
142 fRecoMatrix = (TGeoHMatrix*) fMCMatrix->Clone(nodeName + "_Reco_Matrix");
143 PixelToTop(0, 0, pre);
144 tempCoordinate = fRecoMatrix->GetTranslation();
145 for (Int_t i = 0; i < 3; i++) {
146 tempCoordinate[i] = tempCoordinate[i] + epsilon[i];
147 }
148 fRecoMatrix->SetTranslation(tempCoordinate);
149 PixelToTop(0, 0, past);
150 LOG(debug2) << "shifted pixel 0,0 to: " << past[0] << ", " << past[1] << " at z = " << past[2];
151 LocalToTop(local, global);
152 LOG(debug2) << "shifted local center to: " << global[0] << ", " << global[1] << " at z = " << global[2];
153 }
154 else {
155 tempCoordinate = fRecoMatrix->GetTranslation();
156 }
157 if (!fAlignmentCorr) {
158 //If no knowledge on the reco matrix is available there is plausibly no correction data.
159 fAlignmentCorr = new TGeoHMatrix(nodeName + "_AlignmentData");
160 }
161
162 for (Int_t i = 0; i < 3; i++) {
163 fSensorPosition[i] = tempCoordinate[i];
164 }
165}
166
167//-------------------------------------------------------------------
168
169//-------------------------------------------------------------------
171{
172
174
175 Int_t nPlugin = fPluginArray->GetEntriesFast();
176
177
178 TClonesArray* dataArray;
179
180 CbmMvdSensorTask* gentask;
181 CbmMvdSensorBuffer* genBuffer;
182
183 CbmMvdSensorPlugin *pluginFirst, *pluginNext;
184
185 for (Int_t i = 0; i < nPlugin; i++) {
186 pluginFirst = (CbmMvdSensorPlugin*) fPluginArray->At(i);
187 if (pluginFirst->GetPluginType() == buffer) {
188 genBuffer = (CbmMvdSensorBuffer*) fPluginArray->At(i);
189 genBuffer->InitBuffer(this);
190 }
191 if (pluginFirst->GetPluginType() == task) {
192 gentask = (CbmMvdSensorTask*) fPluginArray->At(i);
193 gentask->InitTask(this);
194 }
195 }
196 //Link data chain
197 if (nPlugin > 1) {
198
199 for (Int_t i = 0; i < nPlugin - 1; i++) {
200
201 pluginFirst = (CbmMvdSensorPlugin*) fPluginArray->At(i);
202 pluginNext = (CbmMvdSensorPlugin*) fPluginArray->At(i + 1);
203
204 //Rules: The output array of the previous plugin is input of the next
205 dataArray = pluginFirst->GetOutputArray();
206 pluginNext->SetInputArray(dataArray);
207
208 //The plugin knows its precessor and sucessor to communicate
209 pluginFirst->SetNextPlugin(pluginNext);
210 pluginNext->SetPreviousPlugin(pluginFirst);
211 }
212 }
213
214
215 if (nPlugin == 0) {
216 LOG(debug) << "No Plugins on this Sensor ";
217 pluginFirst = nullptr;
218 }
219 initialized = kTRUE;
220}
221// -------------------------------------------------------------------------
222
223// -------------------------------------------------------------------------
225{
226 //if(fDetectorID == 1537)
227 {
228 CbmMvdSensorPlugin* pluginLast;
229 pluginLast = (CbmMvdSensorPlugin*) fPluginArray->At(fPluginArray->GetEntriesFast() - 1);
230 LOG(info) << "Set debug mode on Plugin " << fPluginArray->GetEntriesFast() - 1 << " at sensor " << GetName();
231 pluginLast->ShowDebugHistos();
232 }
233}
234// -------------------------------------------------------------------------
235
236// -------------------------------------------------------------------------
237
238void CbmMvdSensor::SendInputToPlugin(Int_t nPlugin, TObject* input)
239{
240 CbmMvdSensorPlugin* digitask;
241 digitask = (CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
242 digitask->SetInput(input);
243}
244
245// -------------------------------------------------------------------------
246
248{
249
250 FairRunSim* run = FairRunSim::Instance();
251 FairRunAna* ana = FairRunAna::Instance();
252 if (run) {
253 FairEventHeader* event = run->GetEventHeader();
254 fcurrentEventTime = event->GetEventTime();
255 }
256 if (ana) {
257 FairEventHeader* event = ana->GetEventHeader();
258 fcurrentEventTime = event->GetEventTime();
259 }
260
261
262 CbmMvdSensorPlugin* plugin;
263 Int_t nPlugin = fPluginArray->GetEntriesFast();
264
265 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(0);
266
267 plugin->ExecChain();
268
269 if (plugin->PluginReady()) {
270
271 for (Int_t i = 1; i < nPlugin; i++) {
272
273 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(i);
274 plugin->ExecChain();
275 }
276 }
277}
278// -------------------------------------------------------------------------
279
280void CbmMvdSensor::Exec(UInt_t nPlugin)
281{
282 UInt_t nPluginMax = fPluginArray->GetEntriesFast();
283 if (nPlugin > nPluginMax) { Fatal(GetName(), " Error - Called non-existing plugin"); }
284 CbmMvdSensorPlugin* plugin = (CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
285 plugin->Exec();
286}
287// -------------------------------------------------------------------------
288void CbmMvdSensor::ExecTo(UInt_t nPlugin)
289{
290 FairRunSim* run = FairRunSim::Instance();
291 FairPrimaryGenerator* gen = run->GetPrimaryGenerator();
292 FairMCEventHeader* event = gen->GetEvent();
293
294 fcurrentEventTime = event->GetT();
295
296 CbmMvdSensorPlugin* plugin;
297 UInt_t maxPlugin = fPluginArray->GetEntriesFast();
298
299 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(0);
300 if (nPlugin < maxPlugin) {
301 plugin->ExecChain();
302
303 if (plugin->PluginReady()) {
304
305 for (UInt_t i = 1; i <= nPlugin; i++) {
306 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(i);
307 plugin->ExecChain();
308 }
309 }
310 }
311 else {
312 LOG(info) << "nPlugin to large";
313 }
314}
315
316
317// -------------------------------------------------------------------------
318void CbmMvdSensor::ExecFrom(UInt_t nPlugin)
319{
320 FairRunSim* run = FairRunSim::Instance();
321 FairPrimaryGenerator* gen = run->GetPrimaryGenerator();
322 FairMCEventHeader* event = gen->GetEvent();
323
324 fcurrentEventTime = event->GetT();
325
326 CbmMvdSensorPlugin* plugin;
327 UInt_t maxPlugin = fPluginArray->GetEntriesFast();
328
329 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
330 if (nPlugin <= maxPlugin) {
331 plugin->ExecChain();
332 //LOG(info) << "is plugin ready? "<< plugin->PluginReady() << " on sensor "<< this->GetName();
333 if (plugin->PluginReady()) {
334 //LOG(info) << "exec chain on sensor "<< this->GetName();
335 for (UInt_t i = nPlugin + 1; i < maxPlugin; i++) {
336 //LOG(info) << "exec plugin " << i << " on sensor "<< this->GetName();
337 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(i);
338 plugin->ExecChain();
339 }
340 }
341 }
342 else {
343 LOG(info) << "nPlugin to large";
344 }
345}
346
347// -------------------------------------------------------------------------
348
349TClonesArray* CbmMvdSensor::GetOutputArray(Int_t nPlugin) const
350{
351
352 CbmMvdSensorPlugin* plugin = (CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
353 return plugin->GetOutputArray();
354}
355
356
357// -------------------------------------------------------------------------
358TClonesArray* CbmMvdSensor::GetMatchArray(Int_t nPlugin) const
359{
360
361 CbmMvdSensorPlugin* plugin = (CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
362 return plugin->GetMatchArray();
363}
364// -------------------------------------------------------------------------
365Int_t CbmMvdSensor::GetOutputArrayLen(Int_t nPlugin) const
366{
367 TClonesArray* tempArray = GetOutputArray(nPlugin); // make sure that the arrays are filled
368 if (tempArray) { return tempArray->GetEntriesFast() - 1; }
369 else {
370 LOG(fatal) << "undefined plugin called";
371 return -1;
372 }
373}
374// -------------------------------------------------------------------------
375
376
377// -------------------------------------------------------------------------
378TClonesArray* CbmMvdSensor::GetOutputBuffer() const
379{
380
381
383 LOG(warning) << "CbmMvdSensor::GetOutputBuffer: Warning - Use of method depreciated.";
384 return (plugin->GetOutputArray());
385}
386// -------------------------------------------------------------------------
387
388TH1* CbmMvdSensor::GetHistogram(UInt_t nPlugin, UInt_t nHisto)
389{
390 if (!fPluginArray) return 0;
391 if (nPlugin >= (UInt_t) fPluginArray->GetEntriesFast()) return 0;
392 CbmMvdSensorPlugin* myPlugin = (CbmMvdSensorPlugin*) fPluginArray->At(nPlugin);
393 return myPlugin->GetHistogram(nHisto);
394}
395
397{
398 if (!fPluginArray) return -1;
399 if (nPlugin >= (UInt_t) fPluginArray->GetEntriesFast()) return -1;
400 return ((CbmMvdSensorPlugin*) fPluginArray->At(nPlugin))->GetMaxHistoNumber();
401}
402
403
404// ----- Coordinate Transformations --------------------------------
405
406void CbmMvdSensor::LocalToTop(Double_t* local, Double_t* lab) { fMCMatrix->LocalToMaster(local, lab); };
407// -------------------------------------------------------------------------
408
409
410// -------------------------------------------------------------------------
411void CbmMvdSensor::TopToLocal(Double_t* lab, Double_t* local)
412{
413 fMCMatrix->MasterToLocal(lab, local);
414 //LOG(info) << "local 0 nach TopToLocal " << local[0];
415 //LOG(info) << "local 1 nach TopToLocal " << local[1];
416};
417// -------------------------------------------------------------------------
418
419
420// -------------------------------------------------------------------------
421void CbmMvdSensor::LocalToPixel(Double_t* local, Int_t& pixelNumberX, Int_t& pixelNumberY)
422{
423
424 //Compute position of the frame relativ to the border of the matrix
425 //which contains the pixel (0/0)
426 Double_t x = local[0] + (fSensorData->GetPixelSignX() * GetDX());
427 //LOG(info) << "From " << local[0] << " to Double_t x " << x;
428 Double_t y = local[1] + (fSensorData->GetPixelSignY() * GetDY());
429 //LOG(info) << "From " << local[1] << " to Double_t y " << y;
430 //Compute the number of the pixel hit.
431 //Note: substract 0.5 to move from border to center of pixel
432 pixelNumberX = Int_t(x / fSensorData->GetPixelPitchX() - 0.5);
433 //if (pixelNumberX < 0) LOG(info)<< "pixelNumberX = " << pixelNumberX << " on Sensor " << this->GetName();
434 pixelNumberY = Int_t(y / fSensorData->GetPixelPitchY() - 0.5);
435 //if (pixelNumberY < 0) LOG(info) << "pixelNumberY = " << pixelNumberY << " on Sensor " << this->GetName();
436};
437// -------------------------------------------------------------------------
438
439
440// -------------------------------------------------------------------------
441void CbmMvdSensor::PixelToLocal(Int_t pixelNumberX, Int_t pixelNumberY, Double_t* local)
442{
443
444 //Compute distance from border of the pixel matrix
445 //Ignore the direction of pixel numbering so far
446 //By definiton (x,y) is in the center of the pixel
447
448 Double_t x = (pixelNumberX + 0.5) * fSensorData->GetPixelPitchX();
449 Double_t y = (pixelNumberY + 0.5) * fSensorData->GetPixelPitchY();
450
451 //Perform coordinate transformation from border of matrix to center of volume
452 local[0] = x - fSensorData->GetPixelSignX() * GetDX();
453 local[1] = y - fSensorData->GetPixelSignY() * GetDY();
454
455 local[2] = 0; //per definition always at the sensor surface;
456};
457// -------------------------------------------------------------------------
458
459
460// -------------------------------------------------------------------------
461void CbmMvdSensor::PixelToTop(Int_t pixelNumberX, Int_t pixelNumberY, Double_t* lab)
462{
463 PixelToLocal(pixelNumberX, pixelNumberY, fTempCoordinate);
465};
466// -------------------------------------------------------------------------
467
468
469void CbmMvdSensor::TopToPixel(Double_t* lab, Int_t& pixelNumberX, Int_t& pixelNumberY)
470{
472 LocalToPixel(fTempCoordinate, pixelNumberX, pixelNumberY);
473};
474// -------------------------------------------------------------------------
475
476
477// -------------------------------------------------------------------------
478Int_t CbmMvdSensor::GetFrameNumber(Double_t absoluteTime, Int_t pixelNumberY) const
479{
480
481
482 Double_t timeSinceStart = absoluteTime - fSensorStartTime;
483
484 Double_t timeInUnitsOfFrames = timeSinceStart / fSensorData->GetIntegrationTime();
485
486 // Get time substracting the full frames (140.3 -> 0.3)
487 Double_t timeSinceStartOfTheFrame = timeInUnitsOfFrames - (Int_t) timeInUnitsOfFrames;
488
489 Int_t rowUnderReadout = Int_t(fSensorData->GetNPixelsY() * timeSinceStartOfTheFrame);
490
491
492 return (Int_t)(timeInUnitsOfFrames + (pixelNumberY < rowUnderReadout));
493 //
494 /* This statement is equivalent to:
495 if (pixelNumberY<rowUnderReadout) {return timeInUnitsOfFrames;}
496 else {return timeInUnitsOfFrames+1;}
497 */
498}
499// -------------------------------------------------------------------------
500
501Double_t CbmMvdSensor::ComputeIndecatedAnalogTime(Double_t hitMCTime, Float_t diodeCharge)
502{
503
504 Double_t delay = fSensorData->ComputeHitDelay(diodeCharge);
505 Double_t jitter = fSensorData->ComputeHitJitter(diodeCharge);
506
507 return hitMCTime + delay + jitter;
508}
509
510Double_t CbmMvdSensor::ComputeEndOfBusyTime(Double_t hitMCTime, Float_t diodeCharge, Int_t pixelNumberY)
511{
512
513 Double_t endOfAnalogChannelDeadTime = hitMCTime + fSensorData->ComputeHitDeadTime(diodeCharge);
514 Int_t frameNumberAtEndOfDeadTime = GetFrameNumber(endOfAnalogChannelDeadTime, pixelNumberY);
515 Double_t endOfDeadTime = GetFrameEndTime(frameNumberAtEndOfDeadTime);
516 /* Anticipated condition for end of deadtime:
517 * Analog electronics must be below threshold AND HEREAFTER a new frame must have started.
518 * Neglected: Tail of the falling edge of the analog pulse is artificially cut.
519 */
520 return endOfDeadTime;
521}
522
523// -------------------------------------------------------------------------
524Double_t CbmMvdSensor::GetFrameStartTime(Int_t frameNumber)
525{
526
527 return fSensorStartTime + frameNumber * fSensorData->GetIntegrationTime();
528}
529
530// -------------------------------------------------------------------------
531Double_t CbmMvdSensor::GetReadoutTime(Double_t absoluteTime) const
532{
533
534
535 Double_t timeSinceStart = absoluteTime - fSensorStartTime;
536
537 Double_t timeInUnitsOfFrames = timeSinceStart / fSensorData->GetIntegrationTime();
538
539 Int_t nextFrame = (Int_t)(timeInUnitsOfFrames + 1);
540
541 Double_t roTime = nextFrame * fSensorData->GetIntegrationTime();
542
543 return roTime;
544}
545// -------------------------------------------------------------------------
546
547
548void CbmMvdSensor::Print(Option_t* /*opt*/) const { LOG(info) << ToString(); }
549
550// ----- Public method Print -------------------------------------------
551std::string CbmMvdSensor::ToString() const
552{
553 std::stringstream ss;
554 ss << " --- " << GetName() << ", sensor name" << fVolName << std::endl;
555 ss << " MC - ID: " << fVolumeId << std::endl;
556 ss << "---------------------------------------------------------" << std::endl;
557 ss << " Position information: " << std::endl;
558 fRecoMatrix->Print();
559 ss << " --------------------------------------------------------" << std::endl;
560 ss << " Technical information: " << std::endl;
561 ss << fSensorData->ToString();
562 ss << " , MC Id " << fVolumeId << std::endl;
563 ss << "---------------------------------------------------------" << std::endl;
564 return ss.str();
565}
566// -------------------------------------------------------------------------
567
568//-----------------------------------------------------------------------
570{
571 CbmMvdSensorPlugin* plugin;
572 Int_t nPlugin = fPluginArray->GetEntriesFast();
573 for (Int_t i = 0; i < nPlugin; i++) {
574 plugin = (CbmMvdSensorPlugin*) fPluginArray->At(i);
575 plugin->Finish();
576 }
577}
578// -------------------------------------------------------------------------
579
580
ClassImp(CbmConverterManager)
Double_t lab[3]
bool first
virtual void InitBuffer(CbmMvdSensor *mySensor)
virtual Double_t ComputeHitDelay(Float_t charge)
virtual Double_t GetPixelPitchX()
virtual Double_t GetPixelPitchY()
virtual Double_t ComputeHitDeadTime(Float_t charge)
virtual Double_t GetIntegrationTime()
virtual Double_t ComputeHitJitter(Float_t charge)
virtual void SetNextPlugin(CbmMvdSensorPlugin *plugin)
virtual TClonesArray * GetOutputArray()
virtual TH1 * GetHistogram(UInt_t number)
virtual MvdSensorPluginType GetPluginType()=0
virtual void SetInput(TObject *)
virtual TClonesArray * GetMatchArray()
virtual void SetInputArray(TClonesArray *)
virtual void ExecChain()
virtual void SetPreviousPlugin(CbmMvdSensorPlugin *plugin)
virtual void InitTask(CbmMvdSensor *mySensor)
Int_t GetOutputArrayLen(Int_t nPlugin) const
TClonesArray * GetMatchArray(Int_t nPlugin) const
void LocalToTop(Double_t *local, Double_t *lab)
Int_t GetFrameNumber(Double_t absoluteTime, Int_t pixelNumberY=0) const
void TopToLocal(Double_t *lab, Double_t *local)
void PixelToTop(Int_t pixelNumberX, Int_t pixelNumberY, Double_t *lab)
void SetAlignment(TGeoHMatrix *alignmentMatrix)
Double_t GetDX() const
Double_t fTempCoordinate[3]
UInt_t GetNumberOfHistograms(UInt_t nPlugin)
TH1 * GetHistogram(UInt_t nPlugin, UInt_t nHisto)
void PixelToLocal(Int_t pixelNumberX, Int_t pixelNumberY, Double_t *local)
void ReadSensorGeometry(TString nodeName)
Double_t GetFrameStartTime(Int_t frameNumber)
Double_t GetDY() const
void ExecTo(UInt_t nPlugin)
TString fVolName
void SendInputToPlugin(Int_t nPlugin, TObject *input)
CbmMvdSensorDataSheet * fSensorData
TObjArray * fPluginArray
Bool_t initialized
TClonesArray * GetOutputBuffer() const
virtual void Print(Option_t *opt="") const
Double_t fcurrentEventTime
void LocalToPixel(Double_t *local, Int_t &pixelNumberX, Int_t &pixelNumberY)
TString fNodeName
void Exec(UInt_t nPlugin)
Double_t fSensorStartTime
Double_t ComputeEndOfBusyTime(Double_t hitMCTime, Float_t diodeCharge, Int_t pixelNumberY)
void ShowDebugHistos()
TGeoHMatrix * fRecoMatrix
void ExecFrom(UInt_t nPlugin)
Double_t ComputeIndecatedAnalogTime(Double_t hitMCTime, Float_t diodeCharge)
Float_t epsilon[3]
CbmMvdSensor()
includes from C
Double_t GetReadoutTime(Double_t absoluteTime) const
Double_t GetFrameEndTime(Int_t frameNumber)
Double_t fSensorPosition[3]
TGeoHMatrix * fMCMatrix
TGeoBBox * fShape
virtual ~CbmMvdSensor()
std::string ToString() const
void TopToPixel(Double_t *lab, Int_t &pixelNumberX, Int_t &pixelNumberY)
TClonesArray * GetOutputArray(Int_t nPlugin) const
TGeoHMatrix * fAlignmentCorr