SND@LHC Software
Loading...
Searching...
No Matches
EmulsionDet.cxx
Go to the documentation of this file.
1//
2// EmulsionDet.cxx
3//
4//
5//
6//
7
8#include "EmulsionDet.h"
9
10#include "EmulsionDetPoint.h"
11
12#include "TGeoManager.h"
13#include "FairRun.h" // for FairRun
14#include "FairRuntimeDb.h" // for FairRuntimeDb
15#include "TList.h" // for TListIter, TList (ptr only)
16#include "TObjArray.h" // for TObjArray
17#include "TString.h" // for TString
18
19#include "TClonesArray.h"
20#include "TVirtualMC.h"
21
22#include "TGeoBBox.h"
23#include "TGeoMaterial.h"
24#include "TGeoMedium.h"
25
26#include "TParticle.h"
27#include "TParticlePDG.h"
28#include "TParticleClassPDG.h"
29#include "TVirtualMCStack.h"
30#include "TGeoCompositeShape.h"
31
32#include "FairVolume.h"
33#include "FairGeoVolume.h"
34#include "FairGeoNode.h"
35#include "FairRootManager.h"
36#include "FairGeoLoader.h"
37#include "FairGeoInterface.h"
38#include "FairGeoTransform.h"
39#include "FairGeoMedia.h"
40#include "FairGeoMedium.h"
41#include "FairGeoBuilder.h"
42#include "FairRun.h"
43#include "FairRuntimeDb.h"
44
45#include "FairLogger.h"
46
47#include "ShipDetectorList.h"
48#include "ShipUnit.h"
49#include "ShipStack.h"
50
51#include "TGeoUniformMagField.h"
52#include <stddef.h> // for NULL
53#include <iostream> // for operator<<, basic_ostream,etc
54#include <string.h>
55
56using std::cout;
57using std::endl;
58
59using namespace ShipUnit;
60
62: FairDetector("EmulsionDet", "",kTRUE),
63fTrackID(-1),
64fVolumeID(-1),
65fPos(),
66fMom(),
67fTime(-1.),
68fLength(-1.),
69fELoss(-1),
70fEmulsionDetPointCollection(new TClonesArray("EmulsionDetPoint"))
71{
72}
73
74EmulsionDet::EmulsionDet(const char* name, Bool_t Active,const char* Title)
75: FairDetector(name, true, kEmulsionDet),
76fTrackID(-1),
77fVolumeID(-1),
78fPos(),
79fMom(),
80fTime(-1.),
81fLength(-1.),
82fELoss(-1),
83fEmulsionDetPointCollection(new TClonesArray("EmulsionDetPoint"))
84{
85}
86
94
96{
97 FairDetector::Initialize();
98}
99
100// ----- Private method InitMedium
101Int_t EmulsionDet::InitMedium(const char* name)
102{
103 static FairGeoLoader *geoLoad=FairGeoLoader::Instance();
104 static FairGeoInterface *geoFace=geoLoad->getGeoInterface();
105 static FairGeoMedia *media=geoFace->getMedia();
106 static FairGeoBuilder *geoBuild=geoLoad->getGeoBuilder();
107
108 FairGeoMedium *ShipMedium=media->getMedium(name);
109
110 if (!ShipMedium)
111 {
112 Fatal("InitMedium","Material %s not defined in media file.", name);
113 return -1111;
114 }
115 TGeoMedium* medium=gGeoManager->GetMedium(name);
116 if (medium!=NULL)
117 return ShipMedium->getMediumIndex();
118 return geoBuild->createMedium(ShipMedium);
119}
120
121void EmulsionDet::DecodeBrickID(Int_t detID, Int_t &NWall, Int_t &NRow, Int_t &NColumn, Int_t &NPlate){
122
123 NWall = detID/1E4;
124 Int_t NTransverse = (detID - NWall*1E4)/1E3;
125 switch (NTransverse){
126 case (1):
127 NColumn = 1;
128 NRow = 2;
129 break;
130
131 case (2):
132 NColumn = 1;
133 NRow = 1;
134 break;
135
136 case (3):
137 NColumn = 2;
138 NRow = 2;
139 break;
140
141 case (4):
142 NColumn = 2;
143 NRow = 1;
144 break;
145 }
146
147 NPlate = detID - NWall*1E4 - NTransverse*1E3;
148
149
150}
151
152TString EmulsionDet::PathBrickID(Int_t detID){
153 //provide path to the node, from the detectorID
154 Int_t NWall, NRow, NColumn, NPlate;
155 DecodeBrickID(detID, NWall, NRow, NColumn, NPlate);
156
157 TString emulsionpath = TString::Format("/cave_1/Detector_0/volTarget_1/Wall_%i/Row_%i/Brick_%i/Emulsion_%i",NWall-1,NRow-1,NColumn-1,NPlate -1);
158
159 return emulsionpath;
160}
161
163{
164 // configuration parameters
165 XDimension = conf_floats["EmulsionDet/xdim"];
166 YDimension = conf_floats["EmulsionDet/ydim"];
167 ZDimension = conf_floats["EmulsionDet/zdim"];
168 fNCol = conf_ints["EmulsionDet/col"];
169 fNRow = conf_ints["EmulsionDet/row"];
170 fNWall = conf_ints["EmulsionDet/wall"];
171 fNTarget = conf_ints["EmulsionDet/target"];
172 WallXDim = conf_floats["EmulsionDet/WallXDim"];
173 WallYDim = conf_floats["EmulsionDet/WallYDim"];
174 WallZDim = conf_floats["EmulsionDet/WallZDim"];
175 TotalWallZDim = conf_floats["EmulsionDet/TotalWallZDim"];
176 WallZBorder_offset = conf_floats["EmulsionDet/WallZBorder_offset"];
177 EmulsionThickness = conf_floats["EmulsionDet/EmTh"];
178 EmulsionX = conf_floats["EmulsionDet/EmX"];
179 EmulsionY = conf_floats["EmulsionDet/EmY"];
180 PlasticBaseThickness = conf_floats["EmulsionDet/PBTh"];
181 EmPlateWidth = conf_floats["EmulsionDet/EPlW"];
182 PassiveThickness = conf_floats["EmulsionDet/PassiveTh"];
183 AllPlateWidth = conf_floats["EmulsionDet/AllPW"];
184 fPassiveOption = conf_ints["EmulsionDet/PassiveOption"];
185 BrickPackageX = conf_floats["EmulsionDet/BrPackX"];
186 BrickPackageY = conf_floats["EmulsionDet/BrPackY"];
187 BrickPackageZ = conf_floats["EmulsionDet/BrPackZ"];
188 BrickX = conf_floats["EmulsionDet/BrX"];
189 BrickY = conf_floats["EmulsionDet/BrY"];
190 BrickZ = conf_floats["EmulsionDet/BrZ"];
191 number_of_plates = conf_ints["EmulsionDet/n_plates"];
192 TTrackerZ = conf_floats["EmulsionDet/TTz"];
193 ShiftX = conf_floats["EmulsionDet/ShiftX"];
194 ShiftY = conf_floats["EmulsionDet/ShiftY"];
195
196 int NTungstenPlatesTB24 = conf_ints["EmulsionDet/n_tungsten_plates_tb24"];
197 bool testbeam_2024_setup = false;
198
199 TGeoVolume *top=gGeoManager->FindVolumeFast("Detector");
200 if(!top) LOG(ERROR) << "no Detector volume found " ;
201 gGeoManager->SetVisLevel(10);
202
203 LOG(INFO) << " X: "<< XDimension<< " "<< YDimension<<" Z: "<<ZDimension;
204 LOG(INFO) <<" BrickX: "<< BrickX<<" Y: "<< BrickY<< " Z: "<< BrickZ;
205 //Materials
206 InitMedium("vacuum");
207 TGeoMedium *vacuum =gGeoManager->GetMedium("vacuum");
208
209 InitMedium("air");
210 TGeoMedium *air =gGeoManager->GetMedium("air");
211
212 InitMedium("Aluminum");
213 TGeoMedium *Al = gGeoManager->GetMedium("Aluminum");
214
215 InitMedium("PlasticBase");
216 TGeoMedium *PBase =gGeoManager->GetMedium("PlasticBase");
217
218 InitMedium("NuclearEmulsion");
219 TGeoMedium *NEmu =gGeoManager->GetMedium("NuclearEmulsion");
220
221 TGeoMaterial *NEmuMat = NEmu->GetMaterial(); //I need the materials to build the mixture
222 TGeoMaterial *PBaseMat = PBase->GetMaterial();
223
224 TGeoMixture * emufilmmixture = new TGeoMixture("EmulsionFilmMixture", 2.00); // two nuclear emulsions separated by the plastic base
225 Double_t frac_emu = NEmuMat->GetDensity() * 2 * EmulsionThickness /(NEmuMat->GetDensity() * 2 * EmulsionThickness + PBaseMat->GetDensity() * PlasticBaseThickness);
226
227 emufilmmixture->AddElement(NEmuMat,frac_emu);
228 emufilmmixture->AddElement(PBaseMat,1. - frac_emu);
229
230 TGeoMedium *Emufilm = new TGeoMedium("EmulsionFilm",100,emufilmmixture);
231
232 InitMedium("tungstensifon");
233 TGeoMedium *tungsten = gGeoManager->GetMedium("tungstensifon");
234
235
236 Int_t NPlates = number_of_plates; //Number of doublets emulsion + Pb
237
238
239 //TGeoVolume *top = gGeoManager->MakeBox("Top",vacuum,10.,10.,10.);
240 //gGeoManager->SetTopVolume(top);
241
242 //Definition of the target box containing emulsion bricks + target trackers (TT)
243 TGeoVolumeAssembly *volTarget = new TGeoVolumeAssembly("volTarget");
244
245 //
246 // //Volumes definition
247 // //
248
249 /*For testbeam 2024 there are plastic plates filling the upstream part of the target.
250 The last 28 layers have W+plastic plates.
251 The plastic layers in Wall1, Brick 1 are the same thickness as the plastic base in TI18 conf.
252 The plastic layers in Wall2, Brick 1 are 2 types of different thickness: 1 or 4/3 times the thickness of the TI18 plastic base.
253 These layers are alternating starting with the 4/3x-thick one, then 1x-thick one.
254 Whenever testbeam 2024 items are added in this function, there will be a note.
255 */
256
257 TGeoBBox *Walltot = new TGeoBBox("walltot",XDimension/2, YDimension/2, TotalWallZDim/2);
258 TGeoBBox *Wallint = new TGeoBBox("wallint",WallXDim/2, WallYDim/2, WallZDim/2);
259
260 TGeoTranslation * Wallborderpos = new TGeoTranslation("Walborderpos",0,0,WallZBorder_offset);
261 Wallborderpos->RegisterYourself();
262
263 TGeoCompositeShape *Wallborder = new TGeoCompositeShape("wallborder","walltot - (wallint:Walborderpos)");
264 TGeoVolume *volWallborder = new TGeoVolume("volWallborder", Wallborder, Al);
265 volWallborder->SetLineColor(kGray);
266
267 TGeoVolume *volWall = new TGeoVolume("Wall",Wallint,air);
268 TGeoVolume *volWall_2 = new TGeoVolume("Wall_2",Wallint,air);
269
270 //Rows
271 TGeoBBox *Row = new TGeoBBox("row",WallXDim/2, BrickY/2, BrickZ/2);
272 TGeoVolume *volRow = new TGeoVolume("Row",Row,air);
273 TGeoBBox *Row_W2 = new TGeoBBox("row_W2",WallXDim/2, BrickY/2, BrickZ/2);// testbeam 2024
274 TGeoVolume *volRow_W2 = new TGeoVolume("Row_W2",Row_W2,air);
275
276 //Bricks
277 TGeoBBox *Brick = new TGeoBBox("brick", BrickX/2, BrickY/2, BrickZ/2);
278 TGeoVolume *volBrick = new TGeoVolume("Brick",Brick,air);
279 volBrick->SetLineColor(kCyan);
280 volBrick->SetTransparency(1);
281
282 TGeoBBox *Brick_W2 = new TGeoBBox("brick_W2", BrickX/2, BrickY/2, BrickZ/2);// testbeam 2024
283 TGeoVolume *volBrick_W2 = new TGeoVolume("Brick_W2",Brick_W2,air);
284 volBrick_W2->SetLineColor(kOrange);
285 volBrick_W2->SetTransparency(1);
286
287 TGeoBBox *Passive = new TGeoBBox("Passive", EmulsionX/2, EmulsionY/2, PassiveThickness/2);
288 TGeoVolume *volPassive = new TGeoVolume("volPassive",Passive,tungsten);
289 volPassive->SetTransparency(1);
290 volPassive->SetLineColor(kGray);
291
292 // For the testbeam 2024, the upstream part of the brick is filled with plastic
293 float UpstreamPlasticThickness = (NPlates-NTungstenPlatesTB24)*AllPlateWidth;
294 // it is a little thinner for Wall2, where the pлastic plates have 2 thicknesses
295 float correction_W2 = NTungstenPlatesTB24/2*PlasticBaseThickness/3.;
296 float UpstreamPlasticThickness_W2 = UpstreamPlasticThickness - correction_W2;
297 TGeoBBox *Passive_plastic = new TGeoBBox("Passive_plastic", (EmulsionX-2.)/2, (EmulsionY-2.)/2, UpstreamPlasticThickness/2);
298 TGeoVolume *volPassive_plastic = new TGeoVolume("volPassive_plastic",Passive_plastic,PBase);
299 volPassive_plastic->SetLineColor(kMagenta);
300 volPassive_plastic->SetVisibility(kTRUE);
301
302 TGeoBBox *Passive_plastic_W2 = new TGeoBBox("Passive_plastic_W2", (EmulsionX-2.)/2, (EmulsionY-2.)/2, UpstreamPlasticThickness_W2/2);
303 TGeoVolume *volPassive_plastic_W2 = new TGeoVolume("volPassive_plastic_W2",Passive_plastic_W2,PBase);
304 volPassive_plastic_W2->SetLineColor(kMagenta+2);
305 volPassive_plastic_W2->SetVisibility(kTRUE);
306
307 float accumulatve_width = UpstreamPlasticThickness_W2; // testbeam 2024
308
309 for(Int_t n=0; n<NPlates; n++)
310 {
311 if (n==0 && testbeam_2024_setup){// testbeam 2024
312 volBrick->AddNode(volPassive_plastic, n,
313 new TGeoTranslation(0,0,-BrickZ/2 + UpstreamPlasticThickness/2));// upstream plastic
314 volBrick_W2->AddNode(volPassive_plastic_W2, n, new TGeoTranslation(0,0,-BrickZ/2 + UpstreamPlasticThickness_W2/2));// upstream plastic
315 }
316 if (n>=(NPlates-NTungstenPlatesTB24) || !testbeam_2024_setup) { // instrumented part for both TI18 and testbeam 2024
317 volBrick->AddNode(volPassive, n,
318 new TGeoTranslation(0,0,-BrickZ/2 + EmPlateWidth + PassiveThickness/2 + n*AllPlateWidth));// default(1x) plastic base thickness
319 if (testbeam_2024_setup){ // testbeam 2024
320 // interchange plastic plates of 1x or 4/3x default thickness
321 volBrick_W2->AddNode(volPassive, n,
322 new TGeoTranslation(0,0,-BrickZ/2 + (1+((n+1)%2)/3.)*EmPlateWidth + PassiveThickness/2 + accumulatve_width));
323 accumulatve_width+=(1+((n+1)%2)/3.)*EmPlateWidth + PassiveThickness;
324 }
325 }
326 }
327
328 TGeoBBox *EmulsionFilm = new TGeoBBox("EmulsionFilm", EmulsionX/2, EmulsionY/2, EmPlateWidth/2);
329 TGeoVolume *volEmulsionFilm = new TGeoVolume("Emulsion",EmulsionFilm,Emufilm); //TOP
330 volEmulsionFilm->SetLineColor(kBlue);
331 LOG(INFO) << "EmulsionDet : Passive option (0: all active, 1: all passive) set to " << fPassiveOption ;
332 if (fPassiveOption == 0) AddSensitiveVolume(volEmulsionFilm);
333 if (!testbeam_2024_setup){ // TI18
334 for(Int_t n=0; n<NPlates+1; n++)
335 {
336 volBrick->AddNode(volEmulsionFilm, n, new TGeoTranslation(0,0,-BrickZ/2+ EmPlateWidth/2 + n*AllPlateWidth));
337 }
338 }
339
340 volBrick->SetVisibility(kTRUE);
341 if (testbeam_2024_setup) { // testbeam 2024
342 volBrick_W2->SetVisibility(kTRUE);
343 }
344
345//alignment
346 double dx_survey[5] = {conf_floats["EmulsionDet/Xpos0"],conf_floats["EmulsionDet/Xpos1"],conf_floats["EmulsionDet/Xpos2"],conf_floats["EmulsionDet/Xpos3"],conf_floats["EmulsionDet/Xpos4"]};
347 double dy_survey[5] = {conf_floats["EmulsionDet/Ypos0"],conf_floats["EmulsionDet/Ypos1"],conf_floats["EmulsionDet/Ypos2"],conf_floats["EmulsionDet/Ypos3"],conf_floats["EmulsionDet/Ypos4"]};
348 double dz_survey[5] = {conf_floats["EmulsionDet/Zpos0"],conf_floats["EmulsionDet/Zpos1"],conf_floats["EmulsionDet/Zpos2"],conf_floats["EmulsionDet/Zpos3"],conf_floats["EmulsionDet/Zpos4"]};
349
350 top->AddNode(volTarget,1,new TGeoTranslation(0,0,0));
351
352 //adding walls
353
354 Double_t d_cl_z = - ZDimension/2;
355
356 if (!testbeam_2024_setup){
357 for(int l = 0; l < fNWall; l++) {
358 volTarget->AddNode(volWallborder,l,new TGeoTranslation(-dx_survey[l]-XDimension/2., dz_survey[l]+YDimension/2., dy_survey[l]+TotalWallZDim/2.)); //the survey points refer to the down-left corner
359 volTarget->AddNode(volWall,l,new TGeoTranslation(-dx_survey[l]-XDimension/2., dz_survey[l]+YDimension/2., dy_survey[l]+TotalWallZDim/2.+WallZBorder_offset)); //the survey points refer to the down-left corner
360 d_cl_z += BrickZ + TTrackerZ;
361 }
362 }
363 else { // testbeam 2024
364 volTarget->AddNode(volWallborder,0,new TGeoTranslation(-dx_survey[0]-XDimension/2., dz_survey[0]+YDimension/2., dy_survey[0]+TotalWallZDim/2.));
365 volTarget->AddNode(volWall,0,new TGeoTranslation(-dx_survey[0]-XDimension/2., dz_survey[0]+YDimension/2., dy_survey[0]+TotalWallZDim/2.+WallZBorder_offset));
366 d_cl_z += BrickZ + TTrackerZ;
367 volTarget->AddNode(volWallborder,1,new TGeoTranslation(-dx_survey[1]-XDimension/2., dz_survey[1]+YDimension/2., dy_survey[1]+TotalWallZDim/2.));
368 volTarget->AddNode(volWall_2,1,new TGeoTranslation(-dx_survey[1]-XDimension/2., dz_survey[1]+YDimension/2., dy_survey[1]+TotalWallZDim/2.+WallZBorder_offset));
369 d_cl_z += BrickZ + TTrackerZ;
370 }
371
372 //adding rows
373 Double_t d_cl_y = -WallYDim/2;
374
375 for(int k= 0; k< fNRow; k++)
376 {
377 volWall->AddNode(volRow,k,new TGeoTranslation(0, d_cl_y + BrickY/2,0));
378 if (testbeam_2024_setup){ // testbeam 2024
379 volWall_2->AddNode(volRow_W2,k,new TGeoTranslation(0, d_cl_y + BrickY/2,0));
380 }
381
382 // 2mm is the distance for the structure that holds the brick
383 d_cl_y += BrickY;
384 }
385
386 //adding columns of bricks
387 Double_t d_cl_x = -WallXDim/2;
388 for(int j= 0; j < fNCol; j++)
389 {
390 volRow->AddNode(volBrick,j,new TGeoTranslation(d_cl_x+BrickX/2, 0, 0));
391 if (testbeam_2024_setup){ // testbeam 2024
392 volRow_W2->AddNode(volBrick_W2,j,new TGeoTranslation(d_cl_x+BrickX/2, 0, 0));
393 }
394 d_cl_x += BrickX;
395 }
396}
397
398
399
400
401
402Bool_t EmulsionDet::ProcessHits(FairVolume* vol)
403{
405 //Set parameters at entrance of volume. Reset ELoss.
406 if ( gMC->IsTrackEntering() ) {
407 fELoss = 0.;
408 fTime = gMC->TrackTime() * 1.0e09;
409 fLength = gMC->TrackLength();
410 gMC->TrackPosition(fPos);
411 gMC->TrackMomentum(fMom);
412 }
413 // Sum energy loss for all steps in the active volume
414 fELoss += gMC->Edep();
415
416 // Create EmulsionDetPoint at exit of active volume
417 if ( gMC->IsTrackExiting() ||
418 gMC->IsTrackStop() ||
419 gMC->IsTrackDisappeared() ) {
420 fTrackID = gMC->GetStack()->GetCurrentTrackNumber();
421 gMC->CurrentVolID(fVolumeID);
422
423 //finding number of wall, row and column
424 Int_t detID = fVolumeID;
425 Int_t MaxLevel = gGeoManager->GetLevel();
426 const Int_t MaxL = MaxLevel;
427 //cout << "MaxLevel = " << MaxL << endl;
428 //cout << gMC->CurrentVolPath()<< endl;
429
430
431 Int_t motherV[MaxL];
432 Int_t NPlate =0;
433 const char *name;
434
435 name = gMC->CurrentVolName();
436 //cout << name << endl;
437 NPlate = detID;
438
439 Int_t NWall = -2, NColumn =-2, NRow =-2;
440
441 for(Int_t i = 0; i <= MaxL;i++)
442 {
443 gMC->CurrentVolOffID(i, motherV[i]);
444 const char *mumname = gMC->CurrentVolOffName(i);
445
446 if(strcmp(mumname, "Brick") == 0) NColumn = (1-motherV[i]); //0 or 1 (0 higher x, 1 lower x, x are negative, so higher x are closer to the beam)
447 if(strcmp(mumname, "Row") == 0) NRow = motherV[i]; // 0 or 1 (0 lower y, 1 higher y)
448 if(strcmp(mumname, "Wall") == 0) NWall = motherV[i]; //0,1,2,3 (increasing along the beam verse)
449
450 }
451
452 detID = (NWall+1)*1E4+(NRow*2+NColumn+1)*1E3+(NPlate+1);
453 fVolumeID = detID;
454 //found number of row, column and wall
455 //if (NColumn > 2 || NRow > 2 || NWall > 5) cout<<"Debug test for detID "<<detID<<" is "<<NColumn<<" "<<NRow<<" "<<NWall<<" "<<NPlate<<endl;
456 TParticle* p=gMC->GetStack()->GetCurrentTrack();
457 Int_t pdgCode = p->GetPdgCode();
458 if (pdgCode == 22) { return kFALSE; } //discard only photons
459
460 TLorentzVector Pos;
461 gMC->TrackPosition(Pos);
462 Double_t xmean = (fPos.X()+Pos.X())/2. ;
463 Double_t ymean = (fPos.Y()+Pos.Y())/2. ;
464 Double_t zmean = (fPos.Z()+Pos.Z())/2. ;
465
466 TLorentzVector Mom;
467 gMC->TrackMomentum(Mom);
468 AddHit(fTrackID, fVolumeID, TVector3(xmean, ymean, zmean),
469 TVector3(fMom.Px(), fMom.Py(), fMom.Pz()), fTime, fLength,
470 fELoss,pdgCode,TVector3(Pos.X(), Pos.Y(), Pos.Z()),TVector3(Mom.Px(), Mom.Py(), Mom.Pz()) );
471
472 // Increment number of muon det points in TParticle
473 ShipStack* stack = (ShipStack*) gMC->GetStack();
474 stack->AddPoint(kEmulsionDet);
475 }
476
477 return kTRUE;
478}
479
480
481
486
487
489{
490
497 FairRootManager::Instance()->Register("EmulsionDetPoint", "EmulsionDet",
499}
500
501TClonesArray* EmulsionDet::GetCollection(Int_t iColl) const
502{
503 if (iColl == 0) { return fEmulsionDetPointCollection; }
504 else { return NULL; }
505}
506
508{
510}
511
512
513EmulsionDetPoint* EmulsionDet::AddHit(Int_t trackID,Int_t detID,
514 TVector3 pos, TVector3 mom,
515 Double_t time, Double_t length,
516 Double_t eLoss, Int_t pdgCode,TVector3 Lpos, TVector3 Lmom)
517{
518 TClonesArray& clref = *fEmulsionDetPointCollection;
519 Int_t size = clref.GetEntriesFast();
520 return new(clref[size]) EmulsionDetPoint(trackID,detID, pos, mom,
521 time, length, eLoss, pdgCode,Lpos,Lmom);
522}
@ kEmulsionDet
Double_t PassiveThickness
virtual void EndOfEvent()
Double_t BrickPackageZ
Int_t fPassiveOption
Double_t BrickPackageY
Double_t WallZBorder_offset
Double_t AllPlateWidth
virtual Bool_t ProcessHits(FairVolume *v=0)
Double_t TotalWallZDim
Double_t WallYDim
Double_t ShiftY
Double_t PlasticBaseThickness
virtual TClonesArray * GetCollection(Int_t iColl) const
Double_t TTrackerZ
Int_t InitMedium(const char *name)
Double_t WallXDim
virtual void Reset()
Double_t EmPlateWidth
Double32_t fLength
time
Definition EmulsionDet.h:87
TClonesArray * fEmulsionDetPointCollection
energy loss
Definition EmulsionDet.h:91
void DecodeBrickID(Int_t detID, Int_t &NWall, Int_t &NRow, Int_t &NColumn, Int_t &NPlate)
virtual ~EmulsionDet()
Double_t BrickY
EmulsionDetPoint * AddHit(Int_t trackID, Int_t detID, TVector3 pos, TVector3 mom, Double_t time, Double_t length, Double_t eLoss, Int_t pdgcode, TVector3 Lpos, TVector3 Lmom)
Double_t ZDimension
ClassDef(EmulsionDet, 5) private Int_t fVolumeID
track index
Definition EmulsionDet.h:77
Double_t BrickPackageX
Double_t EmulsionThickness
void ConstructGeometry()
Double_t ShiftX
std::map< TString, Float_t > conf_floats
Definition EmulsionDet.h:93
TLorentzVector fPos
volume id
Definition EmulsionDet.h:84
Double_t XDimension
Definition EmulsionDet.h:99
Double_t BrickX
Double_t WallZDim
Double32_t fTime
momentum at entrance
Definition EmulsionDet.h:86
virtual void Register()
std::map< TString, Int_t > conf_ints
Definition EmulsionDet.h:94
Int_t number_of_plates
TString PathBrickID(Int_t detID)
TLorentzVector fMom
position at entrance
Definition EmulsionDet.h:85
Double_t YDimension
virtual void Initialize()
Double32_t fELoss
length
Definition EmulsionDet.h:88
Double_t BrickZ
Double_t EmulsionY
Double_t EmulsionX
ClassImp(ecalContFact) ecalContFact