16#include <FairEventHeader.h>
17#include <FairMCEventHeader.h>
18#include <FairPrimaryGenerator.h>
19#include <FairRunAna.h>
20#include <FairRunSim.h>
23#include <TClonesArray.h>
24#include <TGeoManager.h>
25#include <TGeoMatrix.h>
26#include <TGeoVolume.h>
45 , fcurrentEventTime(0.)
49 , fRecoMatrix(nullptr)
50 , fAlignmentCorr(nullptr)
55 , fPluginArray(new TObjArray(1))
56 , fSensorStartTime(0.)
59 LOG(warning) <<
"MVD-Sensor initialized without technical data. Assuming default sensor.";
61 LOG(warning) <<
"MVD-Sensor initialized without geometry data. Must be added manually before using this class.";
63 LOG(warning) <<
"MVD-Sensor initialized without valid start time. Must be added manually before using this class.";
70 Int_t stationNr, Int_t volumeId, Double_t sensorStartTime)
73 , fSensorNr(stationNr)
75 , fDetectorID(DetectorId(stationNr))
82 , fcurrentEventTime(0.)
86 , fRecoMatrix(nullptr)
87 , fAlignmentCorr(nullptr)
90 , fSensorData(dataSheet)
92 , fPluginArray(new TObjArray(1))
93 , fSensorStartTime(sensorStartTime)
116 LOG(debug1) <<
"-I- nodeName is " << nodeName;
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");
128 Double_t
first[3], last[3];
131 LOG(debug2) <<
"pixel 0,0 at: " <<
first[0] <<
", " <<
first[1] <<
" Local";
133 <<
", " << last[1] <<
" Local";
135 Double_t* tempCoordinate;
138 Double_t pre[3], past[3], global[3];
139 Double_t local[3] = {0, 0, 0};
145 for (Int_t i = 0; i < 3; i++) {
146 tempCoordinate[i] = tempCoordinate[i] +
epsilon[i];
150 LOG(debug2) <<
"shifted pixel 0,0 to: " << past[0] <<
", " << past[1] <<
" at z = " << past[2];
152 LOG(debug2) <<
"shifted local center to: " << global[0] <<
", " << global[1] <<
" at z = " << global[2];
162 for (Int_t i = 0; i < 3; i++) {
178 TClonesArray* dataArray;
185 for (Int_t i = 0; i < nPlugin; i++) {
199 for (Int_t i = 0; i < nPlugin - 1; i++) {
216 LOG(debug) <<
"No Plugins on this Sensor ";
217 pluginFirst =
nullptr;
230 LOG(info) <<
"Set debug mode on Plugin " <<
fPluginArray->GetEntriesFast() - 1 <<
" at sensor " << GetName();
250 FairRunSim* run = FairRunSim::Instance();
251 FairRunAna* ana = FairRunAna::Instance();
253 FairEventHeader*
event = run->GetEventHeader();
257 FairEventHeader*
event = ana->GetEventHeader();
271 for (Int_t i = 1; i < nPlugin; i++) {
283 if (nPlugin > nPluginMax) { Fatal(GetName(),
" Error - Called non-existing plugin"); }
290 FairRunSim* run = FairRunSim::Instance();
291 FairPrimaryGenerator* gen = run->GetPrimaryGenerator();
292 FairMCEventHeader*
event = gen->GetEvent();
300 if (nPlugin < maxPlugin) {
305 for (UInt_t i = 1; i <= nPlugin; i++) {
312 LOG(info) <<
"nPlugin to large";
320 FairRunSim* run = FairRunSim::Instance();
321 FairPrimaryGenerator* gen = run->GetPrimaryGenerator();
322 FairMCEventHeader*
event = gen->GetEvent();
330 if (nPlugin <= maxPlugin) {
335 for (UInt_t i = nPlugin + 1; i < maxPlugin; i++) {
343 LOG(info) <<
"nPlugin to large";
368 if (tempArray) {
return tempArray->GetEntriesFast() - 1; }
370 LOG(fatal) <<
"undefined plugin called";
383 LOG(warning) <<
"CbmMvdSensor::GetOutputBuffer: Warning - Use of method depreciated.";
391 if (nPlugin >= (UInt_t)
fPluginArray->GetEntriesFast())
return 0;
399 if (nPlugin >= (UInt_t)
fPluginArray->GetEntriesFast())
return -1;
487 Double_t timeSinceStartOfTheFrame = timeInUnitsOfFrames - (Int_t) timeInUnitsOfFrames;
492 return (Int_t)(timeInUnitsOfFrames + (pixelNumberY < rowUnderReadout));
507 return hitMCTime + delay + jitter;
514 Int_t frameNumberAtEndOfDeadTime =
GetFrameNumber(endOfAnalogChannelDeadTime, pixelNumberY);
520 return endOfDeadTime;
539 Int_t nextFrame = (Int_t)(timeInUnitsOfFrames + 1);
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;
559 ss <<
" --------------------------------------------------------" << std::endl;
560 ss <<
" Technical information: " << std::endl;
562 ss <<
" , MC Id " <<
fVolumeId << std::endl;
563 ss <<
"---------------------------------------------------------" << std::endl;
573 for (Int_t i = 0; i < nPlugin; i++) {
ClassImp(CbmConverterManager)
virtual void InitBuffer(CbmMvdSensor *mySensor)
virtual Int_t GetPixelSignX()
virtual Double_t ComputeHitDelay(Float_t charge)
virtual Int_t GetNPixelsX()
virtual Double_t GetPixelPitchX()
std::string ToString() const
virtual Int_t GetNPixelsY()
virtual Double_t GetPixelPitchY()
virtual Double_t ComputeHitDeadTime(Float_t charge)
virtual Double_t GetIntegrationTime()
virtual Int_t GetPixelSignY()
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 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 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)
void ExecTo(UInt_t nPlugin)
void SendInputToPlugin(Int_t nPlugin, TObject *input)
CbmMvdSensorDataSheet * fSensorData
TClonesArray * GetOutputBuffer() const
virtual void Print(Option_t *opt="") const
Double_t fcurrentEventTime
void LocalToPixel(Double_t *local, Int_t &pixelNumberX, Int_t &pixelNumberY)
void Exec(UInt_t nPlugin)
Double_t fSensorStartTime
Double_t ComputeEndOfBusyTime(Double_t hitMCTime, Float_t diodeCharge, Int_t pixelNumberY)
TGeoHMatrix * fRecoMatrix
void ExecFrom(UInt_t nPlugin)
Double_t ComputeIndecatedAnalogTime(Double_t hitMCTime, Float_t diodeCharge)
CbmMvdSensor()
includes from C
Double_t GetReadoutTime(Double_t absoluteTime) const
Double_t GetFrameEndTime(Int_t frameNumber)
Double_t fSensorPosition[3]
std::string ToString() const
void TopToPixel(Double_t *lab, Int_t &pixelNumberX, Int_t &pixelNumberY)
TClonesArray * GetOutputArray(Int_t nPlugin) const
TGeoHMatrix * fAlignmentCorr