00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142 #include <stdlib.h>
00143 #include <string.h>
00144 #include "Stiostream.h"
00145
00146 #include "StSvtHitMaker.h"
00147
00148 #include "TDataSetIter.h"
00149 #include "TObjectSet.h"
00150 #include "StMessMgr.h"
00151 #include "StMCTruth.h"
00152
00153 #include "TFile.h"
00154 #include "TNtuple.h"
00155
00156 #include "StDbUtilities/StSvtCoordinateTransform.hh"
00157 #include "StDbUtilities/StCoordinates.hh"
00158
00159 #include "StSvtClassLibrary/StSvtHybridCollection.hh"
00160 #include "StSvtClassLibrary/StSvtData.hh"
00161 #include "StSvtClassLibrary/StSvtGeometry.hh"
00162 #include "StSvtClassLibrary/StSvtWaferGeometry.hh"
00163 #include "StSvtClassLibrary/StSvtT0.hh"
00164 #include "StSvtAnalysedHybridClusters.hh"
00165 #include "StSvtSimulationMaker/StSvtGeantHits.hh"
00166 #include "StEvent.h"
00167 #include "StEventTypes.h"
00168 #include "StDbUtilities/St_svtCorrectionC.h"
00169 #include "StDbUtilities/St_svtHybridDriftVelocityC.h"
00170
00171 ClassImp(StSvtHitMaker)
00172
00173 StSvtHitMaker::StSvtHitMaker(const char *name) : StMaker(name)
00174 {
00175 int n = (char*)&filenameC - (char*)&iWrite + sizeof(filenameC);
00176 memset(&iWrite,0,n);
00177 }
00178
00179
00180 StSvtHitMaker::~StSvtHitMaker()
00181 {
00182 delete m_x_vs_y;
00183 for (int i=0;i<mNwaf_no;i++) {delete m_waf_no[i];}
00184 delete [] m_waf_no; m_waf_no=0;
00185
00186 delete m_ClusTuple;
00187 delete m_hfile;
00188
00189
00190 delete mTimeHitResolution;
00191 delete mAnodeHitResolution;
00192 delete mXHitResolution;
00193 delete mYHitResolution;
00194 delete mZHitResolution;
00195 delete mHitResolution;
00196
00197 }
00198
00199
00200 Int_t StSvtHitMaker::Init()
00201 {
00202
00203 if (Debug()) gMessMgr->Debug() << "In StSvtHitMaker::Init() ..." << endm;
00204
00205 return StMaker::Init();
00206
00207 }
00208
00209
00210 Int_t StSvtHitMaker::InitRun(int runumber)
00211 {
00212
00213 if (Debug()) gMessMgr->Debug() << "In StSvtHitMaker::InitRun() ..." << endm;
00214
00215
00216 if( GetSvtRawData()){
00217 gMessMgr->Warning() << " No SVT raw data "<< endm;
00218 return kStWarn;
00219 }
00220
00221
00222 mSvtGeantHitColl = 0;
00223 St_DataSet *dataSet2 = GetDataSet("StSvtGeantHits");
00224 if (dataSet2)
00225 mSvtGeantHitColl = (StSvtHybridCollection*)(dataSet2->GetObject());
00226
00227 if( GetSvtGeometry() != kStOK) return kStWarn;
00228
00229
00230 if( GetSvtDriftVelocity() != kStOK) return kStWarn;
00231
00232
00233 if( GetSvtDriftCurve() != kStOK) return kStWarn;
00234
00235
00236 if( GetSvtT0() != kStOK) return kStWarn;
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255 m_x_vs_y = new TH2F("si_x_vs_y","X vs Y of Si space points",
00256 300,-30,30,300,-30,30);
00257
00258 m_x_vs_y->SetYTitle("y cm");
00259 m_x_vs_y->SetXTitle("x cm");
00260
00261 mNwaf_no = 2*mSvtData->getNumberOfBarrels();
00262 m_waf_no = new TH2F*[mNwaf_no];
00263
00264 char title1[20];
00265 char* title3;
00266 char title2[4];
00267
00268 int barrel=0;
00269
00270 for( int idbarrel=1; idbarrel<=mSvtData->getNumberOfBarrels();
00271 idbarrel++, barrel++){
00272
00273
00274 float n_ladders = float(mSvtData->getNumberOfLadders(idbarrel))+0.5;
00275
00276 sprintf(title1,"SvtLayer");
00277 sprintf(title2,"%d", barrel+1);
00278 title3 = strcat(title1,title2);
00279
00280
00281 m_waf_no[barrel] = new TH2F(title3," Si z vs ladder no.",
00282 100,-25.,25.,100,0.5,n_ladders);
00283 m_waf_no[barrel]->SetYTitle("ladder no");
00284 m_waf_no[barrel]->SetXTitle("Z cm");
00285 barrel++;
00286
00287 sprintf(title1,"SvtLayer");
00288 sprintf(title2,"%d", barrel+1);
00289 title3 = strcat(title1,title2);
00290 m_waf_no[barrel] = new TH2F(title3," Si z vs ladder no.",
00291 100,-25.,25.,100,0.5,n_ladders);
00292 m_waf_no[barrel]->SetYTitle("ladder no");
00293 m_waf_no[barrel]->SetXTitle("Z cm");
00294 }
00295
00296 if( iWrite >0){
00297 m_hfile = new TFile(filenameN,"RECREATE","Clusters");
00298
00299 m_ClusTuple = new TNtuple("Clusters","Clusters","flag:xl:yl:x:y:z:charge:mom2x:mom2y:numAnodes:numPixels:peak:hybrid:evt");
00300
00301
00302
00303
00304 }
00305
00306 if (mSvtGeantHitColl){
00307
00308 mTimeHitResolution = new TH1F("hitTRes","Delta X for Hits",1000,-2.0,2.0);
00309 mAnodeHitResolution = new TH1F("hitARes","Delta Z for Hits",1000,-2.0,2.0);
00310 mXHitResolution = new TH1F("hitXRes","Delta X for Hits",1000,-0.1,0.1);
00311 mYHitResolution = new TH1F("hitYRes","Delta Y for Hits",1000,-0.1,0.1);
00312 mZHitResolution = new TH1F("hitZRes","Delta Z for Hits",1000,-0.1,0.1);
00313 mHitResolution = new TH2F("hitRes","Delta Z Vs Delta X for Hits",1000,-2.0,2.0,1000,-2.0,2.0);
00314
00315 mTimeHitResolution->SetXTitle("delta X (timebucket)");
00316 mAnodeHitResolution->SetXTitle("delta Z (anode)");
00317 mXHitResolution->SetXTitle("delta X (cm)");
00318 mYHitResolution->SetXTitle("delta Y (cm)");
00319 mZHitResolution->SetXTitle("delta Z (cm)");
00320 mHitResolution->SetXTitle("delta X (timebucket)");
00321 mHitResolution->SetYTitle("delta Z (anode)");
00322 }
00323
00324
00325
00326 TObject *objLast,*objHist;
00327 gROOT->cd();
00328 objLast = gDirectory->GetList()->Last();
00329 TIter nextHist(gDirectory->GetList());
00330 int ready = !objLast;
00331 while((objHist=nextHist())) {
00332 if (!ready && objHist!=objLast) continue;
00333 ready = 1999;
00334 if (objHist==objLast) continue;
00335 if (!objHist->InheritsFrom("TH1")) continue;
00336
00337
00338 ((TH1*)objHist)->SetDirectory(0);
00339 AddHist((TH1*)objHist);
00340 }
00341 return kStOK;
00342
00343 }
00344
00345
00346
00347
00348 Int_t StSvtHitMaker::GetSvtRawData()
00349 {
00350
00351 mSvtData = 0;
00352 St_DataSet *dataSet2 = GetDataSet("StSvtData");
00353 if( dataSet2) mSvtData = (StSvtData*)(dataSet2->GetObject());
00354
00355 if( !mSvtData) return kStWarn;
00356 return kStOk;
00357 }
00358
00359
00360 Int_t StSvtHitMaker::GetSvtClusterData()
00361 {
00362
00363 mSvtCluColl = 0;
00364 St_DataSet *dataSet2 = GetDataSet("StSvtAnalResults");
00365 if( !dataSet2) return kStWarn;
00366 mSvtCluColl = (StSvtHybridCollection*)(dataSet2->GetObject());
00367
00368 if( !mSvtCluColl) return kStWarn;
00369 return kStOK;
00370
00371 }
00372
00373 Int_t StSvtHitMaker::GetSvtGeometry()
00374 {
00375 m_geom = 0;
00376 St_DataSet* dataSet;
00377 dataSet = GetDataSet("StSvtGeometry");
00378 if(!dataSet) {
00379 gMessMgr->Error("Failure to get SVT geometry - THINGS HAVE GONE SERIOUSLY WRONG!!!!! \n");
00380
00381 return kStOK;
00382 }
00383
00384 m_geom = (StSvtGeometry*)dataSet->GetObject();
00385
00386 return kStOK;
00387
00388 }
00389
00390 Int_t StSvtHitMaker::GetSvtDriftVelocity()
00391 {
00392 m_driftVeloc = 0;
00393 St_DataSet* dataSet;
00394 dataSet = GetDataSet("StSvtDriftVelocity");
00395 if(!dataSet) {
00396 gMessMgr->Error("Failure to get SVT drift velocity - THINGS HAVE GONE SERIOUSLY WRONG!!!!! \n");
00397
00398 return kStOK;
00399 }
00400
00401 m_driftVeloc = (StSvtHybridCollection*)dataSet->GetObject();
00402
00403 return kStOK;
00404
00405 }
00406
00407 Int_t StSvtHitMaker::GetSvtDriftCurve()
00408 {
00409 m_driftCurve = 0;
00410 return kStOK;
00411
00412 }
00413
00414 Int_t StSvtHitMaker::GetSvtT0()
00415 {
00416
00417 St_DataSet* dataSet;
00418 dataSet = GetDataSet("StSvtT0");
00419 if(!dataSet) {
00420 gMessMgr->Error("Failure to get SVT t0 - THINGS HAVE GONE SERIOUSLY WRONG!!!!! \n");
00421
00422 return kStOK;
00423 }
00424
00425 m_t0 = (StSvtT0*)dataSet->GetObject();
00426
00427 return kStOK;
00428
00429 }
00430
00431 Int_t StSvtHitMaker::Make()
00432 {
00433 if (Debug()) gMessMgr->Debug() << "In StSvtHitMaker::Make() ..." << endm;
00434
00435
00436 if( GetSvtRawData()){
00437 gMessMgr->Warning() <<" No SVT raw data" << endm;
00438 return kStWarn;
00439 }
00440
00441 if( GetSvtClusterData()){
00442 gMessMgr->Warning() <<" No SVT Cluster data" << endm;
00443 return kStWarn;
00444 }
00445
00446 if( !m_geom){
00447 gMessMgr->Warning() <<" Things are wrong with the SVT database!!!!!!!!!" << endm;
00448 }
00449
00450 TransformIntoSpacePoint();
00451 FillHistograms();
00452
00453
00454
00455
00456 return kStOK;
00457 }
00458
00459
00460
00461 void StSvtHitMaker::TransformIntoSpacePoint(){
00462
00463 int index, TotHits=0, GoodHit=0;
00464
00465
00466 StSvtCoordinateTransform SvtGeomTrans;
00467
00468
00469 St_svtCorrectionC *driftVelocityCor = 0;
00470 if(m_geom) SvtGeomTrans.setParamPointers(m_geom, mSvtData->getSvtConfig(), m_driftVeloc, m_driftCurve, m_t0,driftVelocityCor );
00471 StSvtLocalCoordinate localCoord(0,0,0);
00472 StSvtWaferCoordinate waferCoord(0,0,0,0,0,0);
00473 StGlobalCoordinate globalCoord(0,0,0);
00474 StThreeVectorF mPos(0,0,0);
00475 StEvent *pEvent = (StEvent*) GetInputDS("StEvent");
00476
00477
00478 St_svtHybridDriftVelocityC *driftVel = St_svtHybridDriftVelocityC::instance();
00479 assert(driftVel);
00480 Int_t index2 = -1;
00481 for(int barrel = 1;barrel <= mSvtData->getNumberOfBarrels();barrel++) {
00482
00483 for (int ladder = 1;ladder <= mSvtData->getNumberOfLadders(barrel);ladder++) {
00484
00485 for (int wafer = 1;wafer <= mSvtData->getNumberOfWafers(barrel);wafer++) {
00486
00487 for (int hybrid = 1;hybrid <=mSvtData->getNumberOfHybrids();hybrid++){
00488 index2++;
00489
00490 index = mSvtData->getHybridIndex(barrel,ladder,wafer,hybrid);
00491 if(index < 0) continue;
00492 if (! driftVel->p(barrel,ladder,wafer,hybrid)) continue;
00493 mSvtBigHit = (StSvtAnalysedHybridClusters*)mSvtCluColl->at(index);
00494 if( !mSvtBigHit) continue;
00495
00496 for( int clu=0; clu<mSvtBigHit->numOfHits(); clu++){
00497 if (! driftVel->IsValidDriftRegion(barrel,ladder,wafer,hybrid, mSvtBigHit->WaferPosition()[clu].x())) continue;
00498 TotHits++;
00499 mSvtBigHit->svtHitData()[clu].id = TotHits;
00500 waferCoord.setTimeBucket(mSvtBigHit->WaferPosition()[clu].x());
00501 waferCoord.setAnode(mSvtBigHit->WaferPosition()[clu].y());
00502 waferCoord.setLayer(mSvtBigHit->getLayerID());
00503 waferCoord.setLadder(ladder);
00504 waferCoord.setWafer(wafer);
00505 waferCoord.setHybrid(hybrid);
00506
00507 if( m_geom) {
00508 SvtGeomTrans(waferCoord,localCoord);
00509 SvtGeomTrans(localCoord,globalCoord);
00510 }
00511
00512
00513
00514
00515
00516 mPos.setX(globalCoord.position().x());
00517 mPos.setY(globalCoord.position().y());
00518 mPos.setZ(globalCoord.position().z());
00519 mSvtBigHit->svtHit()[clu].setPosition(mPos);
00520 mSvtBigHit->svtHitData()[clu].uv[0] = localCoord.position().x();
00521 mSvtBigHit->svtHitData()[clu].uv[1] = localCoord.position().y();
00522 mSvtBigHit->svtHitData()[clu].anode = waferCoord.anode();
00523 mSvtBigHit->svtHitData()[clu].timeb = waferCoord.timebucket();
00524
00525
00526
00527 if (pEvent) {
00528
00529 Int_t hw_position, svtx, svty;
00530 StSvtHit *svtHit = 0;
00531 StSvtHitCollection *svtHitColl = pEvent->svtHitCollection();
00532 if (! svtHitColl) {
00533 svtHitColl = new StSvtHitCollection;
00534 pEvent->setSvtHitCollection(svtHitColl);
00535 }
00536 svtHit = new StSvtHit();
00537 StSvtHitData *dat = mSvtBigHit->svtHitData() +clu;
00538 StThreeVector<double> *waf = mSvtBigHit->WaferPosition()+clu;
00539 StSvtHit *hit= mSvtBigHit->svtHit() +clu;
00540
00541 hw_position = 2;
00542 hw_position += (1L<<4)*(index2);
00543 svtx = int(waf->x()*4);
00544 hw_position += (1L<<13)*(svtx);
00545 svty = int(waf->y()*4);
00546 hw_position += (1L<<22)*svty;
00547 svtHit->setHardwarePosition(hw_position);
00548 svtHit->setIdTruth(hit->idTruth(),hit->qaTruth());
00549
00550 svtHit->setPeak(dat->peakAdc);
00551 svtHit->setCharge(hit->charge());
00552 svtHit->setFlag(hit->flag());
00553 if (driftVelocityCor) {
00554 if (! driftVelocityCor->pCorrection(svtHit->layer(), svtHit->ladder(), svtHit->wafer(), svtHit->hybrid()))
00555 svtHit->setFlag(hit->flag()+100);
00556 }
00557 svtHit->setFitFlag(0);
00558 svtHit->setPosition(mSvtBigHit->svtHit()[clu].position());
00559 svtHit->setId(dat->id);
00560 svtHit->setLocalPosition(dat->uv[0],dat->uv[1]);
00561 svtHit->setAnode(dat->anode);
00562 svtHit->setTimebucket(dat->timeb);
00563 svtHit->setNumberOfAnodes(dat->numOfAnodesInClu);
00564 svtHit->setNumberOfPixels(dat->numOfPixelsInClu);
00565
00566 svtHitColl->addHit(svtHit);
00567 }
00568
00569 if(mSvtBigHit->svtHit()[clu].flag() < 4) GoodHit++;
00570
00571 if( iWrite > 0){
00572 SaveIntoNtuple(mSvtBigHit->numOfHits(),index);
00573 }
00574 }
00575 }
00576 }
00577 }
00578
00579 }
00580
00581 SafeDelete(driftVelocityCor);
00582 gMessMgr->Info() << "Found " << GoodHit << " good hits " << endm;
00583 }
00584
00585
00586 Int_t StSvtHitMaker::FillHistograms(){
00587
00588
00589 int index;
00590
00591 for(int barrel = 1;barrel <= mSvtData->getNumberOfBarrels();barrel++) {
00592
00593 for (int ladder = 1;ladder <= mSvtData->getNumberOfLadders(barrel);ladder++) {
00594
00595 for (int wafer = 1;wafer <= mSvtData->getNumberOfWafers(barrel);wafer++) {
00596
00597 for (int hybrid = 1;hybrid <=mSvtData->getNumberOfHybrids();hybrid++){
00598
00599
00600 index = mSvtData->getHybridIndex(barrel,ladder,wafer,hybrid);
00601 if(index < 0) continue;
00602
00603 mSvtBigHit = (StSvtAnalysedHybridClusters*)mSvtCluColl->at(index);
00604 if( !mSvtBigHit) continue;
00605
00606 for( int clu=0; clu<mSvtBigHit->numOfHits(); clu++){
00607
00608 if( mSvtBigHit->svtHit()[clu].flag() < 4){
00609 int layer = mSvtBigHit->getLayerID()-1;
00610 int ladder = (int)(mSvtBigHit->svtHit()[clu].ladder());
00611
00612 m_x_vs_y->Fill(mSvtBigHit->svtHit()[clu].position().x(),mSvtBigHit->svtHit()[clu].position().y());
00613 m_waf_no[layer]->Fill(mSvtBigHit->svtHit()[clu].position().z(),ladder,1);
00614 }
00615 }
00616 }
00617 }
00618 }
00619 }
00620 return kStOK;
00621 }
00622
00623
00624
00625 void StSvtHitMaker::SaveIntoNtuple(int numOfClusters, int index)
00626 {
00627
00628 for( int i=0; i<numOfClusters; i++){
00629 if( mSvtBigHit->svtHit()[i].flag() < 255)
00630 m_ClusTuple->Fill(mSvtBigHit->svtHit()[i].flag(),
00631 mSvtBigHit->WaferPosition()[i].x(),
00632 mSvtBigHit->WaferPosition()[i].y(),
00633 mSvtBigHit->svtHit()[i].position().x(),
00634 mSvtBigHit->svtHit()[i].position().y(),
00635 mSvtBigHit->svtHit()[i].position().z(),
00636 mSvtBigHit->svtHit()[i].charge(),
00637 mSvtBigHit->svtHitData()[i].mom2[0],
00638 mSvtBigHit->svtHitData()[i].mom2[1],
00639 mSvtBigHit->svtHitData()[i].numOfAnodesInClu,
00640 mSvtBigHit->svtHitData()[i].numOfPixelsInClu,
00641 mSvtBigHit->svtHitData()[i].peakAdc,
00642 index,
00643 mSvtData->getEventNumber());
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660 }
00661 }
00662
00663
00664
00665 Int_t StSvtHitMaker::Eval()
00666 {
00667 for(int barrel = 1;barrel <= mSvtData->getNumberOfBarrels();barrel++) {
00668 for (int ladder = 1;ladder <= mSvtData->getNumberOfLadders(barrel);ladder++) {
00669 for (int wafer = 1;wafer <= mSvtData->getNumberOfWafers(barrel);wafer++) {
00670 for (int hybrid = 1;hybrid <=mSvtData->getNumberOfHybrids();hybrid++){
00671
00672 int index = mSvtData->getHybridIndex(barrel,ladder,wafer,hybrid);
00673 if(index < 0) continue;
00674
00675 mSvtBigHit = (StSvtAnalysedHybridClusters*)mSvtCluColl->at(index);
00676 if( !mSvtBigHit) continue;
00677
00678 mSvtGeantHit = (StSvtGeantHits*)mSvtGeantHitColl->at(index);
00679 if( !mSvtGeantHit) continue;
00680
00681 for( int clu=0; clu<mSvtBigHit->numOfHits(); clu++){
00682
00683 float tim = mSvtBigHit->WaferPosition()[clu].x();
00684 float anod = mSvtBigHit->WaferPosition()[clu].y();
00685
00686 float diffTime = 0,diffAnode = 0, diffX = 0, diffY = 0, diffZ = 0;
00687
00688 for( int gHit = 0; gHit < mSvtGeantHit->numberOfHits(); gHit++){
00689 if(gHit == 0)
00690 {
00691 diffTime = tim - mSvtGeantHit->waferCoordinate()[gHit].timebucket();
00692 diffAnode = anod - mSvtGeantHit->waferCoordinate()[gHit].anode();
00693 diffX = mSvtBigHit->svtHit()[clu].position().x() - mSvtGeantHit->globalCoordinate()[gHit].position().x();
00694 diffY = mSvtBigHit->svtHit()[clu].position().y() - mSvtGeantHit->globalCoordinate()[gHit].position().y();
00695 diffZ = mSvtBigHit->svtHit()[clu].position().z() - mSvtGeantHit->globalCoordinate()[gHit].position().z();
00696 }
00697 if ((fabs(tim - mSvtGeantHit->waferCoordinate()[gHit].timebucket()) < fabs(diffTime)) &&
00698 (fabs(anod - mSvtGeantHit->waferCoordinate()[gHit].anode()) < fabs(diffAnode))) {
00699
00700 diffTime = tim - mSvtGeantHit->waferCoordinate()[gHit].timebucket();
00701 diffAnode = anod - mSvtGeantHit->waferCoordinate()[gHit].anode();
00702 diffX = mSvtBigHit->svtHit()[clu].position().x() - mSvtGeantHit->globalCoordinate()[gHit].position().x();
00703 diffY = mSvtBigHit->svtHit()[clu].position().y() - mSvtGeantHit->globalCoordinate()[gHit].position().y();
00704 diffZ = mSvtBigHit->svtHit()[clu].position().z() - mSvtGeantHit->globalCoordinate()[gHit].position().z();
00705 }
00706 }
00707
00708
00709 mTimeHitResolution->Fill(diffTime);
00710 mAnodeHitResolution->Fill(diffAnode);
00711 mXHitResolution->Fill(diffX);
00712 mYHitResolution->Fill(diffY);
00713 mZHitResolution->Fill(diffZ);
00714 mHitResolution->Fill(diffTime,diffAnode);
00715 }
00716 }
00717 }
00718 }
00719 }
00720
00721 return kStOK;
00722 }
00723
00724
00725 Int_t StSvtHitMaker::Finish(){
00726
00727 if (Debug()) gMessMgr->Debug() << "In StSvtHitMaker::Finish() ..."
00728 << GetName() << endm;
00729
00730 if( iWrite == 1){
00731 iWrite = 0;
00732 m_hfile->Write();
00733 m_hfile->Close();
00734 delete m_hfile; m_hfile=0;
00735
00736 }
00737 return kStOK;
00738 }
00739
00740
00741 void StSvtHitMaker::SetFileNames(char* filen, char* filec){
00742 filenameN = filen;
00743 filenameC = filec;
00744 }
00745
00746
00747 double StSvtHitMaker::LaserTemperatureCorrection() {
00748
00749
00750
00751
00752
00753 double driftVelocityChange;
00754 int barrel,ladder,wafer,hybrid;
00755 double anode,tbin;
00756
00757 int index;
00758 double tbin1,tbin2;
00759
00760 driftVelocityChange=1.0;
00761 barrel=3;
00762 ladder=15;
00763 wafer=7;
00764 hybrid=1;
00765
00766 index= mSvtData->getHybridIndex(barrel,ladder,wafer,hybrid);
00767 mSvtBigHit = (StSvtAnalysedHybridClusters*)mSvtCluColl->at(index);
00768 if(!mSvtBigHit) {
00769
00770 return driftVelocityChange;
00771 }
00772
00773 tbin1=-1;
00774 tbin2=-1;
00775 for( int clu=0; clu<mSvtBigHit->numOfHits(); clu++){
00776
00777
00778
00779
00780 tbin=mSvtBigHit->WaferPosition()[clu].x();
00781 anode=mSvtBigHit->WaferPosition()[clu].y();
00782 if((tbin>123)&&(tbin<125)&&(anode>195)&&( anode<197)) tbin1=tbin;
00783 if((tbin>95)&&(tbin<98)&&(anode>198)&&(anode<201)) tbin2=tbin;
00784 }
00785
00786 if((tbin1>0)&&(tbin2>0)&&(tbin1!=tbin2)) driftVelocityChange=27.03/(tbin1-tbin2);
00787 else {
00788
00789
00790 cout << "Missing laser spot(s):" << endl;
00791 cout << "spot 1 status " << tbin1 << endl;
00792 cout << "spot 2 status " << tbin2 << endl;
00793 return driftVelocityChange;
00794 }
00795
00796 return driftVelocityChange;
00797 }