SND@LHC Software
Loading...
Searching...
No Matches
DigiTaskSND Class Reference

#include <DigiTaskSND.h>

Inheritance diagram for DigiTaskSND:
Collaboration diagram for DigiTaskSND:

Public Member Functions

 DigiTaskSND ()
 
 ~DigiTaskSND ()
 
virtual InitStatus Init ()
 
virtual void Exec (Option_t *opt)
 
void withScifiClusters (bool flag)
 
void set_copy_emulsion_points (bool flag)
 

Private Member Functions

void digitizeMuFilter ()
 
void digitizeScifi ()
 
void clusterScifi ()
 
 DigiTaskSND (const DigiTaskSND &)
 
DigiTaskSNDoperator= (const DigiTaskSND &)
 
 ClassDef (DigiTaskSND, 6)
 

Private Attributes

Scifiscifi
 
std::map< Int_t, std::map< Int_t, std::array< float, 2 > > > fibresSiPM
 
std::map< Int_t, std::map< Int_t, std::array< float, 2 > > > siPMFibres
 
FairMCEventHeader * fMCEventHeader
 
TClonesArray * fMuFilterPointArray
 
TClonesArray * fScifiPointArray
 
TClonesArray * fScifiClusterArray
 
SNDLHCEventHeaderfEventHeader
 
TClonesArray * fMuFilterDigiHitArray
 
TClonesArray * fScifiDigiHitArray
 
TClonesArray * fMuFilterHit2MCPointsArray
 
TClonesArray * fScifiHit2MCPointsArray
 
TClonesArray * fvetoPointArray
 
TClonesArray * fEmulsionPointArray
 
TClonesArray * fMCTrackArray
 
bool fMakeClusterScifi
 
bool fCopyEmulsionPoints
 

Detailed Description

Definition at line 16 of file DigiTaskSND.h.

Constructor & Destructor Documentation

◆ DigiTaskSND() [1/2]

DigiTaskSND::DigiTaskSND ( )

Default constructor

Definition at line 29 of file DigiTaskSND.cxx.

30 : FairTask("DigTaskSND")
31 , fScifiPointArray(nullptr)
32 , fMuFilterPointArray(nullptr)
33 , fEventHeader(nullptr)
34 , fScifiDigiHitArray(nullptr)
35 , fScifiClusterArray(nullptr)
36 , fMuFilterDigiHitArray(nullptr)
39 , fMakeClusterScifi(true)
40 , fCopyEmulsionPoints(false)
41{}
TClonesArray * fMuFilterHit2MCPointsArray
Definition DigiTaskSND.h:55
TClonesArray * fScifiDigiHitArray
Definition DigiTaskSND.h:54
SNDLHCEventHeader * fEventHeader
Definition DigiTaskSND.h:52
TClonesArray * fMuFilterDigiHitArray
Definition DigiTaskSND.h:53
TClonesArray * fScifiPointArray
Definition DigiTaskSND.h:49
TClonesArray * fMuFilterPointArray
Definition DigiTaskSND.h:48
TClonesArray * fScifiHit2MCPointsArray
Definition DigiTaskSND.h:56
TClonesArray * fScifiClusterArray
Definition DigiTaskSND.h:50
bool fMakeClusterScifi
Definition DigiTaskSND.h:62
bool fCopyEmulsionPoints
Definition DigiTaskSND.h:63

◆ ~DigiTaskSND()

DigiTaskSND::~DigiTaskSND ( )

Destructor

Definition at line 43 of file DigiTaskSND.cxx.

43{}

◆ DigiTaskSND() [2/2]

DigiTaskSND::DigiTaskSND ( const DigiTaskSND )
private

Member Function Documentation

◆ ClassDef()

DigiTaskSND::ClassDef ( DigiTaskSND  ,
 
)
private

◆ clusterScifi()

void DigiTaskSND::clusterScifi ( )
private

Definition at line 175 of file DigiTaskSND.cxx.

