CGEM BOSS 6.6.5.f
BESIII Offline Software System
Loading...
Searching...
No Matches
bak_ReadCosmicRayData-00-00-05/src/ReadCosmicRayData.cxx
Go to the documentation of this file.
1/**************************************************************************
2 * CgemBOSS (BESIII Offline Software System) *
3 * *
4 * Author: The BESII Collaboration *
5 * Contributors: Aiqiang Guo, Liangliang Wang *
6 * Date: Dec 10 2018 *
7 * *
8 **************************************************************************/
9/**************************************************************************
10 * Note for 01
11 * Change the reading method for vectorized data
12 * By: Aiqiang Guo
13 * Date: Dec 17 2018
14 **************************************************************************/
15/**************************************************************************
16 * Note for 02
17 * Add CC and mTPC for cluster object
18 * By: Aiqiang Guo
19 * Date: Dec 27 2018
20 **************************************************************************/
21
22// include system lib
23#include <iostream>
24#include <iomanip>
25#include <string>
26#include <cmath>
27
28// Include files
29#include "GaudiKernel/AlgFactory.h"
30#include "GaudiKernel/DataObject.h"
31#include "GaudiKernel/IEventProcessor.h"
32
33#include "GaudiKernel/Incident.h"
34#include "GaudiKernel/IIncidentSvc.h"
35#include "GaudiKernel/Memory.h"
36
37#include <csignal>
38
39// for save digit & cluster
40#include "GaudiKernel/ISvcLocator.h"
41#include "GaudiKernel/IDataProviderSvc.h"
42#include "GaudiKernel/Bootstrap.h"
43#include "GaudiKernel/RegistryEntry.h"
44#include "GaudiKernel/MsgStream.h"
45
46#include "CgemRawEvent/CgemDigi.h"
47#include "CgemRecEvent/RecCgemCluster.h"
48
49#include "Identifier/CgemID.h"
50
51#include "RawEvent/RawDataUtil.h"
52#include "RawEvent/DigiEvent.h"
53#include "ReconEvent/ReconEvent.h"
54#include "EventModel/EventHeader.h"
55#include "GaudiKernel/SmartDataPtr.h"
56
57#include "ReadCosmicRayData/ReadCosmicRayData.h"
58
59//using namespace std;
60ReadCosmicRayData::ReadCosmicRayData(const std::string& name, ISvcLocator* pSvcLocator):
61 Algorithm(name,pSvcLocator){
62
63 declareProperty("Dir_file", Dir_file = "Cosmic_data_01.root");
64 declareProperty("TreeDigi", TreeDigi = "t1");
65 declareProperty("TreeCluster", TreeCluster = "t1");
66 declareProperty("ReadDigi", ReadDigi = true);
67 declareProperty("ReadCluster", ReadCluster = true);
68 declareProperty("DigiSheetID", DigiSheetID = 0);
69 declareProperty("Cut_on_tpc", Cut_on_tpc = false);
70 declareProperty("ClusterSheetID", ClusterSheetID = 0);
71 declareProperty("ClusterRecZ", ClusterRecZ = 0);
72 declareProperty("R_Cluster", R_Cluster = 1.0);
73 declareProperty("Shift_DigitLayerID", Shift_DigitLayerID = 0);
74 declareProperty("Shift_DigitSheetID", Shift_DigitSheetID = 0);
75 declareProperty("Shift_DigitXStripID", Shift_DigitXStripID = 0);
76 declareProperty("Shift_DigitVStripID", Shift_DigitVStripID = 0);
77 declareProperty("Shift_ClusterLayerID", Shift_ClusterLayerID = 0);
78 declareProperty("Shift_ClusterSheetID", Shift_ClusterSheetID = 0);
79 declareProperty("Shift_RecPhi", Shift_RecPhi = 0);
80 declareProperty("Shift_RecV", Shift_RecV = 0);
81 declareProperty("Shift_RecZ", Shift_RecZ = 0);
82 declareProperty("CosmicRayDataSetID", CosmicRayDataSetID = "CR201909");
83
84}
85
87}
88
90 MsgStream log(msgSvc(), name());
91 log << MSG::INFO << "ReadCosmicRayData initialize()" << endreq;
92
93 TString TDir_file(Dir_file);
94 f = new TFile(TDir_file);
95 if(ReadDigi)
96 {
97 TString TTreeDigi(TreeDigi);
98 Tdigi = (TTree*)f->Get(TTreeDigi);
99
100 // Get Cgem digi tree
101 Tdigi->SetBranchAddress("Event", &m_Event_D); // event ID
102 Tdigi->SetBranchAddress("nGemHit", &m_nGemHit); // nof GEM hits
103 // Tdigi->SetBranchAddress("GemHit_nHit", &m_nGemHit); // nof GEM hits it is the same thing as before
104
105 // information on the IDs
106 Tdigi->SetBranchAddress("GemHit_channel", m_channel); // channel no. [0, 63]
107 Tdigi->SetBranchAddress("GemHit_ROC", m_ROC); // ROC no.
108 Tdigi->SetBranchAddress("GemHit_chip", m_chip); // chip no.
109 Tdigi->SetBranchAddress("GemHit_FEB", m_FEB); // FEB no.
110 Tdigi->SetBranchAddress("GemHit_plane", m_plane); // plane
111 Tdigi->SetBranchAddress("GemHit_view", m_view); // view (axial or stereo strips)
112 Tdigi->SetBranchAddress("GemHit_strip", m_strip); // strip no.
113
114 // physical information
115 Tdigi->SetBranchAddress("GemHit_saturated", m_saturated); // is the ASIC channel saturated
116 Tdigi->SetBranchAddress("GemHit_q", m_charge); // charge (fC)
117 Tdigi->SetBranchAddress("GemHit_time", m_time); // time (ns)
118 // Tdigi->SetBranchAddress("GemHit_is_tpc", m_GemHit_is_tpc);
119
120 No_Entries_D = Tdigi->GetEntries();
121 Ind_Entry_D = 0;
122 }
123
124 /**
125 if(ReadCluster)
126 {
127 //Get Cgem cluster tree
128 TString TTreeCluster(TreeCluster);
129 Tcluster = (TTree*)f->Get(TTreeCluster);
130
131 Tcluster->SetBranchAddress("Event", &m_Event_C);
132 Tcluster->SetBranchAddress("GemCluster1d_nCluster", &m_nGemCluster);
133 Tcluster->SetBranchAddress("GemCluster1d_nHit", m_ClusternHit);
134 Tcluster->SetBranchAddress("GemCluster1d_HitIndex", m_ClusterHitIndex);
135 Tcluster->SetBranchAddress("GemCluster1d_plane", m_ClusterLayerID);
136 Tcluster->SetBranchAddress("GemCluster1d_view", m_Flag);
137 Tcluster->SetBranchAddress("GemCluster1d_q", m_EnergyDeposit);
138 Tcluster->SetBranchAddress("GemCluster1d_x", m_Cluster_x);
139 Tcluster->SetBranchAddress("GemCluster1d_z", m_Cluster_z);
140 Tcluster->SetBranchAddress("GemCluster1d_x_cc", m_Cluster_x_cc);
141 Tcluster->SetBranchAddress("GemCluster1d_x_tpc", m_Cluster_x_tpc);
142 Tcluster->SetBranchAddress("GemCluster1d_z_cc", m_Cluster_z_cc);
143 Tcluster->SetBranchAddress("GemCluster1d_z_tpc", m_Cluster_z_tpc);
144 //Tcluster->SetBranchAddress("ClusterSheetID", m_ClusterSheetID);
145 //Tcluster->SetBranchAddress("ClusterFlagB", m_ClusterFlagB);
146 //Tcluster->SetBranchAddress("ClusterFlagE", m_ClusterFlagE);
147 //Tcluster->SetBranchAddress("RecV", m_RecV);
148 //Tcluster->SetBranchAddress("RecZ", m_RecZ);
149
150 No_Entries_C = Tcluster->GetEntries();
151 Ind_Entry_C = 0;
152 }
153 **/
154
155 return StatusCode::SUCCESS;
156}
157
158
159int ReadCosmicRayData::TranslateDigitLayerID(int Input_LayerID)
160{
161 int ShiftValue = Shift_DigitLayerID;
162 return Input_LayerID+ShiftValue;
163}
164
165int ReadCosmicRayData::TranslateDigitSheetID(int Input_SheetID)
166{
167 int ShiftValue = Shift_DigitSheetID;
168 return Input_SheetID+ShiftValue;
169}
170
171int ReadCosmicRayData::TranslateDigitXStripID(int Input_StripID)
172{
173 int ShiftValue = Shift_DigitXStripID;
174 return Input_StripID+ShiftValue;
175}
176
177int ReadCosmicRayData::TranslateDigitVStripID(int Input_StripID)
178{
179 int ShiftValue = Shift_DigitVStripID;
180 return Input_StripID+ShiftValue;
181}
182
183int ReadCosmicRayData::TranslateDigitStripID(int Input_StripID, int StripType)
184{
185 int Output_StripID = -1;
186 if(StripType==0) Output_StripID = TranslateDigitXStripID(Input_StripID);
187 if(StripType==1) Output_StripID = TranslateDigitVStripID(Input_StripID);
188 return Output_StripID;
189}
190
191int ReadCosmicRayData::TranslateDigitStripType(int Input_StripType)
192{
193 return Input_StripType;
194}
195
196int ReadCosmicRayData::TranslateClusterLayerID(int Input_LayerID)
197{
198 int ShiftValue = Shift_ClusterLayerID;
199 return Input_LayerID+ShiftValue;
200}
201
202int ReadCosmicRayData::TranslateClusterSheetID(int Input_SheetID)
203{
204 int ShiftValue = Shift_ClusterSheetID;
205 return Input_SheetID+ShiftValue;
206}
207
208int ReadCosmicRayData::TranslateClusterFlag(int Input_Flag)
209{
210 return Input_Flag-2;
211}
212
213double ReadCosmicRayData::TranslateRecPhi(double Input_RecPhi)
214{
215 double ShiftValue = Shift_RecPhi;
216 return Input_RecPhi+ShiftValue;
217}
218
219double ReadCosmicRayData::TranslateRecV(double Input_RecV)
220{
221 double ShiftValue = Shift_RecV;
222 return Input_RecV+ShiftValue;
223}
224
225double ReadCosmicRayData::TranslateRecZ(double Input_RecZ)
226{
227 double ShiftValue = Shift_RecZ;
228 return Input_RecZ+ShiftValue;
229}
230
231void ReadCosmicRayData::ReadCgemDigits()
232{
233 //cout<<"Start to read the CgemDigits"<<endl;
234 Tdigi->GetEntry(Ind_Entry_D);
235 Ind_Entry_D++;
236}
237
238void ReadCosmicRayData::ReadCgemClusters()
239{
240 //cout<<"Start to read the CgemClusters"<<endl;
241 Tcluster->GetEntry(Ind_Entry_C);
242 Ind_Entry_C++;
243}
244
245bool ReadCosmicRayData::ConvertHitToDigi(int ihit, unsigned int &charge_channel, unsigned int &time_channel)
246{
247
248 if(CosmicRayDataSetID == "CR201909") {
249 // cout << "ReadCosmicRayData::ConvertGRAALToCgemBoss(), converting set " << CosmicRayDataSetID << endl;
250
251 // if(!m_GemHit_is_tpc[i]&&Cut_on_tpc) return false; // ??
252 charge_channel = 1;
253 time_channel = 1;
254
255 // from plane to LayerID
256 if(m_plane[ihit] == 0) m_LayerID[ihit] = 0; // LAYER1
257 else if(m_plane[ihit] == 1) m_LayerID[ihit] = 1; // LAYER2
258 else if(m_plane[ihit] == 2) m_LayerID[ihit] = 1; // LAYER2
259 else {
260 cout<<"ReadCosmicRayData::ConvertHitToDigi: unknown plane "<<m_plane[ihit]<<endl;
261 return false;
262 }
263
264 // from view to StripType
265 if(m_view[ihit] == 2) m_StripType[ihit] = 0; // x strip (phi)
266 else if(m_view[ihit] == 3) m_StripType[ihit] = 1; // v strip (stereo)
267 else {
268 cout<<"ReadCosmicRayData::ConvertHitToDigi: unknown view "<<m_view[ihit]<<endl;
269 return false;
270 }
271
272 // sheet ID/strip ID
273 m_SheetID[ihit] = 0; // LAYER 1
274 m_StripID[ihit] = m_strip[ihit];
275 if(m_LayerID[ihit] == 1) { // LAYER 2
276 if(m_StripType[ihit] == 0 && m_strip[ihit] >= CgemID::getXSTRIP_MAX(m_LayerID[ihit])) {
277 m_StripID[ihit] = m_strip[ihit] - CgemID::getXSTRIP_MAX(m_LayerID[ihit]);
278 m_SheetID[ihit] = 1;
279 }
280 else if(m_StripType[ihit] == 1 && m_strip[ihit] >= CgemID::getVSTRIP_MAX(m_LayerID[ihit])) {
281 m_StripID[ihit] = m_strip[ihit] - CgemID::getVSTRIP_MAX(m_LayerID[ihit]);
282 m_SheetID[ihit] = 1;
283 }
284 }
285
286 // cout << "GRAAL " << m_strip[ihit] << " view " << m_view[ihit] << " plane " << m_plane[ihit] << endl;
287 // cout << "CGEMB " << m_StripID[ihit] << " view " << m_StripType[ihit] << " plane " << m_LayerID[ihit] << " sheet " << m_SheetID[ihit] << endl;
288
289
290 return true;
291 }
292
293 cout << "ERROR : ReadCosmicRayData::ConvertGRAALToCgemBoss(), the data set " << CosmicRayDataSetID << " is unknown! " << endl;
294 return false;
295
296}
297
298void ReadCosmicRayData::SaveCgemDigits()
299{
300
301 bool printFlag=false;
302 //cout<<"Start to save CgemDigi"<<endl;
303 // cgem digis collection defined in BOSS
304 CgemDigiCol* aCgemDigiCol = new CgemDigiCol;
305
306 //cout<<"nDigi : "<<m_nGemHit<<endl;
307 if (m_nGemHit > 0)
308 {
309 // push back cgem digits to CgemDigiCol in BOSS
310 for(int i=0;i<m_nGemHit;i++)
311 {
312 unsigned int charge_channel;
313 unsigned int time_channel;
314 bool is_converted = ConvertHitToDigi(i, charge_channel, time_channel);
315 if(!is_converted) {
316 cout<<"ReadCosmicRayData::SaveCgemDigits failed to convert hit "<<i<<" to digi in event "<<m_Event_D<<endl;
317 continue;
318 }
319 const Identifier ident = CgemID::strip_id(
320 TranslateDigitLayerID(m_LayerID[i]),
321 TranslateDigitSheetID(m_SheetID[i]),
322 TranslateDigitStripType(m_StripType[i]),
323 TranslateDigitStripID(m_StripID[i],TranslateDigitStripType(m_StripType[i])));
324
325 /**
326 cout << "graal strip " << m_strip[i]
327 << " graal view " << m_view[i]
328 << " stripid " << m_StripID[i]
329 << " striptype " << m_StripType[i]
330 << " strip " << TranslateDigitStripID(m_StripID[i],TranslateDigitStripType(m_StripType[i]))
331 << " identifier " << CgemID::getIntID(TranslateDigitLayerID(m_LayerID[i]),
332 TranslateDigitSheetID(m_SheetID[i]),
333 TranslateDigitStripType(m_StripType[i]),
334 TranslateDigitStripID(m_StripID[i],TranslateDigitStripType(m_StripType[i]))) << endl;;
335 **/
336
337 int layerid = CgemID::layer(ident);
338 int stripid = CgemID::strip(ident);
339 int sheetid = CgemID::sheet(ident);
340 bool is_xstrip = CgemID::is_xstrip(ident);
341
342 if(printFlag)
343 {
344 cout
345 << " digiID=" << ident.get_value()
346 << " layerID=" << CgemID::layer(ident)
347 << " sheetID=" << CgemID::sheet(ident)
348 << " isXstrip="<< CgemID::is_xstrip(ident)
349 << " stripID=" << CgemID::strip(ident)
350 << " time channel=" << time_channel
351 << " charge channel=" << charge_channel << endl;
352 }
353
354 CgemDigi* aCgemDigi = new CgemDigi(ident, time_channel, charge_channel);
355 aCgemDigi->setTime_ns(m_time[i]);
356 aCgemDigi->setCharge_fc(m_charge[i]);
357 aCgemDigiCol->push_back(aCgemDigi);
358
359 } // End of 'for(int i=0;i<nDigi;i++)'
360 } // End of 'if (nDigi > 0)'
361
362 // register CGEM digits collection to TDS
363 StatusCode scCgem = m_evtSvc->registerObject("/Event/Digi/CgemDigiCol", aCgemDigiCol);
364 if(scCgem!=StatusCode::SUCCESS)
365 {
366 cout << "ERROR : ReadCosmicRayData::SaveCgemDigits(), Could not register CGEM digi collection! " << endl;
367 }
368
369 //retrieve CGEM digits from TDS
370 /**
371 SmartDataPtr<CgemDigiCol> aDigiCol(m_evtSvc,"/Event/Digi/CgemDigiCol");
372 if(!aDigiCol)
373 cout<<"Could not retrieve CGEM digi collection"<<endl;
374
375 CgemDigiCol::iterator iDigiCol;
376 for(iDigiCol=aDigiCol->begin(); iDigiCol!=aDigiCol->end(); iDigiCol++)
377 {
378 const Identifier ident = (*iDigiCol)->identify();
379 cout<<" layer: "<<CgemID::layer(ident)
380 <<" sheet: "<<CgemID::sheet(ident)
381 <<" strip: "<<CgemID::strip(ident)
382 <<" charge: "<<(*iDigiCol)->getCharge_fc()
383 <<" time: "<<(*iDigiCol)->getTime_ns()<<endl;
384 }
385 cout<<"end of retrieve CGEM digi collection"<<endl;
386 **/
387}
388
389
390
391void ReadCosmicRayData::SaveCgemClusters()
392{
393
394 bool printFlag=false;
395 //cout<<"Start to save CgemCluster"<<endl;
396
397 // cgem digis collection defined in BOSS
398 RecCgemClusterCol* aRecCgemClusterCol = new RecCgemClusterCol;
399
400 int nCluster = m_nGemCluster; // the number of Clusters in one event
401 if (nCluster > 0)
402 {
403 // push back cgem clusters to RecCgemClusterCol in BOSS
404 for(int i=0;i<nCluster;i++)
405 {
406 RecCgemCluster* aRecCgemCluster = new RecCgemCluster();
407
408 aRecCgemCluster->setclusterid(i);
409 aRecCgemCluster->setlayerid(TranslateClusterLayerID(m_ClusterLayerID[i]));
410 aRecCgemCluster->setsheetid(ClusterSheetID);
411 aRecCgemCluster->setflag(TranslateClusterFlag(m_Flag[i]));
412 aRecCgemCluster->setenergydeposit(m_EnergyDeposit[i]);
413 if(TranslateClusterFlag(m_Flag[i])==0)
414 {
415 aRecCgemCluster->setrecphi(m_Cluster_x[i]);
416 aRecCgemCluster->setrecphi_CC(m_Cluster_x_cc[i]);
417 aRecCgemCluster->setrecphi_mTPC(m_Cluster_x_tpc[i]);
418 }
419 if(TranslateClusterFlag(m_Flag[i])==1)
420 {
421 aRecCgemCluster->setrecv(m_Cluster_x[i]);
422 aRecCgemCluster->setrecv_CC(m_Cluster_x_cc[i]);
423 aRecCgemCluster->setrecv_mTPC(m_Cluster_x_tpc[i]);
424 }
425 aRecCgemCluster->setRecZ(ClusterRecZ); //currently, no Z information is available
426 aRecCgemCluster->setRecZ_CC(ClusterRecZ);
427 aRecCgemCluster->setRecZ_mTPC(ClusterRecZ);
428 //aRecCgemCluster->setRecZ(m_Cluster_z[i]);
429 //aRecCgemCluster->setRecZ_CC(m_Cluster_z_cc[i]);
430 //aRecCgemCluster->setRecZ_mTPC(m_Cluster_z_tpc[i]);
431 aRecCgemCluster->setclusterflag(m_ClusterHitIndex[i][0],m_ClusterHitIndex[i][m_ClusternHit[i]-1]);
432
433 if(printFlag)
434 {
435 cout
436 << " clusterID=" << aRecCgemCluster->getclusterid()
437 << " clusterlayerID=" << aRecCgemCluster->getlayerid()
438 << " clustersheetID=" << aRecCgemCluster->getsheetid()
439 << " flag=" << aRecCgemCluster->getflag()
440 << " energydeposit=" << aRecCgemCluster->getenergydeposit()
441 << " recphi=" << aRecCgemCluster->getrecphi()
442 << " recv=" << aRecCgemCluster->getrecv()
443 << " recZ=" << aRecCgemCluster->getRecZ()
444 << " clusterflagb=" << aRecCgemCluster->getclusterflagb()
445 << " clusterflage=" << aRecCgemCluster->getclusterflage()<< endl;
446 }
447
448 aRecCgemClusterCol->push_back(aRecCgemCluster);
449
450 }
451 }
452
453
454 // register CGEM clusters collection to TDS
455 StatusCode scCgem = m_evtSvc->registerObject("/Event/Recon/RecCgemClusterCol", aRecCgemClusterCol); //Where should I put the vector?
456 if(scCgem!=StatusCode::SUCCESS)
457 {
458 cout << "ERROR : ReadCosmicRayData:::SaveCgemClusters(), Could not register CGEM cluster collection! " << endl;
459 }
460
461}
462
463
464StatusCode ReadCosmicRayData::execute(){
465
466 MsgStream log(msgSvc(), name());
467 if(ReadDigi&&!ReadCluster) log << MSG::INFO << "ReadCosmicRayData execute(): "<<Ind_Entry_D+1<<"/"<<No_Entries_D<<" events are finished !" << endreq;
468 if(!ReadDigi&&ReadCluster) log << MSG::INFO << "ReadCosmicRayData execute(): "<<Ind_Entry_C+1<<"/"<<No_Entries_C<<" events are finished !" << endreq;
469 if(ReadDigi&&ReadCluster) log << MSG::INFO << "ReadCosmicRayData execute(): "<<Ind_Entry_C+1<<"/"<<No_Entries_C<<" events are finished !" << endreq;
470
471 //interface to event data service
472 ISvcLocator* svcLocator = Gaudi::svcLocator();
473 StatusCode sc=svcLocator->service("EventDataSvc", m_evtSvc);
474 if (sc.isFailure())
475 cout<<"Could not accesss EventDataSvc!"<<endl;
476
477 if(ReadDigi)
478 {
479 DigiEvent* aDigiEvent = new DigiEvent;
480 sc = m_evtSvc->registerObject("/Event/Digi",aDigiEvent);
481 if(sc!=StatusCode::SUCCESS) {
482 cout<< "Could not register DigiEvent" <<endl;
483 }
484
485 ReadCgemDigits();
486 SaveCgemDigits();
487 //cout<<"Ind_Entry_D "<<Ind_Entry_D<<", Max_Ind_Entry_D "<<No_Entries_D<<endl;
488
489 if(Ind_Entry_D==No_Entries_D)
490 {
491 log << MSG::INFO << "scheduling a event processing stop...." << endreq;
492 SmartIF<IEventProcessor> ep(serviceLocator());
493 if (ep) ep->stopRun();
494 }
495
496 }
497 if(ReadCluster)
498 {
499 ReconEvent* aReconEvent = new ReconEvent;
500 sc = m_evtSvc->registerObject("/Event/Recon",aReconEvent);
501 if(sc!=StatusCode::SUCCESS) {
502 cout<< "Could not register ReconEvent" <<endl;
503 }
504
505 ReadCgemClusters();
506 SaveCgemClusters();
507 //cout<<"Ind_Entry_C "<<Ind_Entry_C<<", Max_Ind_Entry_C "<<No_Entries_C<<endl;
508 if(Ind_Entry_C==No_Entries_C)
509 {
510 log << MSG::INFO << "scheduling a event processing stop...." << endreq;
511 SmartIF<IEventProcessor> ep(serviceLocator());
512 if (ep) ep->stopRun();
513 }
514 }
515 return StatusCode::SUCCESS;
516}
517
518StatusCode ReadCosmicRayData::finalize(){
519 MsgStream log(msgSvc(),name());
520 log << MSG::INFO << "ReadCosmicRayData finalize()" << endreq;
521
522 return StatusCode::SUCCESS;
523}
524
525
526
ObjectVector< RecCgemCluster > RecCgemClusterCol
static int strip(const Identifier &id)
static int sheet(const Identifier &id)
static value_type getXSTRIP_MAX(unsigned int f_layer)
static int layer(const Identifier &id)
static value_type getVSTRIP_MAX(unsigned int f_layer)
static bool is_xstrip(const Identifier &id)
static Identifier strip_id(int f_layer, int f_sheet, int f_strip_type, int f_strip)
ReadCosmicRayData(const std::string &name, ISvcLocator *pSvcLocator)