00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012 #include "TClonesArray.h"
00013
00014 #include "Calibrator/Calibrator.h"
00015 #include "Plex/PlexSEIdAltL.h"
00016 #include "Conventions/CalDigitType.h"
00017 #include "MessageService/MsgService.h"
00018 #include "Validity/VldContext.h"
00019
00020 #include "CalDetTracker/CDUnidentifiedHits.h"
00021 #include "CalDetTracker/CDTrackedHitInfo.h"
00022
00023 using std::cout;
00024 using std::endl;
00025 using std::map;
00026
00027 CVSID("$Id: CDUnidentifiedHits.cxx,v 1.4 2004/07/26 11:02:09 hartnell Exp $");
00028
00029
00030
00031 CDUnidentifiedHits::CDUnidentifiedHits
00032 (map<int,CandStripHandle> allStrips,
00033 map<int,CandStripHandle> evenPlStrips,
00034 map<int,CandStripHandle> oddPlStrips,
00035 map<int,CandStripHandle> CCStrips,
00036 map<int,CandStripHandle> xTalkStrips)
00037 {
00038 this->SetMap(allStrips,0);
00039 this->SetMap(evenPlStrips,1);
00040 this->SetMap(oddPlStrips,2);
00041 this->SetMap(CCStrips,3);
00042 this->SetMap(xTalkStrips,4);
00043 }
00044
00045
00046
00047 int CDUnidentifiedHits::SetMap(map<int,CandStripHandle> hits,int a)
00048 {
00049
00050 if(a==0) {
00051 map<int,CandStripHandle>::iterator digi_it = hits.begin();
00052 map<int,CandStripHandle>::iterator end_digi_it = hits.end();
00053 while(digi_it!=end_digi_it) {
00054 fAllStrips[digi_it->first] = digi_it->second;
00055 digi_it++;
00056 }
00057 return 1;
00058 }
00059
00060 else if(a==1) {
00061 map<int,CandStripHandle>::iterator even_it = hits.begin();
00062 map<int,CandStripHandle>::iterator end_even_it = hits.end();
00063 while(even_it!=end_even_it) {
00064 fEvenPlStrips[even_it->first] = even_it->second;
00065 even_it++;
00066 }
00067 return 1;
00068 }
00069
00070 else if(a==2) {
00071 map<int,CandStripHandle>::iterator odd_it = hits.begin();
00072 map<int,CandStripHandle>::iterator end_odd_it = hits.end();
00073 while(odd_it!=end_odd_it) {
00074 fOddPlStrips[odd_it->first] = odd_it->second;
00075 odd_it++;
00076 }
00077 return 1;
00078 }
00079
00080 else if(a==3) {
00081 map<int,CandStripHandle>::iterator cc_it = hits.begin();
00082 map<int,CandStripHandle>::iterator end_cc_it = hits.end();
00083 while(cc_it!=end_cc_it) {
00084 fCCStrips[cc_it->first] = cc_it->second;
00085 cc_it++;
00086 }
00087 return 1;
00088 }
00089
00090 else if(a==4) {
00091 map<int,CandStripHandle>::iterator xtalk_it = hits.begin();
00092 map<int,CandStripHandle>::iterator end_xtalk_it = hits.end();
00093 while(xtalk_it!=end_xtalk_it) {
00094 fXTalkStrips[xtalk_it->first] = xtalk_it->second;
00095 xtalk_it++;
00096 }
00097 return 1;
00098 }
00099
00100 else
00101 MSG("CDUnidentifiedHits",Msg::kWarning)
00102 << "CDUnidentifiedHits Error: "
00103 << "Not a valid map input number "
00104 << "0==all, 1==even planes, 2==odd planes, "
00105 << "3==cosmic counters, 4==X talk." << endl;
00106
00107 return 0;
00108 }
00109
00110
00111
00112 void CDUnidentifiedHits::GetUnidentifiedStripInfo
00113 (TClonesArray *infoarray)
00114 {
00115 map<int,CandStripHandle>::iterator stpIt = fAllStrips.begin();
00116 map<int,CandStripHandle>::iterator stpEnd = fAllStrips.end();
00117
00118
00119 Calibrator& calibrator=Calibrator::Instance();
00120
00121 if(stpIt!=stpEnd) {
00122 const VldContext *vc = stpIt->second.GetVldContext();
00123 calibrator.Reset(*vc);
00124 }
00125
00126 int cnt = 0;
00127
00128 TClonesArray &unident = *infoarray;
00129 while(stpIt!=stpEnd){
00130
00131 if(fEvenPlStrips.find(stpIt->first)==fEvenPlStrips.end() &&
00132 fOddPlStrips.find(stpIt->first)==fOddPlStrips.end() &&
00133 fXTalkStrips.find(stpIt->first)==fXTalkStrips.end() &&
00134 fCCStrips.find(stpIt->first)==fCCStrips.end()){
00135
00136 CandStripHandle csh = stpIt->second;
00137
00138 if(csh.GetNDigit(StripEnd::kNegative)>0){
00139 new(unident[cnt])
00140 CDTrackedHitInfo
00141 (StripEnd::kNegative,csh.GetPlane(),csh.GetStrip(),
00142 csh.GetCharge(CalDigitType::kNone,StripEnd::kNegative),
00143 csh.GetCharge(CalDigitType::kSigLin,StripEnd::kNegative),
00144 csh.GetCharge(CalDigitType::kSigCorr,StripEnd::kNegative),
00145 csh.GetCharge(CalDigitType::kPE,StripEnd::kNegative),
00146 calibrator.GetMIP(csh.GetCharge(CalDigitType::kSigCorr,
00147 StripEnd::kNegative)),
00148 0.,0.,0.,0.,0.,0.,csh.GetTime(StripEnd::kNegative));
00149 cnt++;
00150 }
00151
00152 if(csh.GetNDigit(StripEnd::kPositive)>0){
00153 new(unident[cnt])
00154 CDTrackedHitInfo
00155 (StripEnd::kPositive,csh.GetPlane(),csh.GetStrip(),
00156 csh.GetCharge(CalDigitType::kNone,StripEnd::kPositive),
00157 csh.GetCharge(CalDigitType::kSigLin,StripEnd::kPositive),
00158 csh.GetCharge(CalDigitType::kSigCorr,StripEnd::kPositive),
00159 csh.GetCharge(CalDigitType::kPE,StripEnd::kPositive),
00160 calibrator.GetMIP(csh.GetCharge(CalDigitType::kSigCorr,
00161 StripEnd::kPositive)),
00162 0.,0.,0.,0.,0.,0.,csh.GetTime(StripEnd::kPositive));
00163 cnt++;
00164 }
00165
00166 }
00167 stpIt++;
00168 }
00169 unident.Compress();
00170
00171 }
00172
00173
00174
00175
00176