176{
177 map<int, int > hitDict{};
178 vector<int> hitList{};
179 vector<int> tmp{};
180 int index{}, ncl{}, cprev{}, c{}, last{}, first{}, N{};
181
182 for (int k = 0, kEnd = fScifiDigiHitArray->GetEntries(); k < kEnd; k++) {
183 sndScifiHit* d = static_cast<sndScifiHit*>(fScifiDigiHitArray->At(k));
184 if (!d->isValid()) continue;
185 hitDict[d->GetDetectorID()] = k ;
186 hitList.push_back(d->GetDetectorID());
187 }
188 if (hitList.size() > 0)
189 {
190 sort(hitList.begin(), hitList.end());
191 tmp.push_back(hitList[0]);
192 cprev = hitList[0];
193 ncl = 0;
194 last = hitList.size()-1;
195 vector<sndScifiHit*> hitlist{};
196 for (int i =0; i<hitList.size(); i++)
197 {
198 if (i==0 && hitList.size()>1) continue;
199 c = hitList[i];
200 if (c-cprev ==1) tmp.push_back(c);
201 if (c-cprev !=1 || c==hitList[last]){
202 first = tmp[0];
203 N = tmp.size();
204 hitlist.clear();
205 for (int j=0; j<tmp.size(); j++)
206 {
207 sndScifiHit* aHit = static_cast<sndScifiHit*>(fScifiDigiHitArray->At(hitDict[tmp[j]]));
208 hitlist.push_back(aHit);
209 }
210 new ((*fScifiClusterArray)[index]) sndCluster(first, N, hitlist, scifi);
211 index++;
212 if (c!=hitList[last])
213 {
214 ncl++;
215 tmp.clear();
216 tmp.push_back(c);
217 }
218 }
219 cprev = c;
220 }
221 }
222}
Scifi * scifi
Definition DigiTaskSND.h:42
int i
Definition ShipAna.py:86
c
Definition hnl.py:100

◆ digitizeMuFilter()

void DigiTaskSND::digitizeMuFilter ( )
private

Definition at line 224 of file DigiTaskSND.cxx.

225{
226 // a map with detID and vector(list) of points
227 map<int, vector<MuFilterPoint*> > hitContainer{};
228 Hit2MCPoints mcLinks;
229 map<pair<int, int>, double> mcPoints{};
230 map<int, double> norm{};
231 int detID{};
232
233 // Fill the map
234 for (int k = 0, kEnd = fMuFilterPointArray->GetEntries(); k < kEnd; k++) {
235 MuFilterPoint* point = static_cast<MuFilterPoint*>(fMuFilterPointArray->At(k));
236 if (!point) continue;
237 // Collect all hits in same detector element
238 detID = point->GetDetectorID();
239 hitContainer[detID].push_back(point);
240 mcPoints[make_pair(detID, k)] = point->GetEnergyLoss();
241 norm[detID]+= point->GetEnergyLoss();
242 }
243 int index = 0;
244 // Loop over entries of the hitContainer map and collect all hits in same detector element
245 for (auto it = hitContainer.begin(); it != hitContainer.end(); it++){
246 new ((*fMuFilterDigiHitArray)[index]) MuFilterHit(it->first, hitContainer[it->first]);
247 index++;
248 for (auto mcit = mcPoints.begin(); mcit != mcPoints.end(); mcit++){
249 if(it->first == mcit->first.first) mcLinks.Add(it->first, mcit->first.second, mcPoints[make_pair(it->first, mcit->first.second)]/norm[it->first]);
250 }
251 }
252 new((*fMuFilterHit2MCPointsArray)[0]) Hit2MCPoints(mcLinks);
253}
void Add(int detID, int key, float w)

◆ digitizeScifi()

void DigiTaskSND::digitizeScifi ( )
private

Definition at line 130 of file DigiTaskSND.cxx.

131{
132 // a map containing fibreID and vector(list) of points and weights
133 map<int, pair<vector<ScifiPoint*>, vector<float>> > hitContainer{};
134 Hit2MCPoints mcLinks;
135 map<pair<int, int>, double> mcPoints{};
136 map<int, double> norm{};
137 int globsipmChan{}, detID{};
138 int locFibreID{};
139
140 // Fill the map
141 for (int k = 0, kEnd = fScifiPointArray->GetEntries(); k < kEnd; k++)
142 {
143 ScifiPoint* point = static_cast<ScifiPoint*>(fScifiPointArray->At(k));
144 if (!point) continue;
145 // Collect all hits in same SiPM channel
146 detID = point->GetDetectorID();
147 locFibreID = detID%100000;
148 // Check if locFibreID in a dead area
149 if(siPMFibres.count(locFibreID)==0) continue;
150 double dE{};
151 float weight{};
152 for (auto sipmChan : siPMFibres[locFibreID])
153 {
154 globsipmChan = int(detID/100000)*100000+sipmChan.first;
155 weight = sipmChan.second[0];
156 hitContainer[globsipmChan].first.push_back(point);
157 hitContainer[globsipmChan].second.push_back(weight);
158 dE = point->GetEnergyLoss()*weight;
159 mcPoints[make_pair(globsipmChan, k)] = dE;
160 norm[globsipmChan]+= dE;
161 }
162 }// End filling map
163 int index = 0;
164 // Loop over entries of the hitContainer map and collect all hits in same detector element
165 for (auto it = hitContainer.begin(); it != hitContainer.end(); it++){
166 new ((*fScifiDigiHitArray)[index]) sndScifiHit(it->first, hitContainer[it->first].first, hitContainer[it->first].second);
167 index++;
168 for (auto mcit = mcPoints.begin(); mcit != mcPoints.end(); mcit++){
169 if(it->first == mcit->first.first) mcLinks.Add(it->first, mcit->first.second, mcPoints[make_pair(it->first, mcit->first.second)]/norm[it->first]);
170 }
171 }
172 new((*fScifiHit2MCPointsArray)[0]) Hit2MCPoints(mcLinks);
173}
std::map< Int_t, std::map< Int_t, std::array< float, 2 > > > siPMFibres
Definition DigiTaskSND.h:44

