@@ -118,6 +118,36 @@ Converter::~Converter() {
118118 }
119119}
120120
121+ int Converter::Cfd (TMnemonic::EDigitizer digitizer)
122+ {
123+ switch (digitizer) {
124+ case TMnemonic::EDigitizer::kGRF16 :
125+ // cfd is in 10/16th of a nanosecond, and replaces the lowest 18 bit of timestamp
126+ // so multiply the time by 16e8, and use only the lowest 22 bit
127+ return static_cast <int >(fTime *16e8 )&0x3fffff ;
128+ case TMnemonic::EDigitizer::kGRF4G :
129+ {
130+ // calculate cfd (0 - 8 ns) in 1/256 ns
131+ int cfd = fTime *256e9 ;
132+ cfd = cfd%1024 ;// 1024 = 256 steps for 0 - 8 ns
133+ // calculate remainder between 8 ns timestamp and 10 ns timestamp
134+ int rem = fTime *1e9 ;
135+ rem = rem%40 ;
136+ if (rem < 8 ) rem = 0 ;
137+ else if (rem < 16 ) rem = 8 ;
138+ else if (rem < 24 ) rem = 6 ;
139+ else if (rem < 32 ) rem = 4 ;
140+ else rem = 2 ;
141+ return (rem << 22 ) | cfd;
142+ }
143+ case TMnemonic::EDigitizer::kTIG10 :
144+ // cfd is in 10/16th of a nanosecond, and replaces the lowest 23 bit of timestamp
145+ return static_cast <int >(fTime *16e8 )&0x7ffffff ;
146+ default :
147+ return 0 ;
148+ }
149+ }
150+
121151bool Converter::Run () {
122152 int status;
123153 int eventNumber = 0 ;
@@ -245,35 +275,42 @@ bool Converter::Run() {
245275 switch (fSystemID ) {
246276 case 1000 :// griffin
247277 mnemonic = Form (" GRG%02d%cN00A" , fDetNumber , crystalColor[fCryNumber ]);
278+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF16 ));
248279 break ;
249280 case 1010 :// left extension suppressor
250281 case 1020 :// right extension suppressor
251282 case 1030 :// left casing suppressor
252283 case 1040 :// right casing suppressor
253284 case 1050 :// back suppressor
254285 mnemonic = Form (" GRS%02d%cN00A" , fDetNumber , crystalColor[fCryNumber ]);
286+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF16 ));
255287 break ;
256288 case 2000 :// LABr
257289 mnemonic = Form (" DAL%02dXN00X" , fDetNumber );
290+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF16 ));
258291 break ;
259292 case 3000 :// ancilliary BGO
260293 mnemonic = Form (" DAS%02dXN00X" , fDetNumber );
294+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF16 ));
261295 break ;
262296 case 5000 :// SCEPTAR
263297 mnemonic = Form (" SEP%02dXN00X" , fDetNumber );
298+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF16 ));
264299 break ;
265300 case 10 :// SPICE
266301 mnemonic = Form (" SPI%02dXN%0dX" , fDetNumber , fCryNumber );// TODO: fix SPICE mnemonic
267302 break ;
268303 case 50 :// PACES
269304 mnemonic = Form (" PAC%02dXN00A" , fDetNumber );
305+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF16 ));
270306 break ;
271307 case 8010 :// blue
272308 case 8020 :// green
273309 case 8030 :// red
274310 case 8040 :// white
275311 case 8050 :// yellow
276312 mnemonic = Form (" DSC%02dXN00X" , fDetNumber );
313+ fFragments [address].SetCfd (Cfd (TMnemonic::EDigitizer::kGRF4G ));
277314 break ;
278315 default :
279316 std::cerr<<" Sorry, unknown system ID " <<fSystemID <<std::endl;
0 commit comments