◆ Exec()

void DigiTaskSND::Exec ( Option_t *  opt)
virtual

Virtual method Exec

Definition at line 107 of file DigiTaskSND.cxx.

108{
109
110 fScifiDigiHitArray->Clear("C");
111 if (fMakeClusterScifi) fScifiClusterArray->Clear("C");
112 fScifiHit2MCPointsArray->Clear("C");
113 fMuFilterDigiHitArray->Clear("C");
114 fMuFilterHit2MCPointsArray->Clear("C");
115
116 // Set event header
120
121 // Digitize MC points if any
124 {
127 }
128}
void digitizeMuFilter()
FairMCEventHeader * fMCEventHeader
Definition DigiTaskSND.h:47
void clusterScifi()
void digitizeScifi()
void SetBunchType(int16_t bunchType)
void SetRunId(uint64_t runid)
void SetEventNumber(int id)

◆ Init()

InitStatus DigiTaskSND::Init ( )
virtual

Virtual method Init

Definition at line 45 of file DigiTaskSND.cxx.

46{
47 FairRootManager* ioman = FairRootManager::Instance();
48 if (!ioman) {
49 LOG(FATAL) << "DigiTaskSND::Init: RootManager not instantiated!";
50 }
51
52 // Get the SciFi detector and sipm to fibre mapping
53 scifi = dynamic_cast<Scifi*> (gROOT->GetListOfGlobals()->FindObject("Scifi") );
57
58 // Get event header
59 // Try classic FairRoot approach first
60 fMCEventHeader = static_cast<FairMCEventHeader*> (ioman->GetObject("MCEventHeader."));
61 // .. with a safety net for trailing dots mischief
62 if ( fMCEventHeader == nullptr ) {
63 fMCEventHeader = static_cast<FairMCEventHeader*>(gROOT->FindObjectAny("MCEventHeader."));
64 }
65 // Get input MC points
66 fScifiPointArray = static_cast<TClonesArray*>(ioman->GetObject("ScifiPoint"));
67 fvetoPointArray = static_cast<TClonesArray*>(ioman->GetObject("vetoPoint"));
68 fEmulsionPointArray = static_cast<TClonesArray*>(ioman->GetObject("EmulsionDetPoint"));
69 fMuFilterPointArray = static_cast<TClonesArray*>(ioman->GetObject("MuFilterPoint"));
71 LOG(ERROR) << "No Scifi and no MuFilter MC Point array!";
72 return kERROR;
73 }
74 // copy branches from input file:
75 fMCTrackArray = static_cast<TClonesArray*>(ioman->GetObject("MCTrack"));
76 ioman->Register("MCTrack", "ShipMCTrack", fMCTrackArray, kTRUE);
77 ioman->Register("vetoPoint", "vetoPoints", fvetoPointArray, kTRUE);
78 ioman->Register("EmulsionDetPoint", "EmulsionDetPoints", fEmulsionPointArray, fCopyEmulsionPoints);
79 ioman->Register("ScifiPoint", "ScifiPoints", fScifiPointArray, kTRUE);
80 ioman->Register("MuFilterPoint", "MuFilterPoints", fMuFilterPointArray, kTRUE);
81
82 // Event header
84 ioman->Register("EventHeader.", "sndEventHeader", fEventHeader, kTRUE);
85
86 // Create and register output array - for SciFi and MuFilter
87 fScifiDigiHitArray = new TClonesArray("sndScifiHit");
88 ioman->Register("Digi_ScifiHits", "DigiScifiHit_det", fScifiDigiHitArray, kTRUE);
89 // Branche containing links to MC truth info
90 fScifiHit2MCPointsArray = new TClonesArray("Hit2MCPoints");
91 ioman->Register("Digi_ScifiHits2MCPoints", "DigiScifiHits2MCPoints_det", fScifiHit2MCPointsArray, kTRUE);
92 fScifiHit2MCPointsArray->BypassStreamer(kTRUE);
93 if ( fMakeClusterScifi ) {
94 fScifiClusterArray = new TClonesArray("sndCluster");
95 ioman->Register("Cluster_Scifi", "ScifiCluster_det", fScifiClusterArray, kTRUE);
96 }
97 fMuFilterDigiHitArray = new TClonesArray("MuFilterHit");
98 ioman->Register("Digi_MuFilterHits", "DigiMuFilterHit_det", fMuFilterDigiHitArray, kTRUE);
99 // Branche containing links to MC truth info
100 fMuFilterHit2MCPointsArray = new TClonesArray("Hit2MCPoints");
101 ioman->Register("Digi_MuFilterHits2MCPoints", "DigiMuFilterHits2MCPoints_det", fMuFilterHit2MCPointsArray, kTRUE);
102 fMuFilterHit2MCPointsArray->BypassStreamer(kTRUE);
103
104 return kSUCCESS;
105}
TClonesArray * fMCTrackArray
Definition DigiTaskSND.h:59
std::map< Int_t, std::map< Int_t, std::array< float, 2 > > > fibresSiPM
Definition DigiTaskSND.h:43
TClonesArray * fEmulsionPointArray
Definition DigiTaskSND.h:58
TClonesArray * fvetoPointArray
Definition DigiTaskSND.h:57
Definition Scifi.h:20
std::map< Int_t, std::map< Int_t, std::array< float, 2 > > > GetFibresMap()
Definition Scifi.h:43
std::map< Int_t, std::map< Int_t, std::array< float, 2 > > > GetSiPMmap()
Definition Scifi.h:42
void SiPMmapping()
Definition Scifi.cxx:758

◆ operator=()

DigiTaskSND & DigiTaskSND::operator= ( const DigiTaskSND )
private

◆ set_copy_emulsion_points()

void DigiTaskSND::set_copy_emulsion_points ( bool  flag)
inline

Set flag to copy emulsion points to output file

Definition at line 35 of file DigiTaskSND.h.

35{ fCopyEmulsionPoints = flag; }

◆ withScifiClusters()

void DigiTaskSND::withScifiClusters ( bool  flag)
inline

Set flag for Scifi cluster making

Definition at line 32 of file DigiTaskSND.h.

32{ fMakeClusterScifi = flag; }

Member Data Documentation

◆ fCopyEmulsionPoints

bool DigiTaskSND::fCopyEmulsionPoints
private

Definition at line 63 of file DigiTaskSND.h.

◆ fEmulsionPointArray

TClonesArray* DigiTaskSND::fEmulsionPointArray
private

Definition at line 58 of file DigiTaskSND.h.

◆ fEventHeader

SNDLHCEventHeader* DigiTaskSND::fEventHeader
private

Definition at line 52 of file DigiTaskSND.h.

◆ fibresSiPM

std::map<Int_t, std::map<Int_t, std::array<float, 2> > > DigiTaskSND::fibresSiPM
private

Definition at line 43 of file DigiTaskSND.h.

◆ fMakeClusterScifi

bool DigiTaskSND::fMakeClusterScifi
private

Flags

Definition at line 62 of file DigiTaskSND.h.

◆ fMCEventHeader

FairMCEventHeader* DigiTaskSND::fMCEventHeader
private

Definition at line 47 of file DigiTaskSND.h.

◆ fMCTrackArray

TClonesArray* DigiTaskSND::fMCTrackArray
private

Definition at line 59 of file DigiTaskSND.h.

◆ fMuFilterDigiHitArray

TClonesArray* DigiTaskSND::fMuFilterDigiHitArray
private

Definition at line 53 of file DigiTaskSND.h.

◆ fMuFilterHit2MCPointsArray

TClonesArray* DigiTaskSND::fMuFilterHit2MCPointsArray
private

Definition at line 55 of file DigiTaskSND.h.

◆ fMuFilterPointArray

TClonesArray* DigiTaskSND::fMuFilterPointArray
private

Definition at line 48 of file DigiTaskSND.h.

◆ fScifiClusterArray

TClonesArray* DigiTaskSND::fScifiClusterArray
private

Definition at line 50 of file DigiTaskSND.h.

◆ fScifiDigiHitArray

TClonesArray* DigiTaskSND::fScifiDigiHitArray
private

Definition at line 54 of file DigiTaskSND.h.

◆ fScifiHit2MCPointsArray

TClonesArray* DigiTaskSND::fScifiHit2MCPointsArray
private

Definition at line 56 of file DigiTaskSND.h.

◆ fScifiPointArray

TClonesArray* DigiTaskSND::fScifiPointArray
private

Definition at line 49 of file DigiTaskSND.h.

◆ fvetoPointArray

TClonesArray* DigiTaskSND::fvetoPointArray
private

Definition at line 57 of file DigiTaskSND.h.

◆ scifi

Scifi* DigiTaskSND::scifi
private

Definition at line 42 of file DigiTaskSND.h.

◆ siPMFibres

std::map<Int_t, std::map<Int_t,std:: array<float, 2> > > DigiTaskSND::siPMFibres
private

Definition at line 44 of file DigiTaskSND.h.


The documentation for this class was generated from the following files: